{
  "version": 3,
  "sources": ["../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/index.js", "../../../node_modules/tinymce/tinymce.js", "../../../node_modules/tom-select/src/contrib/microevent.ts", "../../../node_modules/tom-select/src/contrib/microplugin.ts", "../../../node_modules/tom-select/node_modules/@orchidjs/unicode-variants/dist/esm/regex.js", "../../../node_modules/tom-select/node_modules/@orchidjs/unicode-variants/dist/esm/strings.js", "../../../node_modules/tom-select/node_modules/@orchidjs/unicode-variants/dist/esm/index.js", "../../../node_modules/tom-select/node_modules/@orchidjs/sifter/dist/esm/utils.js", "../../../node_modules/tom-select/node_modules/@orchidjs/sifter/dist/esm/sifter.js", "../../../node_modules/tom-select/node_modules/@orchidjs/sifter/lib/utils.ts", "../../../node_modules/tom-select/src/vanilla.ts", "../../../node_modules/tom-select/src/contrib/highlight.ts", "../../../node_modules/tom-select/src/constants.ts", "../../../node_modules/tom-select/src/defaults.ts", "../../../node_modules/tom-select/src/utils.ts", "../../../node_modules/tom-select/src/getSettings.ts", "../../../node_modules/tom-select/src/tom-select.ts", "../../../node_modules/tom-select/src/plugins/change_listener/plugin.ts", "../../../node_modules/tom-select/src/plugins/checkbox_options/plugin.ts", "../../../node_modules/tom-select/src/plugins/clear_button/plugin.ts", "../../../node_modules/tom-select/src/plugins/drag_drop/plugin.ts", "../../../node_modules/tom-select/src/plugins/dropdown_header/plugin.ts", "../../../node_modules/tom-select/src/plugins/caret_position/plugin.ts", "../../../node_modules/tom-select/src/plugins/dropdown_input/plugin.ts", "../../../node_modules/tom-select/src/plugins/input_autogrow/plugin.ts", "../../../node_modules/tom-select/src/plugins/no_backspace_delete/plugin.ts", "../../../node_modules/tom-select/src/plugins/no_active_items/plugin.ts", "../../../node_modules/tom-select/src/plugins/optgroup_columns/plugin.ts", "../../../node_modules/tom-select/src/plugins/remove_button/plugin.ts", "../../../node_modules/tom-select/src/plugins/restore_on_backspace/plugin.ts", "../../../node_modules/tom-select/src/plugins/virtual_scroll/plugin.ts", "../../../node_modules/tom-select/src/tom-select.complete.ts", "../../../node_modules/sweetalert2/dist/sweetalert2.all.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/@rails/activestorage/app/assets/javascripts/activestorage.esm.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application.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/appointment_request_form_controller.js", "../../../node_modules/flatpickr/dist/esm/types/options.js", "../../../node_modules/flatpickr/dist/esm/l10n/default.js", "../../../node_modules/flatpickr/dist/esm/utils/index.js", "../../../node_modules/flatpickr/dist/esm/utils/dom.js", "../../../node_modules/flatpickr/dist/esm/utils/formatting.js", "../../../node_modules/flatpickr/dist/esm/utils/dates.js", "../../../node_modules/flatpickr/dist/esm/utils/polyfills.js", "../../../node_modules/flatpickr/dist/esm/index.js", "../../../node_modules/stimulus-flatpickr/node_modules/@hotwired/stimulus/dist/stimulus.js", "../../../node_modules/stimulus-flatpickr/src/utils.js", "../../../node_modules/stimulus-flatpickr/src/config_options.js", "../../../node_modules/stimulus-flatpickr/src/events.js", "../../../node_modules/stimulus-flatpickr/src/elements.js", "../../../node_modules/stimulus-flatpickr/src/strftime_mapping.js", "../../../node_modules/stimulus-flatpickr/src/index.js", "../../javascript/controllers/appointments/calendar/date_picker_controller.js", "../../javascript/controllers/appointments/form_controller.js", "../../javascript/controllers/appointments/patient_search_controller.js", "../../javascript/controllers/array_input_controller.js", "../../javascript/controllers/billing/account_receivables_controller.js", "../../javascript/controllers/billing/payer_field_controller.js", "../../javascript/controllers/claims/total_calculator_controller.js", "../../javascript/controllers/deny_link_click_controller.js", "../../javascript/controllers/documents_form_controller.js", "../../javascript/controllers/dynamic_select_controller.js", "../../javascript/controllers/inline_select_edit_controller.js", "../../javascript/controllers/wysiwyg_controller.js", "../../javascript/tinymce/plugins/intake-document-template-fields/plugin.js", "../../javascript/tinymce/plugins/intake-document-template-fields/ui/field-dialog.js", "../../javascript/tinymce/plugins/intake-document-template-fields/ui/buttons.js", "../../javascript/tinymce/plugins/intake-document-template-fields/core/field-tag-component.js", "../../javascript/tinymce/plugins/intake-document-template-fields/index.js", "../../javascript/controllers/intake_document_templates/content_controller.js", "../../javascript/controllers/intake_document_templates/form_controller.js", "../../../node_modules/@popperjs/core/lib/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/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", "../../javascript/controllers/intake_documents/confirmable_field_controller.js", "../../javascript/controllers/intake_documents/form_controller.js", "../../javascript/controllers/intake_documents/pain_locations_controller.js", "../../javascript/controllers/medical_time_format_controller.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/controllers/modal_controller.js", "../../javascript/controllers/nested_form_controller.js", "../../javascript/controllers/patient_copies_controller.js", "../../javascript/controllers/patient_search_controller.js", "../../../node_modules/signature_pad/src/point.ts", "../../../node_modules/signature_pad/src/bezier.ts", "../../../node_modules/signature_pad/src/signature_event_target.ts", "../../../node_modules/signature_pad/src/throttle.ts", "../../../node_modules/signature_pad/src/signature_pad.ts", "../../javascript/controllers/pdf_form_signer_controller.js", "../../javascript/controllers/practitioner_info_controller.js", "../../javascript/controllers/report_templates/dynamic_content_controller.js", "../../javascript/lib/report-template-field-tag.js", "../../javascript/lib/report-template-dynamic-content-tag.js", "../../javascript/tinymce/plugins/report-template-fields/utils/index.js", "../../javascript/tinymce/plugins/report-template-fields/ui/field_dialog.js", "../../javascript/tinymce/plugins/report-template-fields/ui/dynamic_content_dialog.js", "../../javascript/tinymce/plugins/report-template-fields/ui/buttons.js", "../../javascript/tinymce/plugins/report-template-fields/plugin.js", "../../javascript/tinymce/plugins/report-template-fields/index.js", "../../javascript/controllers/report_templates/editor_controller.js", "../../../node_modules/hotkeys-js/dist/hotkeys.esm.js", "../../../node_modules/stimulus-use/dist/index.js", "../../javascript/controllers/report_templates/field_form_controller.js", "../../javascript/controllers/report_templates/referenced_field_select_controller.js", "../../javascript/controllers/report_templates/references_controller.js", "../../../node_modules/sortablejs/modular/sortable.esm.js", "../../javascript/controllers/report_templates/sortable_controller.js", "../../javascript/controllers/reports/copy_section_controller.js", "../../javascript/controllers/reports/finalize_controller.js", "../../javascript/controllers/reports_controller.js", "../../javascript/controllers/reveal_controller.js", "../../javascript/controllers/reveal_on_input_controller.js", "../../javascript/controllers/settings/new_pdf_form_field_controller.js", "../../javascript/controllers/settings/pdf_form_template_field_controller.js", "../../javascript/controllers/settings/permissions/row_helper_controller.js", "../../javascript/controllers/signature_controller.js", "../../javascript/controllers/signature_pad_controller.js", "../../javascript/controllers/signature_pad_receiver_controller.js", "../../javascript/controllers/slider_value_controller.js", "../../javascript/controllers/small_editor_controller.js", "../../javascript/controllers/sortable_controller.js", "../../javascript/controllers/textarea_limiter_controller.js", "../../javascript/controllers/tom_select_controller.js", "../../javascript/controllers/index.js", "../../../node_modules/@lit/reactive-element/src/css-tag.ts", "../../../node_modules/@lit/reactive-element/src/reactive-element.ts", "../../../node_modules/lit-html/src/lit-html.ts", "../../../node_modules/lit-element/src/lit-element.ts", "../../../node_modules/@lit/reactive-element/src/decorators/custom-element.ts", "../../../node_modules/@lit/reactive-element/src/decorators/property.ts", "../../../node_modules/@lit/reactive-element/src/decorators/base.ts", "../../../node_modules/@lit/reactive-element/src/decorators/query.ts", "../../javascript/components/pdf_forms/pdf_form_field_element.ts", "../../../node_modules/stimulus-textarea-autogrow/dist/stimulus-textarea-autogrow.mjs", "../../javascript/application.js"],
  "sourcesContent": ["export default {\n  logger: self.console,\n  WebSocket: self.WebSocket\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n//   ActionCable.logger.enabled = true\n//\n//   Example:\n//\n//   import * as ActionCable from '@rails/actioncable'\n//\n//   ActionCable.logger.enabled = true\n//   ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now())\n      adapters.logger.log(\"[ActionCable]\", ...messages)\n    }\n  },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this)\n    this.connection = connection\n    this.reconnectAttempts = 0\n  }\n\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now()\n      delete this.stoppedAt\n      this.startPolling()\n      addEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n    }\n  }\n\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now()\n      this.stopPolling()\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(\"ConnectionMonitor stopped\")\n    }\n  }\n\n  isRunning() {\n    return this.startedAt && !this.stoppedAt\n  }\n\n  recordPing() {\n    this.pingedAt = now()\n  }\n\n  recordConnect() {\n    this.reconnectAttempts = 0\n    this.recordPing()\n    delete this.disconnectedAt\n    logger.log(\"ConnectionMonitor recorded connect\")\n  }\n\n  recordDisconnect() {\n    this.disconnectedAt = now()\n    logger.log(\"ConnectionMonitor recorded disconnect\")\n  }\n\n  // Private\n\n  startPolling() {\n    this.stopPolling()\n    this.poll()\n  }\n\n  stopPolling() {\n    clearTimeout(this.pollTimeout)\n  }\n\n  poll() {\n    this.pollTimeout = setTimeout(() => {\n      this.reconnectIfStale()\n      this.poll()\n    }\n    , this.getPollInterval())\n  }\n\n  getPollInterval() {\n    const { staleThreshold, reconnectionBackoffRate } = this.constructor\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n    const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n    const jitter = jitterMax * Math.random()\n    return staleThreshold * 1000 * backoff * (1 + jitter)\n  }\n\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n      this.reconnectAttempts++\n      if (this.disconnectedRecently()) {\n        logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n      } else {\n        logger.log(\"ConnectionMonitor reopening\")\n        this.connection.reopen()\n      }\n    }\n  }\n\n  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt\n  }\n\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n  }\n\n  disconnectedRecently() {\n    return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n  }\n\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout(() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n          this.connection.reopen()\n        }\n      }\n      , 200)\n    }\n  }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n", "export default {\n  \"message_types\": {\n    \"welcome\": \"welcome\",\n    \"disconnect\": \"disconnect\",\n    \"ping\": \"ping\",\n    \"confirmation\": \"confirm_subscription\",\n    \"rejection\": \"reject_subscription\"\n  },\n  \"disconnect_reasons\": {\n    \"unauthorized\": \"unauthorized\",\n    \"invalid_request\": \"invalid_request\",\n    \"server_restart\": \"server_restart\"\n  },\n  \"default_mount_path\": \"/cable\",\n  \"protocols\": [\n    \"actioncable-v1-json\",\n    \"actioncable-unsupported\"\n  ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this)\n    this.consumer = consumer\n    this.subscriptions = this.consumer.subscriptions\n    this.monitor = new ConnectionMonitor(this)\n    this.disconnected = true\n  }\n\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data))\n      return true\n    } else {\n      return false\n    }\n  }\n\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n      return false\n    } else {\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`)\n      if (this.webSocket) { this.uninstallEventHandlers() }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, protocols)\n      this.installEventHandlers()\n      this.monitor.start()\n      return true\n    }\n  }\n\n  close({allowReconnect} = {allowReconnect: true}) {\n    if (!allowReconnect) { this.monitor.stop() }\n    // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n    if (this.isOpen()) {\n      return this.webSocket.close()\n    }\n  }\n\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n    if (this.isActive()) {\n      try {\n        return this.close()\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error)\n      }\n      finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n        setTimeout(this.open, this.constructor.reopenDelay)\n      }\n    } else {\n      return this.open()\n    }\n  }\n\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol\n    }\n  }\n\n  isOpen() {\n    return this.isState(\"open\")\n  }\n\n  isActive() {\n    return this.isState(\"open\", \"connecting\")\n  }\n\n  // Private\n\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n  }\n\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0\n  }\n\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase()\n        }\n      }\n    }\n    return null\n  }\n\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this)\n      this.webSocket[`on${eventName}`] = handler\n    }\n  }\n\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {}\n    }\n  }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) { return }\n    const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n    switch (type) {\n      case message_types.welcome:\n        this.monitor.recordConnect()\n        return this.subscriptions.reload()\n      case message_types.disconnect:\n        logger.log(`Disconnecting. Reason: ${reason}`)\n        return this.close({allowReconnect: reconnect})\n      case message_types.ping:\n        return this.monitor.recordPing()\n      case message_types.confirmation:\n        this.subscriptions.confirmSubscription(identifier)\n        return this.subscriptions.notify(identifier, \"connected\")\n      case message_types.rejection:\n        return this.subscriptions.reject(identifier)\n      default:\n        return this.subscriptions.notify(identifier, \"received\", message)\n    }\n  },\n\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n    this.disconnected = false\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n      return this.close({allowReconnect: false})\n    }\n  },\n\n  close(event) {\n    logger.log(\"WebSocket onclose event\")\n    if (this.disconnected) { return }\n    this.disconnected = true\n    this.monitor.recordDisconnect()\n    return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n  },\n\n  error() {\n    logger.log(\"WebSocket onerror event\")\n  }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n//     connected() {\n//       // Called once the subscription has been successfully completed\n//     },\n//\n//     disconnected({ willAttemptReconnect: boolean }) {\n//       // Called when the client has disconnected with the server.\n//       // The object will have an `willAttemptReconnect` property which\n//       // says whether the client has the intention of attempting\n//       // to reconnect.\n//     },\n//\n//     appear() {\n//       this.perform('appear', {appearing_on: this.appearingOn()})\n//     },\n//\n//     away() {\n//       this.perform('away')\n//     },\n//\n//     appearingOn() {\n//       $('main').data('appearing-on')\n//     }\n//   })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n//   class AppearanceChannel < ApplicationActionCable::Channel\n//     def subscribed\n//       current_user.appear\n//     end\n//\n//     def unsubscribed\n//       current_user.disappear\n//     end\n//\n//     def appear(data)\n//       current_user.appear on: data['appearing_on']\n//     end\n//\n//     def away\n//       current_user.away\n//     end\n//   end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key]\n      object[key] = value\n    }\n  }\n  return object\n}\n\nexport default class Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer\n    this.identifier = JSON.stringify(params)\n    extend(this, mixin)\n  }\n\n  // Perform a channel action with the optional data passed as an attribute\n  perform(action, data = {}) {\n    data.action = action\n    return this.send(data)\n  }\n\n  send(data) {\n    return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n  }\n\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this)\n  }\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions\n    this.pendingSubscriptions = []\n  }\n\n  guarantee(subscription) {\n    if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n      this.pendingSubscriptions.push(subscription) \n    }\n    else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n    }\n    this.startGuaranteeing()\n  }\n\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n    this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n  }\n\n  startGuaranteeing() {\n    this.stopGuaranteeing()\n    this.retrySubscribing()\n  }\n  \n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout)\n  }\n\n  retrySubscribing() {\n    this.retryTimeout = setTimeout(() => {\n      if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n        this.pendingSubscriptions.map((subscription) => {\n          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n          this.subscriptions.subscribe(subscription)\n        })\n      }\n    }\n    , 500)\n  }\n}\n\nexport default SubscriptionGuarantor", "import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer\n    this.guarantor = new SubscriptionGuarantor(this)\n    this.subscriptions = []\n  }\n\n  create(channelName, mixin) {\n    const channel = channelName\n    const params = typeof channel === \"object\" ? channel : {channel}\n    const subscription = new Subscription(this.consumer, params, mixin)\n    return this.add(subscription)\n  }\n\n  // Private\n\n  add(subscription) {\n    this.subscriptions.push(subscription)\n    this.consumer.ensureActiveConnection()\n    this.notify(subscription, \"initialized\")\n    this.subscribe(subscription)\n    return subscription\n  }\n\n  remove(subscription) {\n    this.forget(subscription)\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\")\n    }\n    return subscription\n  }\n\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription) => {\n      this.forget(subscription)\n      this.notify(subscription, \"rejected\")\n      return subscription\n    })\n  }\n\n  forget(subscription) {\n    this.guarantor.forget(subscription)\n    this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n    return subscription\n  }\n\n  findAll(identifier) {\n    return this.subscriptions.filter((s) => s.identifier === identifier)\n  }\n\n  reload() {\n    return this.subscriptions.map((subscription) =>\n      this.subscribe(subscription))\n  }\n\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription) =>\n      this.notify(subscription, callbackName, ...args))\n  }\n\n  notify(subscription, callbackName, ...args) {\n    let subscriptions\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription)\n    } else {\n      subscriptions = [subscription]\n    }\n\n    return subscriptions.map((subscription) =>\n      (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n  }\n\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription)\n    }\n  }\n\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`)\n    this.findAll(identifier).map((subscription) =>\n      this.guarantor.forget(subscription))\n  }\n\n  sendCommand(subscription, command) {\n    const {identifier} = subscription\n    return this.consumer.send({command, identifier})\n  }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n//   App.cable.disconnect()\n//\n// and to restart the connection:\n//\n//   App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n  constructor(url) {\n    this._url = url\n    this.subscriptions = new Subscriptions(this)\n    this.connection = new Connection(this)\n  }\n\n  get url() {\n    return createWebSocketURL(this._url)\n  }\n\n  send(data) {\n    return this.connection.send(data)\n  }\n\n  connect() {\n    return this.connection.open()\n  }\n\n  disconnect() {\n    return this.connection.close({allowReconnect: false})\n  }\n\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open()\n    }\n  }\n}\n\nexport function createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url()\n  }\n\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\")\n    a.href = url\n    // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n    a.href = a.href\n    a.protocol = a.protocol.replace(\"http\", \"ws\")\n    return a.href\n  } else {\n    return url\n  }\n}\n", "import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n  Connection,\n  ConnectionMonitor,\n  Consumer,\n  INTERNAL,\n  Subscription,\n  Subscriptions,\n  SubscriptionGuarantor,\n  adapters,\n  createWebSocketURL,\n  logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url)\n}\n\nexport function getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n  if (element) {\n    return element.getAttribute(\"content\")\n  }\n}\n", "/**\n * TinyMCE version 6.5.0 (2023-06-12)\n */\n\n(function () {\n    'use strict';\n\n    var typeOf$1 = function (x) {\n      if (x === null) {\n        return 'null';\n      }\n      if (x === undefined) {\n        return 'undefined';\n      }\n      var t = typeof x;\n      if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n        return 'array';\n      }\n      if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n        return 'string';\n      }\n      return t;\n    };\n    var isEquatableType = function (x) {\n      return [\n        'undefined',\n        'boolean',\n        'number',\n        'string',\n        'function',\n        'xml',\n        'null'\n      ].indexOf(x) !== -1;\n    };\n\n    var sort$1 = function (xs, compareFn) {\n      var clone = Array.prototype.slice.call(xs);\n      return clone.sort(compareFn);\n    };\n\n    var contramap = function (eqa, f) {\n      return eq$2(function (x, y) {\n        return eqa.eq(f(x), f(y));\n      });\n    };\n    var eq$2 = function (f) {\n      return { eq: f };\n    };\n    var tripleEq = eq$2(function (x, y) {\n      return x === y;\n    });\n    var eqString = tripleEq;\n    var eqArray = function (eqa) {\n      return eq$2(function (x, y) {\n        if (x.length !== y.length) {\n          return false;\n        }\n        var len = x.length;\n        for (var i = 0; i < len; i++) {\n          if (!eqa.eq(x[i], y[i])) {\n            return false;\n          }\n        }\n        return true;\n      });\n    };\n    var eqSortedArray = function (eqa, compareFn) {\n      return contramap(eqArray(eqa), function (xs) {\n        return sort$1(xs, compareFn);\n      });\n    };\n    var eqRecord = function (eqa) {\n      return eq$2(function (x, y) {\n        var kx = Object.keys(x);\n        var ky = Object.keys(y);\n        if (!eqSortedArray(eqString).eq(kx, ky)) {\n          return false;\n        }\n        var len = kx.length;\n        for (var i = 0; i < len; i++) {\n          var q = kx[i];\n          if (!eqa.eq(x[q], y[q])) {\n            return false;\n          }\n        }\n        return true;\n      });\n    };\n    var eqAny = eq$2(function (x, y) {\n      if (x === y) {\n        return true;\n      }\n      var tx = typeOf$1(x);\n      var ty = typeOf$1(y);\n      if (tx !== ty) {\n        return false;\n      }\n      if (isEquatableType(tx)) {\n        return x === y;\n      } else if (tx === 'array') {\n        return eqArray(eqAny).eq(x, y);\n      } else if (tx === 'object') {\n        return eqRecord(eqAny).eq(x, y);\n      }\n      return false;\n    });\n\n    const getPrototypeOf$2 = Object.getPrototypeOf;\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType$1 = type => value => typeOf(value) === type;\n    const isSimpleType = type => value => typeof value === type;\n    const eq$1 = t => a => t === a;\n    const is$4 = (value, constructor) => isObject(value) && hasProto(value, constructor, (o, proto) => getPrototypeOf$2(o) === proto);\n    const isString = isType$1('string');\n    const isObject = isType$1('object');\n    const isPlainObject = value => is$4(value, Object);\n    const isArray$1 = isType$1('array');\n    const isNull = eq$1(null);\n    const isBoolean = isSimpleType('boolean');\n    const isUndefined = eq$1(undefined);\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n    const isFunction = isSimpleType('function');\n    const isNumber = isSimpleType('number');\n    const isArrayOf = (value, pred) => {\n      if (isArray$1(value)) {\n        for (let i = 0, len = value.length; i < len; ++i) {\n          if (!pred(value[i])) {\n            return false;\n          }\n        }\n        return true;\n      }\n      return false;\n    };\n\n    const noop = () => {\n    };\n    const compose = (fa, fb) => {\n      return (...args) => {\n        return fa(fb.apply(null, args));\n      };\n    };\n    const compose1 = (fbc, fab) => a => fbc(fab(a));\n    const constant = value => {\n      return () => {\n        return value;\n      };\n    };\n    const identity = x => {\n      return x;\n    };\n    const tripleEquals = (a, b) => {\n      return a === b;\n    };\n    function curry(fn, ...initialArgs) {\n      return (...restArgs) => {\n        const all = initialArgs.concat(restArgs);\n        return fn.apply(null, all);\n      };\n    }\n    const not = f => t => !f(t);\n    const die = msg => {\n      return () => {\n        throw new Error(msg);\n      };\n    };\n    const apply$1 = f => {\n      return f();\n    };\n    const call = f => {\n      f();\n    };\n    const never = constant(false);\n    const always = constant(true);\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const nativeSlice = Array.prototype.slice;\n    const nativeIndexOf = Array.prototype.indexOf;\n    const nativePush = Array.prototype.push;\n    const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n    const indexOf$1 = (xs, x) => {\n      const r = rawIndexOf(xs, x);\n      return r === -1 ? Optional.none() : Optional.some(r);\n    };\n    const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1;\n    const exists = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const map$3 = (xs, f) => {\n      const len = xs.length;\n      const r = new Array(len);\n      for (let i = 0; i < len; i++) {\n        const x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    const each$e = (xs, f) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const eachr = (xs, f) => {\n      for (let i = xs.length - 1; i >= 0; i--) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const partition$2 = (xs, pred) => {\n      const pass = [];\n      const fail = [];\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        const arr = pred(x, i) ? pass : fail;\n        arr.push(x);\n      }\n      return {\n        pass,\n        fail\n      };\n    };\n    const filter$5 = (xs, pred) => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n    const foldr = (xs, f, acc) => {\n      eachr(xs, (x, i) => {\n        acc = f(acc, x, i);\n      });\n      return acc;\n    };\n    const foldl = (xs, f, acc) => {\n      each$e(xs, (x, i) => {\n        acc = f(acc, x, i);\n      });\n      return acc;\n    };\n    const findUntil$1 = (xs, pred, until) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(x);\n        } else if (until(x, i)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const find$2 = (xs, pred) => {\n      return findUntil$1(xs, pred, never);\n    };\n    const findIndex$2 = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(i);\n        }\n      }\n      return Optional.none();\n    };\n    const flatten = xs => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray$1(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    const bind$3 = (xs, f) => flatten(map$3(xs, f));\n    const forall = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        const x = xs[i];\n        if (pred(x, i) !== true) {\n          return false;\n        }\n      }\n      return true;\n    };\n    const reverse = xs => {\n      const r = nativeSlice.call(xs, 0);\n      r.reverse();\n      return r;\n    };\n    const difference = (a1, a2) => filter$5(a1, x => !contains$2(a2, x));\n    const mapToObject = (xs, f) => {\n      const r = {};\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        r[String(x)] = f(x, i);\n      }\n      return r;\n    };\n    const sort = (xs, comparator) => {\n      const copy = nativeSlice.call(xs, 0);\n      copy.sort(comparator);\n      return copy;\n    };\n    const get$b = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n    const head = xs => get$b(xs, 0);\n    const last$3 = xs => get$b(xs, xs.length - 1);\n    const from = isFunction(Array.from) ? Array.from : x => nativeSlice.call(x);\n    const findMap = (arr, f) => {\n      for (let i = 0; i < arr.length; i++) {\n        const r = f(arr[i], i);\n        if (r.isSome()) {\n          return r;\n        }\n      }\n      return Optional.none();\n    };\n    const unique$1 = (xs, comparator) => {\n      const r = [];\n      const isDuplicated = isFunction(comparator) ? x => exists(r, i => comparator(i, x)) : x => contains$2(r, x);\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (!isDuplicated(x)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n\n    const keys = Object.keys;\n    const hasOwnProperty$2 = Object.hasOwnProperty;\n    const each$d = (obj, f) => {\n      const props = keys(obj);\n      for (let k = 0, len = props.length; k < len; k++) {\n        const i = props[k];\n        const x = obj[i];\n        f(x, i);\n      }\n    };\n    const map$2 = (obj, f) => {\n      return tupleMap(obj, (x, i) => ({\n        k: i,\n        v: f(x, i)\n      }));\n    };\n    const tupleMap = (obj, f) => {\n      const r = {};\n      each$d(obj, (x, i) => {\n        const tuple = f(x, i);\n        r[tuple.k] = tuple.v;\n      });\n      return r;\n    };\n    const objAcc = r => (x, i) => {\n      r[i] = x;\n    };\n    const internalFilter = (obj, pred, onTrue, onFalse) => {\n      each$d(obj, (x, i) => {\n        (pred(x, i) ? onTrue : onFalse)(x, i);\n      });\n    };\n    const bifilter = (obj, pred) => {\n      const t = {};\n      const f = {};\n      internalFilter(obj, pred, objAcc(t), objAcc(f));\n      return {\n        t,\n        f\n      };\n    };\n    const filter$4 = (obj, pred) => {\n      const t = {};\n      internalFilter(obj, pred, objAcc(t), noop);\n      return t;\n    };\n    const mapToArray = (obj, f) => {\n      const r = [];\n      each$d(obj, (value, name) => {\n        r.push(f(value, name));\n      });\n      return r;\n    };\n    const values = obj => {\n      return mapToArray(obj, identity);\n    };\n    const get$a = (obj, key) => {\n      return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n    };\n    const has$2 = (obj, key) => hasOwnProperty$2.call(obj, key);\n    const hasNonNullableKey = (obj, key) => has$2(obj, key) && obj[key] !== undefined && obj[key] !== null;\n    const equal$1 = (a1, a2, eq = eqAny) => eqRecord(eq).eq(a1, a2);\n\n    const stringArray = a => {\n      const all = {};\n      each$e(a, key => {\n        all[key] = {};\n      });\n      return keys(all);\n    };\n\n    const isArrayLike = o => o.length !== undefined;\n    const isArray = Array.isArray;\n    const toArray$1 = obj => {\n      if (!isArray(obj)) {\n        const array = [];\n        for (let i = 0, l = obj.length; i < l; i++) {\n          array[i] = obj[i];\n        }\n        return array;\n      } else {\n        return obj;\n      }\n    };\n    const each$c = (o, cb, s) => {\n      if (!o) {\n        return false;\n      }\n      s = s || o;\n      if (isArrayLike(o)) {\n        for (let n = 0, l = o.length; n < l; n++) {\n          if (cb.call(s, o[n], n, o) === false) {\n            return false;\n          }\n        }\n      } else {\n        for (const n in o) {\n          if (has$2(o, n)) {\n            if (cb.call(s, o[n], n, o) === false) {\n              return false;\n            }\n          }\n        }\n      }\n      return true;\n    };\n    const map$1 = (array, callback) => {\n      const out = [];\n      each$c(array, (item, index) => {\n        out.push(callback(item, index, array));\n      });\n      return out;\n    };\n    const filter$3 = (a, f) => {\n      const o = [];\n      each$c(a, (v, index) => {\n        if (!f || f(v, index, a)) {\n          o.push(v);\n        }\n      });\n      return o;\n    };\n    const indexOf = (a, v) => {\n      if (a) {\n        for (let i = 0, l = a.length; i < l; i++) {\n          if (a[i] === v) {\n            return i;\n          }\n        }\n      }\n      return -1;\n    };\n    const reduce = (collection, iteratee, accumulator, thisArg) => {\n      let acc = isUndefined(accumulator) ? collection[0] : accumulator;\n      for (let i = 0; i < collection.length; i++) {\n        acc = iteratee.call(thisArg, acc, collection[i], i);\n      }\n      return acc;\n    };\n    const findIndex$1 = (array, predicate, thisArg) => {\n      for (let i = 0, l = array.length; i < l; i++) {\n        if (predicate.call(thisArg, array[i], i, array)) {\n          return i;\n        }\n      }\n      return -1;\n    };\n    const last$2 = collection => collection[collection.length - 1];\n\n    const cached = f => {\n      let called = false;\n      let r;\n      return (...args) => {\n        if (!called) {\n          called = true;\n          r = f.apply(null, args);\n        }\n        return r;\n      };\n    };\n\n    const DeviceType = (os, browser, userAgent, mediaMatch) => {\n      const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n      const isiPhone = os.isiOS() && !isiPad;\n      const isMobile = os.isiOS() || os.isAndroid();\n      const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n      const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n      const isPhone = isiPhone || isMobile && !isTablet;\n      const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n      const isDesktop = !isPhone && !isTablet && !iOSwebview;\n      return {\n        isiPad: constant(isiPad),\n        isiPhone: constant(isiPhone),\n        isTablet: constant(isTablet),\n        isPhone: constant(isPhone),\n        isTouch: constant(isTouch),\n        isAndroid: os.isAndroid,\n        isiOS: os.isiOS,\n        isWebView: constant(iOSwebview),\n        isDesktop: constant(isDesktop)\n      };\n    };\n\n    const firstMatch = (regexes, s) => {\n      for (let i = 0; i < regexes.length; i++) {\n        const x = regexes[i];\n        if (x.test(s)) {\n          return x;\n        }\n      }\n      return undefined;\n    };\n    const find$1 = (regexes, agent) => {\n      const r = firstMatch(regexes, agent);\n      if (!r) {\n        return {\n          major: 0,\n          minor: 0\n        };\n      }\n      const group = i => {\n        return Number(agent.replace(r, '$' + i));\n      };\n      return nu$3(group(1), group(2));\n    };\n    const detect$5 = (versionRegexes, agent) => {\n      const cleanedAgent = String(agent).toLowerCase();\n      if (versionRegexes.length === 0) {\n        return unknown$2();\n      }\n      return find$1(versionRegexes, cleanedAgent);\n    };\n    const unknown$2 = () => {\n      return nu$3(0, 0);\n    };\n    const nu$3 = (major, minor) => {\n      return {\n        major,\n        minor\n      };\n    };\n    const Version = {\n      nu: nu$3,\n      detect: detect$5,\n      unknown: unknown$2\n    };\n\n    const detectBrowser$1 = (browsers, userAgentData) => {\n      return findMap(userAgentData.brands, uaBrand => {\n        const lcBrand = uaBrand.brand.toLowerCase();\n        return find$2(browsers, browser => {\n          var _a;\n          return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n        }).map(info => ({\n          current: info.name,\n          version: Version.nu(parseInt(uaBrand.version, 10), 0)\n        }));\n      });\n    };\n\n    const detect$4 = (candidates, userAgent) => {\n      const agent = String(userAgent).toLowerCase();\n      return find$2(candidates, candidate => {\n        return candidate.search(agent);\n      });\n    };\n    const detectBrowser = (browsers, userAgent) => {\n      return detect$4(browsers, userAgent).map(browser => {\n        const version = Version.detect(browser.versionRegexes, userAgent);\n        return {\n          current: browser.name,\n          version\n        };\n      });\n    };\n    const detectOs = (oses, userAgent) => {\n      return detect$4(oses, userAgent).map(os => {\n        const version = Version.detect(os.versionRegexes, userAgent);\n        return {\n          current: os.name,\n          version\n        };\n      });\n    };\n\n    const removeFromStart = (str, numChars) => {\n      return str.substring(numChars);\n    };\n\n    const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n    const removeLeading = (str, prefix) => {\n      return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n    };\n    const contains$1 = (str, substr, start = 0, end) => {\n      const idx = str.indexOf(substr, start);\n      if (idx !== -1) {\n        return isUndefined(end) ? true : idx + substr.length <= end;\n      } else {\n        return false;\n      }\n    };\n    const startsWith = (str, prefix) => {\n      return checkRange(str, prefix, 0);\n    };\n    const endsWith = (str, suffix) => {\n      return checkRange(str, suffix, str.length - suffix.length);\n    };\n    const blank = r => s => s.replace(r, '');\n    const trim$3 = blank(/^\\s+|\\s+$/g);\n    const lTrim = blank(/^\\s+/g);\n    const rTrim = blank(/\\s+$/g);\n    const isNotEmpty = s => s.length > 0;\n    const isEmpty$3 = s => !isNotEmpty(s);\n    const repeat = (s, count) => count <= 0 ? '' : new Array(count + 1).join(s);\n    const toInt = (value, radix = 10) => {\n      const num = parseInt(value, radix);\n      return isNaN(num) ? Optional.none() : Optional.some(num);\n    };\n\n    const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n    const checkContains = target => {\n      return uastring => {\n        return contains$1(uastring, target);\n      };\n    };\n    const browsers = [\n      {\n        name: 'Edge',\n        versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n        search: uastring => {\n          return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n        }\n      },\n      {\n        name: 'Chromium',\n        brand: 'Chromium',\n        versionRegexes: [\n          /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n          normalVersionRegex\n        ],\n        search: uastring => {\n          return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\n        }\n      },\n      {\n        name: 'IE',\n        versionRegexes: [\n          /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*?rv:([0-9]+)\\.([0-9]+).*/\n        ],\n        search: uastring => {\n          return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\n        }\n      },\n      {\n        name: 'Opera',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n        ],\n        search: checkContains('opera')\n      },\n      {\n        name: 'Firefox',\n        versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n        search: checkContains('firefox')\n      },\n      {\n        name: 'Safari',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?cpu os ([0-9]+)_([0-9]+).*/\n        ],\n        search: uastring => {\n          return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n        }\n      }\n    ];\n    const oses = [\n      {\n        name: 'Windows',\n        search: checkContains('win'),\n        versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'iOS',\n        search: uastring => {\n          return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\n        },\n        versionRegexes: [\n          /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*cpu os ([0-9]+)_([0-9]+).*/,\n          /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n        ]\n      },\n      {\n        name: 'Android',\n        search: checkContains('android'),\n        versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'macOS',\n        search: checkContains('mac os x'),\n        versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n      },\n      {\n        name: 'Linux',\n        search: checkContains('linux'),\n        versionRegexes: []\n      },\n      {\n        name: 'Solaris',\n        search: checkContains('sunos'),\n        versionRegexes: []\n      },\n      {\n        name: 'FreeBSD',\n        search: checkContains('freebsd'),\n        versionRegexes: []\n      },\n      {\n        name: 'ChromeOS',\n        search: checkContains('cros'),\n        versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n      }\n    ];\n    const PlatformInfo = {\n      browsers: constant(browsers),\n      oses: constant(oses)\n    };\n\n    const edge = 'Edge';\n    const chromium = 'Chromium';\n    const ie = 'IE';\n    const opera = 'Opera';\n    const firefox = 'Firefox';\n    const safari = 'Safari';\n    const unknown$1 = () => {\n      return nu$2({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    const nu$2 = info => {\n      const current = info.current;\n      const version = info.version;\n      const isBrowser = name => () => current === name;\n      return {\n        current,\n        version,\n        isEdge: isBrowser(edge),\n        isChromium: isBrowser(chromium),\n        isIE: isBrowser(ie),\n        isOpera: isBrowser(opera),\n        isFirefox: isBrowser(firefox),\n        isSafari: isBrowser(safari)\n      };\n    };\n    const Browser = {\n      unknown: unknown$1,\n      nu: nu$2,\n      edge: constant(edge),\n      chromium: constant(chromium),\n      ie: constant(ie),\n      opera: constant(opera),\n      firefox: constant(firefox),\n      safari: constant(safari)\n    };\n\n    const windows = 'Windows';\n    const ios = 'iOS';\n    const android = 'Android';\n    const linux = 'Linux';\n    const macos = 'macOS';\n    const solaris = 'Solaris';\n    const freebsd = 'FreeBSD';\n    const chromeos = 'ChromeOS';\n    const unknown = () => {\n      return nu$1({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    const nu$1 = info => {\n      const current = info.current;\n      const version = info.version;\n      const isOS = name => () => current === name;\n      return {\n        current,\n        version,\n        isWindows: isOS(windows),\n        isiOS: isOS(ios),\n        isAndroid: isOS(android),\n        isMacOS: isOS(macos),\n        isLinux: isOS(linux),\n        isSolaris: isOS(solaris),\n        isFreeBSD: isOS(freebsd),\n        isChromeOS: isOS(chromeos)\n      };\n    };\n    const OperatingSystem = {\n      unknown,\n      nu: nu$1,\n      windows: constant(windows),\n      ios: constant(ios),\n      android: constant(android),\n      linux: constant(linux),\n      macos: constant(macos),\n      solaris: constant(solaris),\n      freebsd: constant(freebsd),\n      chromeos: constant(chromeos)\n    };\n\n    const detect$3 = (userAgent, userAgentDataOpt, mediaMatch) => {\n      const browsers = PlatformInfo.browsers();\n      const oses = PlatformInfo.oses();\n      const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n      const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n      const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n      return {\n        browser,\n        os,\n        deviceType\n      };\n    };\n    const PlatformDetection = { detect: detect$3 };\n\n    const mediaMatch = query => window.matchMedia(query).matches;\n    let platform$4 = cached(() => PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch));\n    const detect$2 = () => platform$4();\n\n    const userAgent = navigator.userAgent;\n    const platform$3 = detect$2();\n    const browser$2 = platform$3.browser;\n    const os$1 = platform$3.os;\n    const deviceType = platform$3.deviceType;\n    const windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\n    const Env = {\n      transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\n      documentMode: browser$2.isIE() ? document.documentMode || 7 : 10,\n      cacheSuffix: null,\n      container: null,\n      canHaveCSP: !browser$2.isIE(),\n      windowsPhone,\n      browser: {\n        current: browser$2.current,\n        version: browser$2.version,\n        isChromium: browser$2.isChromium,\n        isEdge: browser$2.isEdge,\n        isFirefox: browser$2.isFirefox,\n        isIE: browser$2.isIE,\n        isOpera: browser$2.isOpera,\n        isSafari: browser$2.isSafari\n      },\n      os: {\n        current: os$1.current,\n        version: os$1.version,\n        isAndroid: os$1.isAndroid,\n        isChromeOS: os$1.isChromeOS,\n        isFreeBSD: os$1.isFreeBSD,\n        isiOS: os$1.isiOS,\n        isLinux: os$1.isLinux,\n        isMacOS: os$1.isMacOS,\n        isSolaris: os$1.isSolaris,\n        isWindows: os$1.isWindows\n      },\n      deviceType: {\n        isDesktop: deviceType.isDesktop,\n        isiPad: deviceType.isiPad,\n        isiPhone: deviceType.isiPhone,\n        isPhone: deviceType.isPhone,\n        isTablet: deviceType.isTablet,\n        isTouch: deviceType.isTouch,\n        isWebView: deviceType.isWebView\n      }\n    };\n\n    const whiteSpaceRegExp$1 = /^\\s*|\\s*$/g;\n    const trim$2 = str => {\n      return isNullable(str) ? '' : ('' + str).replace(whiteSpaceRegExp$1, '');\n    };\n    const is$3 = (obj, type) => {\n      if (!type) {\n        return obj !== undefined;\n      }\n      if (type === 'array' && isArray(obj)) {\n        return true;\n      }\n      return typeof obj === type;\n    };\n    const makeMap$4 = (items, delim, map = {}) => {\n      const resolvedItems = isString(items) ? items.split(delim || ',') : items || [];\n      let i = resolvedItems.length;\n      while (i--) {\n        map[resolvedItems[i]] = {};\n      }\n      return map;\n    };\n    const hasOwnProperty$1 = has$2;\n    const extend$3 = (obj, ...exts) => {\n      for (let i = 0; i < exts.length; i++) {\n        const ext = exts[i];\n        for (const name in ext) {\n          if (has$2(ext, name)) {\n            const value = ext[name];\n            if (value !== undefined) {\n              obj[name] = value;\n            }\n          }\n        }\n      }\n      return obj;\n    };\n    const walk$4 = function (o, f, n, s) {\n      s = s || this;\n      if (o) {\n        if (n) {\n          o = o[n];\n        }\n        each$c(o, (o, i) => {\n          if (f.call(s, o, i, n) === false) {\n            return false;\n          } else {\n            walk$4(o, f, n, s);\n            return true;\n          }\n        });\n      }\n    };\n    const resolve$3 = (n, o = window) => {\n      const path = n.split('.');\n      for (let i = 0, l = path.length; i < l; i++) {\n        o = o[path[i]];\n        if (!o) {\n          break;\n        }\n      }\n      return o;\n    };\n    const explode$3 = (s, d) => {\n      if (isArray$1(s)) {\n        return s;\n      } else if (s === '') {\n        return [];\n      } else {\n        return map$1(s.split(d || ','), trim$2);\n      }\n    };\n    const _addCacheSuffix = url => {\n      const cacheSuffix = Env.cacheSuffix;\n      if (cacheSuffix) {\n        url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;\n      }\n      return url;\n    };\n    const Tools = {\n      trim: trim$2,\n      isArray: isArray,\n      is: is$3,\n      toArray: toArray$1,\n      makeMap: makeMap$4,\n      each: each$c,\n      map: map$1,\n      grep: filter$3,\n      inArray: indexOf,\n      hasOwn: hasOwnProperty$1,\n      extend: extend$3,\n      walk: walk$4,\n      resolve: resolve$3,\n      explode: explode$3,\n      _addCacheSuffix\n    };\n\n    const is$2 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n    const cat = arr => {\n      const r = [];\n      const push = x => {\n        r.push(x);\n      };\n      for (let i = 0; i < arr.length; i++) {\n        arr[i].each(push);\n      }\n      return r;\n    };\n    const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n    const lift3 = (oa, ob, oc, f) => oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n    const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n    const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n    const path = (parts, scope) => {\n      let o = scope !== undefined && scope !== null ? scope : Global;\n      for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n        o = o[parts[i]];\n      }\n      return o;\n    };\n    const resolve$2 = (p, scope) => {\n      const parts = p.split('.');\n      return path(parts, scope);\n    };\n\n    const unsafe = (name, scope) => {\n      return resolve$2(name, scope);\n    };\n    const getOrDie = (name, scope) => {\n      const actual = unsafe(name, scope);\n      if (actual === undefined || actual === null) {\n        throw new Error(name + ' not available on this browser');\n      }\n      return actual;\n    };\n\n    const getPrototypeOf$1 = Object.getPrototypeOf;\n    const sandHTMLElement = scope => {\n      return getOrDie('HTMLElement', scope);\n    };\n    const isPrototypeOf = x => {\n      const scope = resolve$2('ownerDocument.defaultView', x);\n      return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf$1(x).constructor.name));\n    };\n\n    const COMMENT = 8;\n    const DOCUMENT = 9;\n    const DOCUMENT_FRAGMENT = 11;\n    const ELEMENT = 1;\n    const TEXT = 3;\n\n    const name = element => {\n      const r = element.dom.nodeName;\n      return r.toLowerCase();\n    };\n    const type$1 = element => element.dom.nodeType;\n    const isType = t => element => type$1(element) === t;\n    const isComment$1 = element => type$1(element) === COMMENT || name(element) === '#comment';\n    const isHTMLElement = element => isElement$7(element) && isPrototypeOf(element.dom);\n    const isElement$7 = isType(ELEMENT);\n    const isText$b = isType(TEXT);\n    const isDocument$2 = isType(DOCUMENT);\n    const isDocumentFragment$1 = isType(DOCUMENT_FRAGMENT);\n    const isTag = tag => e => isElement$7(e) && name(e) === tag;\n\n    const rawSet = (dom, key, value) => {\n      if (isString(value) || isBoolean(value) || isNumber(value)) {\n        dom.setAttribute(key, value + '');\n      } else {\n        console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n        throw new Error('Attribute value was not simple');\n      }\n    };\n    const set$3 = (element, key, value) => {\n      rawSet(element.dom, key, value);\n    };\n    const setAll$1 = (element, attrs) => {\n      const dom = element.dom;\n      each$d(attrs, (v, k) => {\n        rawSet(dom, k, v);\n      });\n    };\n    const get$9 = (element, key) => {\n      const v = element.dom.getAttribute(key);\n      return v === null ? undefined : v;\n    };\n    const getOpt = (element, key) => Optional.from(get$9(element, key));\n    const has$1 = (element, key) => {\n      const dom = element.dom;\n      return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n    };\n    const remove$a = (element, key) => {\n      element.dom.removeAttribute(key);\n    };\n    const hasNone = element => {\n      const attrs = element.dom.attributes;\n      return attrs === undefined || attrs === null || attrs.length === 0;\n    };\n    const clone$4 = element => foldl(element.dom.attributes, (acc, attr) => {\n      acc[attr.name] = attr.value;\n      return acc;\n    }, {});\n\n    const read$4 = (element, attr) => {\n      const value = get$9(element, attr);\n      return value === undefined || value === '' ? [] : value.split(' ');\n    };\n    const add$4 = (element, attr, id) => {\n      const old = read$4(element, attr);\n      const nu = old.concat([id]);\n      set$3(element, attr, nu.join(' '));\n      return true;\n    };\n    const remove$9 = (element, attr, id) => {\n      const nu = filter$5(read$4(element, attr), v => v !== id);\n      if (nu.length > 0) {\n        set$3(element, attr, nu.join(' '));\n      } else {\n        remove$a(element, attr);\n      }\n      return false;\n    };\n\n    const supports = element => element.dom.classList !== undefined;\n    const get$8 = element => read$4(element, 'class');\n    const add$3 = (element, clazz) => add$4(element, 'class', clazz);\n    const remove$8 = (element, clazz) => remove$9(element, 'class', clazz);\n    const toggle$2 = (element, clazz) => {\n      if (contains$2(get$8(element), clazz)) {\n        return remove$8(element, clazz);\n      } else {\n        return add$3(element, clazz);\n      }\n    };\n\n    const add$2 = (element, clazz) => {\n      if (supports(element)) {\n        element.dom.classList.add(clazz);\n      } else {\n        add$3(element, clazz);\n      }\n    };\n    const cleanClass = element => {\n      const classList = supports(element) ? element.dom.classList : get$8(element);\n      if (classList.length === 0) {\n        remove$a(element, 'class');\n      }\n    };\n    const remove$7 = (element, clazz) => {\n      if (supports(element)) {\n        const classList = element.dom.classList;\n        classList.remove(clazz);\n      } else {\n        remove$8(element, clazz);\n      }\n      cleanClass(element);\n    };\n    const toggle$1 = (element, clazz) => {\n      const result = supports(element) ? element.dom.classList.toggle(clazz) : toggle$2(element, clazz);\n      cleanClass(element);\n      return result;\n    };\n    const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n    const fromHtml$1 = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        const message = 'HTML does not have a single root node';\n        console.error(message, html);\n        throw new Error(message);\n      }\n      return fromDom$2(div.childNodes[0]);\n    };\n    const fromTag = (tag, scope) => {\n      const doc = scope || document;\n      const node = doc.createElement(tag);\n      return fromDom$2(node);\n    };\n    const fromText = (text, scope) => {\n      const doc = scope || document;\n      const node = doc.createTextNode(text);\n      return fromDom$2(node);\n    };\n    const fromDom$2 = node => {\n      if (node === null || node === undefined) {\n        throw new Error('Node cannot be null or undefined');\n      }\n      return { dom: node };\n    };\n    const fromPoint$2 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$2);\n    const SugarElement = {\n      fromHtml: fromHtml$1,\n      fromTag,\n      fromText,\n      fromDom: fromDom$2,\n      fromPoint: fromPoint$2\n    };\n\n    const toArray = (target, f) => {\n      const r = [];\n      const recurse = e => {\n        r.push(e);\n        return f(e);\n      };\n      let cur = f(target);\n      do {\n        cur = cur.bind(recurse);\n      } while (cur.isSome());\n      return r;\n    };\n\n    const is$1 = (element, selector) => {\n      const dom = element.dom;\n      if (dom.nodeType !== ELEMENT) {\n        return false;\n      } else {\n        const elem = dom;\n        if (elem.matches !== undefined) {\n          return elem.matches(selector);\n        } else if (elem.msMatchesSelector !== undefined) {\n          return elem.msMatchesSelector(selector);\n        } else if (elem.webkitMatchesSelector !== undefined) {\n          return elem.webkitMatchesSelector(selector);\n        } else if (elem.mozMatchesSelector !== undefined) {\n          return elem.mozMatchesSelector(selector);\n        } else {\n          throw new Error('Browser lacks native selectors');\n        }\n      }\n    };\n    const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n    const all = (selector, scope) => {\n      const base = scope === undefined ? document : scope.dom;\n      return bypassSelector(base) ? [] : map$3(base.querySelectorAll(selector), SugarElement.fromDom);\n    };\n    const one = (selector, scope) => {\n      const base = scope === undefined ? document : scope.dom;\n      return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n    };\n\n    const eq = (e1, e2) => e1.dom === e2.dom;\n    const contains = (e1, e2) => {\n      const d1 = e1.dom;\n      const d2 = e2.dom;\n      return d1 === d2 ? false : d1.contains(d2);\n    };\n\n    const owner$1 = element => SugarElement.fromDom(element.dom.ownerDocument);\n    const documentOrOwner = dos => isDocument$2(dos) ? dos : owner$1(dos);\n    const documentElement = element => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n    const defaultView = element => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n    const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n    const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n    const parents$1 = (element, isRoot) => {\n      const stop = isFunction(isRoot) ? isRoot : never;\n      let dom = element.dom;\n      const ret = [];\n      while (dom.parentNode !== null && dom.parentNode !== undefined) {\n        const rawParent = dom.parentNode;\n        const p = SugarElement.fromDom(rawParent);\n        ret.push(p);\n        if (stop(p) === true) {\n          break;\n        } else {\n          dom = rawParent;\n        }\n      }\n      return ret;\n    };\n    const siblings = element => {\n      const filterSelf = elements => filter$5(elements, x => !eq(element, x));\n      return parent(element).map(children$1).map(filterSelf).getOr([]);\n    };\n    const prevSibling = element => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n    const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n    const prevSiblings = element => reverse(toArray(element, prevSibling));\n    const nextSiblings = element => toArray(element, nextSibling);\n    const children$1 = element => map$3(element.dom.childNodes, SugarElement.fromDom);\n    const child$1 = (element, index) => {\n      const cs = element.dom.childNodes;\n      return Optional.from(cs[index]).map(SugarElement.fromDom);\n    };\n    const firstChild = element => child$1(element, 0);\n    const lastChild = element => child$1(element, element.dom.childNodes.length - 1);\n    const childNodesCount = element => element.dom.childNodes.length;\n    const hasChildNodes = element => element.dom.hasChildNodes();\n\n    const getHead = doc => {\n      const b = doc.dom.head;\n      if (b === null || b === undefined) {\n        throw new Error('Head is not available yet');\n      }\n      return SugarElement.fromDom(b);\n    };\n\n    const isShadowRoot = dos => isDocumentFragment$1(dos) && isNonNullable(dos.dom.host);\n    const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n    const isSupported$1 = constant(supported);\n    const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;\n    const getStyleContainer = dos => isShadowRoot(dos) ? dos : getHead(documentOrOwner(dos));\n    const getContentContainer = dos => isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);\n    const getShadowRoot = e => {\n      const r = getRootNode(e);\n      return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n    };\n    const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n    const getOriginalEventTarget = event => {\n      if (isSupported$1() && isNonNullable(event.target)) {\n        const el = SugarElement.fromDom(event.target);\n        if (isElement$7(el) && isOpenShadowHost(el)) {\n          if (event.composed && event.composedPath) {\n            const composedPath = event.composedPath();\n            if (composedPath) {\n              return head(composedPath);\n            }\n          }\n        }\n      }\n      return Optional.from(event.target);\n    };\n    const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n    const inBody = element => {\n      const dom = isText$b(element) ? element.dom.parentNode : element.dom;\n      if (dom === undefined || dom === null || dom.ownerDocument === null) {\n        return false;\n      }\n      const doc = dom.ownerDocument;\n      return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n    };\n\n    var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n      if (is(scope, a)) {\n        return Optional.some(scope);\n      } else if (isFunction(isRoot) && isRoot(scope)) {\n        return Optional.none();\n      } else {\n        return ancestor(scope, a, isRoot);\n      }\n    };\n\n    const ancestor$4 = (scope, predicate, isRoot) => {\n      let element = scope.dom;\n      const stop = isFunction(isRoot) ? isRoot : never;\n      while (element.parentNode) {\n        element = element.parentNode;\n        const el = SugarElement.fromDom(element);\n        if (predicate(el)) {\n          return Optional.some(el);\n        } else if (stop(el)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const closest$4 = (scope, predicate, isRoot) => {\n      const is = (s, test) => test(s);\n      return ClosestOrAncestor(is, ancestor$4, scope, predicate, isRoot);\n    };\n    const sibling$1 = (scope, predicate) => {\n      const element = scope.dom;\n      if (!element.parentNode) {\n        return Optional.none();\n      }\n      return child(SugarElement.fromDom(element.parentNode), x => !eq(scope, x) && predicate(x));\n    };\n    const child = (scope, predicate) => {\n      const pred = node => predicate(SugarElement.fromDom(node));\n      const result = find$2(scope.dom.childNodes, pred);\n      return result.map(SugarElement.fromDom);\n    };\n    const descendant$1 = (scope, predicate) => {\n      const descend = node => {\n        for (let i = 0; i < node.childNodes.length; i++) {\n          const child = SugarElement.fromDom(node.childNodes[i]);\n          if (predicate(child)) {\n            return Optional.some(child);\n          }\n          const res = descend(node.childNodes[i]);\n          if (res.isSome()) {\n            return res;\n          }\n        }\n        return Optional.none();\n      };\n      return descend(scope.dom);\n    };\n\n    const ancestor$3 = (scope, selector, isRoot) => ancestor$4(scope, e => is$1(e, selector), isRoot);\n    const descendant = (scope, selector) => one(selector, scope);\n    const closest$3 = (scope, selector, isRoot) => {\n      const is = (element, selector) => is$1(element, selector);\n      return ClosestOrAncestor(is, ancestor$3, scope, selector, isRoot);\n    };\n\n    const closest$2 = target => closest$3(target, '[contenteditable]');\n    const isEditable$3 = (element, assumeEditable = false) => {\n      if (inBody(element)) {\n        return element.dom.isContentEditable;\n      } else {\n        return closest$2(element).fold(constant(assumeEditable), editable => getRaw$1(editable) === 'true');\n      }\n    };\n    const getRaw$1 = element => element.dom.contentEditable;\n\n    const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n    const internalSet = (dom, property, value) => {\n      if (!isString(value)) {\n        console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n        throw new Error('CSS value must be a string: ' + value);\n      }\n      if (isSupported(dom)) {\n        dom.style.setProperty(property, value);\n      }\n    };\n    const internalRemove = (dom, property) => {\n      if (isSupported(dom)) {\n        dom.style.removeProperty(property);\n      }\n    };\n    const set$2 = (element, property, value) => {\n      const dom = element.dom;\n      internalSet(dom, property, value);\n    };\n    const setAll = (element, css) => {\n      const dom = element.dom;\n      each$d(css, (v, k) => {\n        internalSet(dom, k, v);\n      });\n    };\n    const get$7 = (element, property) => {\n      const dom = element.dom;\n      const styles = window.getComputedStyle(dom);\n      const r = styles.getPropertyValue(property);\n      return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n    };\n    const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n    const getRaw = (element, property) => {\n      const dom = element.dom;\n      const raw = getUnsafeProperty(dom, property);\n      return Optional.from(raw).filter(r => r.length > 0);\n    };\n    const getAllRaw = element => {\n      const css = {};\n      const dom = element.dom;\n      if (isSupported(dom)) {\n        for (let i = 0; i < dom.style.length; i++) {\n          const ruleName = dom.style.item(i);\n          css[ruleName] = dom.style[ruleName];\n        }\n      }\n      return css;\n    };\n    const remove$6 = (element, property) => {\n      const dom = element.dom;\n      internalRemove(dom, property);\n      if (is$2(getOpt(element, 'style').map(trim$3), '')) {\n        remove$a(element, 'style');\n      }\n    };\n    const reflow = e => e.dom.offsetWidth;\n\n    const before$3 = (marker, element) => {\n      const parent$1 = parent(marker);\n      parent$1.each(v => {\n        v.dom.insertBefore(element.dom, marker.dom);\n      });\n    };\n    const after$4 = (marker, element) => {\n      const sibling = nextSibling(marker);\n      sibling.fold(() => {\n        const parent$1 = parent(marker);\n        parent$1.each(v => {\n          append$1(v, element);\n        });\n      }, v => {\n        before$3(v, element);\n      });\n    };\n    const prepend = (parent, element) => {\n      const firstChild$1 = firstChild(parent);\n      firstChild$1.fold(() => {\n        append$1(parent, element);\n      }, v => {\n        parent.dom.insertBefore(element.dom, v.dom);\n      });\n    };\n    const append$1 = (parent, element) => {\n      parent.dom.appendChild(element.dom);\n    };\n    const wrap$2 = (element, wrapper) => {\n      before$3(element, wrapper);\n      append$1(wrapper, element);\n    };\n\n    const after$3 = (marker, elements) => {\n      each$e(elements, (x, i) => {\n        const e = i === 0 ? marker : elements[i - 1];\n        after$4(e, x);\n      });\n    };\n    const append = (parent, elements) => {\n      each$e(elements, x => {\n        append$1(parent, x);\n      });\n    };\n\n    const empty = element => {\n      element.dom.textContent = '';\n      each$e(children$1(element), rogue => {\n        remove$5(rogue);\n      });\n    };\n    const remove$5 = element => {\n      const dom = element.dom;\n      if (dom.parentNode !== null) {\n        dom.parentNode.removeChild(dom);\n      }\n    };\n    const unwrap = wrapper => {\n      const children = children$1(wrapper);\n      if (children.length > 0) {\n        after$3(wrapper, children);\n      }\n      remove$5(wrapper);\n    };\n\n    const fromHtml = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      return children$1(SugarElement.fromDom(div));\n    };\n    const fromDom$1 = nodes => map$3(nodes, SugarElement.fromDom);\n\n    const get$6 = element => element.dom.innerHTML;\n    const set$1 = (element, content) => {\n      const owner = owner$1(element);\n      const docDom = owner.dom;\n      const fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n      const contentElements = fromHtml(content, docDom);\n      append(fragment, contentElements);\n      empty(element);\n      append$1(element, fragment);\n    };\n    const getOuter = element => {\n      const container = SugarElement.fromTag('div');\n      const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n      append$1(container, clone);\n      return get$6(container);\n    };\n\n    const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n      target,\n      x,\n      y,\n      stop,\n      prevent,\n      kill,\n      raw\n    });\n    const fromRawEvent = rawEvent => {\n      const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n      const stop = () => rawEvent.stopPropagation();\n      const prevent = () => rawEvent.preventDefault();\n      const kill = compose(prevent, stop);\n      return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n    };\n    const handle$1 = (filter, handler) => rawEvent => {\n      if (filter(rawEvent)) {\n        handler(fromRawEvent(rawEvent));\n      }\n    };\n    const binder = (element, event, filter, handler, useCapture) => {\n      const wrapped = handle$1(filter, handler);\n      element.dom.addEventListener(event, wrapped, useCapture);\n      return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n    };\n    const bind$2 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n    const unbind = (element, event, handler, useCapture) => {\n      element.dom.removeEventListener(event, handler, useCapture);\n    };\n\n    const r = (left, top) => {\n      const translate = (x, y) => r(left + x, top + y);\n      return {\n        left,\n        top,\n        translate\n      };\n    };\n    const SugarPosition = r;\n\n    const boxPosition = dom => {\n      const box = dom.getBoundingClientRect();\n      return SugarPosition(box.left, box.top);\n    };\n    const firstDefinedOrZero = (a, b) => {\n      if (a !== undefined) {\n        return a;\n      } else {\n        return b !== undefined ? b : 0;\n      }\n    };\n    const absolute = element => {\n      const doc = element.dom.ownerDocument;\n      const body = doc.body;\n      const win = doc.defaultView;\n      const html = doc.documentElement;\n      if (body === element.dom) {\n        return SugarPosition(body.offsetLeft, body.offsetTop);\n      }\n      const scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n      const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n      const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n      const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n      return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n    };\n    const viewport = element => {\n      const dom = element.dom;\n      const doc = dom.ownerDocument;\n      const body = doc.body;\n      if (body === dom) {\n        return SugarPosition(body.offsetLeft, body.offsetTop);\n      }\n      if (!inBody(element)) {\n        return SugarPosition(0, 0);\n      }\n      return boxPosition(dom);\n    };\n\n    const get$5 = _DOC => {\n      const doc = _DOC !== undefined ? _DOC.dom : document;\n      const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n      const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n      return SugarPosition(x, y);\n    };\n    const intoView = (element, alignToTop) => {\n      const isSafari = detect$2().browser.isSafari();\n      if (isSafari && isFunction(element.dom.scrollIntoViewIfNeeded)) {\n        element.dom.scrollIntoViewIfNeeded(false);\n      } else {\n        element.dom.scrollIntoView(alignToTop);\n      }\n    };\n\n    const get$4 = _win => {\n      const win = _win === undefined ? window : _win;\n      if (detect$2().browser.isFirefox()) {\n        return Optional.none();\n      } else {\n        return Optional.from(win.visualViewport);\n      }\n    };\n    const bounds = (x, y, width, height) => ({\n      x,\n      y,\n      width,\n      height,\n      right: x + width,\n      bottom: y + height\n    });\n    const getBounds = _win => {\n      const win = _win === undefined ? window : _win;\n      const doc = win.document;\n      const scroll = get$5(SugarElement.fromDom(doc));\n      return get$4(win).fold(() => {\n        const html = win.document.documentElement;\n        const width = html.clientWidth;\n        const height = html.clientHeight;\n        return bounds(scroll.left, scroll.top, width, height);\n      }, visualViewport => bounds(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height));\n    };\n\n    const children = (scope, predicate) => filter$5(children$1(scope), predicate);\n    const descendants$1 = (scope, predicate) => {\n      let result = [];\n      each$e(children$1(scope), x => {\n        if (predicate(x)) {\n          result = result.concat([x]);\n        }\n        result = result.concat(descendants$1(x, predicate));\n      });\n      return result;\n    };\n\n    const descendants = (scope, selector) => all(selector, scope);\n\n    const ancestor$2 = (scope, selector, isRoot) => ancestor$3(scope, selector, isRoot).isSome();\n\n    class DomTreeWalker {\n      constructor(startNode, rootNode) {\n        this.node = startNode;\n        this.rootNode = rootNode;\n        this.current = this.current.bind(this);\n        this.next = this.next.bind(this);\n        this.prev = this.prev.bind(this);\n        this.prev2 = this.prev2.bind(this);\n      }\n      current() {\n        return this.node;\n      }\n      next(shallow) {\n        this.node = this.findSibling(this.node, 'firstChild', 'nextSibling', shallow);\n        return this.node;\n      }\n      prev(shallow) {\n        this.node = this.findSibling(this.node, 'lastChild', 'previousSibling', shallow);\n        return this.node;\n      }\n      prev2(shallow) {\n        this.node = this.findPreviousNode(this.node, shallow);\n        return this.node;\n      }\n      findSibling(node, startName, siblingName, shallow) {\n        if (node) {\n          if (!shallow && node[startName]) {\n            return node[startName];\n          }\n          if (node !== this.rootNode) {\n            let sibling = node[siblingName];\n            if (sibling) {\n              return sibling;\n            }\n            for (let parent = node.parentNode; parent && parent !== this.rootNode; parent = parent.parentNode) {\n              sibling = parent[siblingName];\n              if (sibling) {\n                return sibling;\n              }\n            }\n          }\n        }\n        return undefined;\n      }\n      findPreviousNode(node, shallow) {\n        if (node) {\n          const sibling = node.previousSibling;\n          if (this.rootNode && sibling === this.rootNode) {\n            return;\n          }\n          if (sibling) {\n            if (!shallow) {\n              for (let child = sibling.lastChild; child; child = child.lastChild) {\n                if (!child.lastChild) {\n                  return child;\n                }\n              }\n            }\n            return sibling;\n          }\n          const parent = node.parentNode;\n          if (parent && parent !== this.rootNode) {\n            return parent;\n          }\n        }\n        return undefined;\n      }\n    }\n\n    const isNodeType = type => {\n      return node => {\n        return !!node && node.nodeType === type;\n      };\n    };\n    const isRestrictedNode = node => !!node && !Object.getPrototypeOf(node);\n    const isElement$6 = isNodeType(1);\n    const matchNodeName = name => {\n      const lowerCasedName = name.toLowerCase();\n      return node => isNonNullable(node) && node.nodeName.toLowerCase() === lowerCasedName;\n    };\n    const matchNodeNames = names => {\n      const lowerCasedNames = names.map(s => s.toLowerCase());\n      return node => {\n        if (node && node.nodeName) {\n          const nodeName = node.nodeName.toLowerCase();\n          return contains$2(lowerCasedNames, nodeName);\n        }\n        return false;\n      };\n    };\n    const matchStyleValues = (name, values) => {\n      const items = values.toLowerCase().split(' ');\n      return node => {\n        if (isElement$6(node)) {\n          const win = node.ownerDocument.defaultView;\n          if (win) {\n            for (let i = 0; i < items.length; i++) {\n              const computed = win.getComputedStyle(node, null);\n              const cssValue = computed ? computed.getPropertyValue(name) : null;\n              if (cssValue === items[i]) {\n                return true;\n              }\n            }\n          }\n        }\n        return false;\n      };\n    };\n    const hasAttribute = attrName => {\n      return node => {\n        return isElement$6(node) && node.hasAttribute(attrName);\n      };\n    };\n    const hasAttributeValue = (attrName, attrValue) => {\n      return node => {\n        return isElement$6(node) && node.getAttribute(attrName) === attrValue;\n      };\n    };\n    const isBogus$2 = node => isElement$6(node) && node.hasAttribute('data-mce-bogus');\n    const isBogusAll$1 = node => isElement$6(node) && node.getAttribute('data-mce-bogus') === 'all';\n    const isTable$2 = node => isElement$6(node) && node.tagName === 'TABLE';\n    const hasContentEditableState = value => {\n      return node => {\n        if (isElement$6(node)) {\n          if (node.contentEditable === value) {\n            return true;\n          }\n          if (node.getAttribute('data-mce-contenteditable') === value) {\n            return true;\n          }\n        }\n        return false;\n      };\n    };\n    const isTextareaOrInput = matchNodeNames([\n      'textarea',\n      'input'\n    ]);\n    const isText$a = isNodeType(3);\n    const isCData = isNodeType(4);\n    const isPi = isNodeType(7);\n    const isComment = isNodeType(8);\n    const isDocument$1 = isNodeType(9);\n    const isDocumentFragment = isNodeType(11);\n    const isBr$6 = matchNodeName('br');\n    const isImg = matchNodeName('img');\n    const isContentEditableTrue$3 = hasContentEditableState('true');\n    const isContentEditableFalse$b = hasContentEditableState('false');\n    const isTableCell$3 = matchNodeNames([\n      'td',\n      'th'\n    ]);\n    const isTableCellOrCaption = matchNodeNames([\n      'td',\n      'th',\n      'caption'\n    ]);\n    const isMedia$2 = matchNodeNames([\n      'video',\n      'audio',\n      'object',\n      'embed'\n    ]);\n    const isListItem$2 = matchNodeName('li');\n    const isDetails = matchNodeName('details');\n    const isSummary = matchNodeName('summary');\n\n    const zeroWidth = '\\uFEFF';\n    const nbsp = '\\xA0';\n    const isZwsp$2 = char => char === zeroWidth;\n    const removeZwsp = s => s.replace(/\\uFEFF/g, '');\n\n    const NodeValue = (is, name) => {\n      const get = element => {\n        if (!is(element)) {\n          throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n        }\n        return getOption(element).getOr('');\n      };\n      const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n      const set = (element, value) => {\n        if (!is(element)) {\n          throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n        }\n        element.dom.nodeValue = value;\n      };\n      return {\n        get,\n        getOption,\n        set\n      };\n    };\n\n    const api$1 = NodeValue(isText$b, 'text');\n    const get$3 = element => api$1.get(element);\n    const getOption = element => api$1.getOption(element);\n    const set = (element, value) => api$1.set(element, value);\n\n    const blocks = [\n      'article',\n      'aside',\n      'details',\n      'div',\n      'dt',\n      'figcaption',\n      'footer',\n      'form',\n      'fieldset',\n      'header',\n      'hgroup',\n      'html',\n      'main',\n      'nav',\n      'section',\n      'summary',\n      'body',\n      'p',\n      'dl',\n      'multicol',\n      'dd',\n      'figure',\n      'address',\n      'center',\n      'blockquote',\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6',\n      'listing',\n      'xmp',\n      'pre',\n      'plaintext',\n      'menu',\n      'dir',\n      'ul',\n      'ol',\n      'li',\n      'hr',\n      'table',\n      'tbody',\n      'thead',\n      'tfoot',\n      'th',\n      'tr',\n      'td',\n      'caption'\n    ];\n    const tableCells = [\n      'td',\n      'th'\n    ];\n    const tableSections = [\n      'thead',\n      'tbody',\n      'tfoot'\n    ];\n    const textBlocks = [\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6',\n      'p',\n      'div',\n      'address',\n      'pre',\n      'form',\n      'blockquote',\n      'center',\n      'dir',\n      'fieldset',\n      'header',\n      'footer',\n      'article',\n      'section',\n      'hgroup',\n      'aside',\n      'nav',\n      'figure'\n    ];\n    const headings = [\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6'\n    ];\n    const listItems$1 = [\n      'li',\n      'dd',\n      'dt'\n    ];\n    const lists = [\n      'ul',\n      'ol',\n      'dl'\n    ];\n    const wsElements = [\n      'pre',\n      'script',\n      'textarea',\n      'style'\n    ];\n    const wrapBlockElements = ['pre'].concat(headings);\n    const lazyLookup = items => {\n      let lookup;\n      return node => {\n        lookup = lookup ? lookup : mapToObject(items, always);\n        return has$2(lookup, name(node));\n      };\n    };\n    const isBlock$2 = lazyLookup(blocks);\n    const isTable$1 = node => name(node) === 'table';\n    const isInline$1 = node => isElement$7(node) && !isBlock$2(node);\n    const isBr$5 = node => isElement$7(node) && name(node) === 'br';\n    const isTextBlock$2 = lazyLookup(textBlocks);\n    const isList = lazyLookup(lists);\n    const isListItem$1 = lazyLookup(listItems$1);\n    const isTableSection = lazyLookup(tableSections);\n    const isTableCell$2 = lazyLookup(tableCells);\n    const isWsPreserveElement = lazyLookup(wsElements);\n    const isWrapBlockElement = lazyLookup(wrapBlockElements);\n    const isWrapElement = node => isWrapBlockElement(node) || isInline$1(node);\n\n    const getLastChildren$1 = elm => {\n      const children = [];\n      let rawNode = elm.dom;\n      while (rawNode) {\n        children.push(SugarElement.fromDom(rawNode));\n        rawNode = rawNode.lastChild;\n      }\n      return children;\n    };\n    const removeTrailingBr = elm => {\n      const allBrs = descendants(elm, 'br');\n      const brs = filter$5(getLastChildren$1(elm).slice(-1), isBr$5);\n      if (allBrs.length === brs.length) {\n        each$e(brs, remove$5);\n      }\n    };\n    const createPaddingBr = () => {\n      const br = SugarElement.fromTag('br');\n      set$3(br, 'data-mce-bogus', '1');\n      return br;\n    };\n    const fillWithPaddingBr = elm => {\n      empty(elm);\n      append$1(elm, createPaddingBr());\n    };\n    const trimBlockTrailingBr = elm => {\n      lastChild(elm).each(lastChild => {\n        prevSibling(lastChild).each(lastChildPrevSibling => {\n          if (isBlock$2(elm) && isBr$5(lastChild) && isBlock$2(lastChildPrevSibling)) {\n            remove$5(lastChild);\n          }\n        });\n      });\n    };\n\n    const ZWSP$1 = zeroWidth;\n    const isZwsp$1 = isZwsp$2;\n    const trim$1 = removeZwsp;\n\n    const isElement$5 = isElement$6;\n    const isText$9 = isText$a;\n    const isCaretContainerBlock$1 = node => {\n      if (isText$9(node)) {\n        node = node.parentNode;\n      }\n      return isElement$5(node) && node.hasAttribute('data-mce-caret');\n    };\n    const isCaretContainerInline = node => isText$9(node) && isZwsp$1(node.data);\n    const isCaretContainer$2 = node => isCaretContainerBlock$1(node) || isCaretContainerInline(node);\n    const hasContent = node => node.firstChild !== node.lastChild || !isBr$6(node.firstChild);\n    const insertInline$1 = (node, before) => {\n      var _a;\n      const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n      const textNode = doc.createTextNode(ZWSP$1);\n      const parentNode = node.parentNode;\n      if (!before) {\n        const sibling = node.nextSibling;\n        if (isText$9(sibling)) {\n          if (isCaretContainer$2(sibling)) {\n            return sibling;\n          }\n          if (startsWithCaretContainer$1(sibling)) {\n            sibling.splitText(1);\n            return sibling;\n          }\n        }\n        if (node.nextSibling) {\n          parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(textNode, node.nextSibling);\n        } else {\n          parentNode === null || parentNode === void 0 ? void 0 : parentNode.appendChild(textNode);\n        }\n      } else {\n        const sibling = node.previousSibling;\n        if (isText$9(sibling)) {\n          if (isCaretContainer$2(sibling)) {\n            return sibling;\n          }\n          if (endsWithCaretContainer$1(sibling)) {\n            return sibling.splitText(sibling.data.length - 1);\n          }\n        }\n        parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(textNode, node);\n      }\n      return textNode;\n    };\n    const isBeforeInline = pos => {\n      const container = pos.container();\n      if (!isText$a(container)) {\n        return false;\n      }\n      return container.data.charAt(pos.offset()) === ZWSP$1 || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\n    };\n    const isAfterInline = pos => {\n      const container = pos.container();\n      if (!isText$a(container)) {\n        return false;\n      }\n      return container.data.charAt(pos.offset() - 1) === ZWSP$1 || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\n    };\n    const insertBlock = (blockName, node, before) => {\n      var _a;\n      const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n      const blockNode = doc.createElement(blockName);\n      blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');\n      blockNode.setAttribute('data-mce-bogus', 'all');\n      blockNode.appendChild(createPaddingBr().dom);\n      const parentNode = node.parentNode;\n      if (!before) {\n        if (node.nextSibling) {\n          parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(blockNode, node.nextSibling);\n        } else {\n          parentNode === null || parentNode === void 0 ? void 0 : parentNode.appendChild(blockNode);\n        }\n      } else {\n        parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(blockNode, node);\n      }\n      return blockNode;\n    };\n    const startsWithCaretContainer$1 = node => isText$9(node) && node.data[0] === ZWSP$1;\n    const endsWithCaretContainer$1 = node => isText$9(node) && node.data[node.data.length - 1] === ZWSP$1;\n    const trimBogusBr = elm => {\n      var _a;\n      const brs = elm.getElementsByTagName('br');\n      const lastBr = brs[brs.length - 1];\n      if (isBogus$2(lastBr)) {\n        (_a = lastBr.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(lastBr);\n      }\n    };\n    const showCaretContainerBlock = caretContainer => {\n      if (caretContainer && caretContainer.hasAttribute('data-mce-caret')) {\n        trimBogusBr(caretContainer);\n        caretContainer.removeAttribute('data-mce-caret');\n        caretContainer.removeAttribute('data-mce-bogus');\n        caretContainer.removeAttribute('style');\n        caretContainer.removeAttribute('data-mce-style');\n        caretContainer.removeAttribute('_moz_abspos');\n        return caretContainer;\n      }\n      return null;\n    };\n    const isRangeInCaretContainerBlock = range => isCaretContainerBlock$1(range.startContainer);\n\n    const isContentEditableTrue$2 = isContentEditableTrue$3;\n    const isContentEditableFalse$a = isContentEditableFalse$b;\n    const isBr$4 = isBr$6;\n    const isText$8 = isText$a;\n    const isInvalidTextElement = matchNodeNames([\n      'script',\n      'style',\n      'textarea'\n    ]);\n    const isAtomicInline = matchNodeNames([\n      'img',\n      'input',\n      'textarea',\n      'hr',\n      'iframe',\n      'video',\n      'audio',\n      'object',\n      'embed'\n    ]);\n    const isTable = matchNodeNames(['table']);\n    const isCaretContainer$1 = isCaretContainer$2;\n    const isCaretCandidate$3 = node => {\n      if (isCaretContainer$1(node)) {\n        return false;\n      }\n      if (isText$8(node)) {\n        return !isInvalidTextElement(node.parentNode);\n      }\n      return isAtomicInline(node) || isBr$4(node) || isTable(node) || isNonUiContentEditableFalse(node);\n    };\n    const isUnselectable = node => isElement$6(node) && node.getAttribute('unselectable') === 'true';\n    const isNonUiContentEditableFalse = node => !isUnselectable(node) && isContentEditableFalse$a(node);\n    const isInEditable = (node, root) => {\n      for (let tempNode = node.parentNode; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n        if (isNonUiContentEditableFalse(tempNode)) {\n          return false;\n        }\n        if (isContentEditableTrue$2(tempNode)) {\n          return true;\n        }\n      }\n      return true;\n    };\n    const isAtomicContentEditableFalse = node => {\n      if (!isNonUiContentEditableFalse(node)) {\n        return false;\n      }\n      return !foldl(from(node.getElementsByTagName('*')), (result, elm) => {\n        return result || isContentEditableTrue$2(elm);\n      }, false);\n    };\n    const isAtomic$1 = node => isAtomicInline(node) || isAtomicContentEditableFalse(node);\n    const isEditableCaretCandidate$1 = (node, root) => isCaretCandidate$3(node) && isInEditable(node, root);\n\n    const whiteSpaceRegExp = /^[ \\t\\r\\n]*$/;\n    const isWhitespaceText = text => whiteSpaceRegExp.test(text);\n    const isZwsp = text => {\n      for (const c of text) {\n        if (!isZwsp$2(c)) {\n          return false;\n        }\n      }\n      return true;\n    };\n    const isCollapsibleWhitespace$1 = c => ' \\f\\t\\x0B'.indexOf(c) !== -1;\n    const isNewLineChar = c => c === '\\n' || c === '\\r';\n    const isNewline = (text, idx) => idx < text.length && idx >= 0 ? isNewLineChar(text[idx]) : false;\n    const normalize$4 = (text, tabSpaces = 4, isStartOfContent = true, isEndOfContent = true) => {\n      const tabSpace = repeat(' ', tabSpaces);\n      const normalizedText = text.replace(/\\t/g, tabSpace);\n      const result = foldl(normalizedText, (acc, c) => {\n        if (isCollapsibleWhitespace$1(c) || c === nbsp) {\n          if (acc.pcIsSpace || acc.str === '' && isStartOfContent || acc.str.length === normalizedText.length - 1 && isEndOfContent || isNewline(normalizedText, acc.str.length + 1)) {\n            return {\n              pcIsSpace: false,\n              str: acc.str + nbsp\n            };\n          } else {\n            return {\n              pcIsSpace: true,\n              str: acc.str + ' '\n            };\n          }\n        } else {\n          return {\n            pcIsSpace: isNewLineChar(c),\n            str: acc.str + c\n          };\n        }\n      }, {\n        pcIsSpace: false,\n        str: ''\n      });\n      return result.str;\n    };\n\n    const hasWhitespacePreserveParent = (node, rootNode) => {\n      const rootElement = SugarElement.fromDom(rootNode);\n      const startNode = SugarElement.fromDom(node);\n      return ancestor$2(startNode, 'pre,code', curry(eq, rootElement));\n    };\n    const isWhitespace$1 = (node, rootNode) => {\n      return isText$a(node) && isWhitespaceText(node.data) && !hasWhitespacePreserveParent(node, rootNode);\n    };\n    const isNamedAnchor = node => {\n      return isElement$6(node) && node.nodeName === 'A' && !node.hasAttribute('href') && (node.hasAttribute('name') || node.hasAttribute('id'));\n    };\n    const isContent$1 = (node, rootNode) => {\n      return isCaretCandidate$3(node) && !isWhitespace$1(node, rootNode) || isNamedAnchor(node) || isBookmark(node);\n    };\n    const isBookmark = hasAttribute('data-mce-bookmark');\n    const isBogus$1 = hasAttribute('data-mce-bogus');\n    const isBogusAll = hasAttributeValue('data-mce-bogus', 'all');\n    const isEmptyNode = (targetNode, skipBogus) => {\n      let brCount = 0;\n      if (isContent$1(targetNode, targetNode)) {\n        return false;\n      } else {\n        let node = targetNode.firstChild;\n        if (!node) {\n          return true;\n        }\n        const walker = new DomTreeWalker(node, targetNode);\n        do {\n          if (skipBogus) {\n            if (isBogusAll(node)) {\n              node = walker.next(true);\n              continue;\n            }\n            if (isBogus$1(node)) {\n              node = walker.next();\n              continue;\n            }\n          }\n          if (isBr$6(node)) {\n            brCount++;\n            node = walker.next();\n            continue;\n          }\n          if (isContent$1(node, targetNode)) {\n            return false;\n          }\n          node = walker.next();\n        } while (node);\n        return brCount <= 1;\n      }\n    };\n    const isEmpty$2 = (elm, skipBogus = true) => isEmptyNode(elm.dom, skipBogus);\n\n    const transparentBlockAttr = 'data-mce-block';\n    const elementNames = map => filter$5(keys(map), key => !/[A-Z]/.test(key));\n    const makeSelectorFromSchemaMap = map => elementNames(map).join(',');\n    const updateTransparent = (blocksSelector, transparent) => {\n      if (isNonNullable(transparent.querySelector(blocksSelector))) {\n        transparent.setAttribute(transparentBlockAttr, 'true');\n        if (transparent.getAttribute('data-mce-selected') === 'inline-boundary') {\n          transparent.removeAttribute('data-mce-selected');\n        }\n        return true;\n      } else {\n        transparent.removeAttribute(transparentBlockAttr);\n        return false;\n      }\n    };\n    const updateBlockStateOnChildren = (schema, scope) => {\n      const transparentSelector = makeSelectorFromSchemaMap(schema.getTransparentElements());\n      const blocksSelector = makeSelectorFromSchemaMap(schema.getBlockElements());\n      return filter$5(scope.querySelectorAll(transparentSelector), transparent => updateTransparent(blocksSelector, transparent));\n    };\n    const trimEdge = (el, leftSide) => {\n      var _a;\n      const childPropertyName = leftSide ? 'lastChild' : 'firstChild';\n      for (let child = el[childPropertyName]; child; child = child[childPropertyName]) {\n        if (isEmpty$2(SugarElement.fromDom(child))) {\n          (_a = child.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(child);\n          return;\n        }\n      }\n    };\n    const split$2 = (parentElm, splitElm) => {\n      const range = document.createRange();\n      const parentNode = parentElm.parentNode;\n      if (parentNode) {\n        range.setStartBefore(parentElm);\n        range.setEndBefore(splitElm);\n        const beforeFragment = range.extractContents();\n        trimEdge(beforeFragment, true);\n        range.setStartAfter(splitElm);\n        range.setEndAfter(parentElm);\n        const afterFragment = range.extractContents();\n        trimEdge(afterFragment, false);\n        if (!isEmpty$2(SugarElement.fromDom(beforeFragment))) {\n          parentNode.insertBefore(beforeFragment, parentElm);\n        }\n        if (!isEmpty$2(SugarElement.fromDom(splitElm))) {\n          parentNode.insertBefore(splitElm, parentElm);\n        }\n        if (!isEmpty$2(SugarElement.fromDom(afterFragment))) {\n          parentNode.insertBefore(afterFragment, parentElm);\n        }\n        parentNode.removeChild(parentElm);\n      }\n    };\n    const splitInvalidChildren = (schema, scope, transparentBlocks) => {\n      const blocksElements = schema.getBlockElements();\n      const rootNode = SugarElement.fromDom(scope);\n      const isBlock = el => name(el) in blocksElements;\n      const isRoot = el => eq(el, rootNode);\n      each$e(fromDom$1(transparentBlocks), transparentBlock => {\n        ancestor$4(transparentBlock, isBlock, isRoot).each(parentBlock => {\n          const invalidChildren = children(transparentBlock, el => isBlock(el) && !schema.isValidChild(name(parentBlock), name(el)));\n          if (invalidChildren.length > 0) {\n            const stateScope = parentElement(parentBlock);\n            each$e(invalidChildren, child => {\n              ancestor$4(child, isBlock, isRoot).each(parentBlock => {\n                split$2(parentBlock.dom, child.dom);\n              });\n            });\n            stateScope.each(scope => updateBlockStateOnChildren(schema, scope.dom));\n          }\n        });\n      });\n    };\n    const unwrapInvalidChildren = (schema, scope, transparentBlocks) => {\n      each$e([\n        ...transparentBlocks,\n        ...isTransparentBlock(schema, scope) ? [scope] : []\n      ], block => each$e(descendants(SugarElement.fromDom(block), block.nodeName.toLowerCase()), elm => {\n        if (isTransparentInline(schema, elm.dom)) {\n          unwrap(elm);\n        }\n      }));\n    };\n    const updateChildren = (schema, scope) => {\n      const transparentBlocks = updateBlockStateOnChildren(schema, scope);\n      splitInvalidChildren(schema, scope, transparentBlocks);\n      unwrapInvalidChildren(schema, scope, transparentBlocks);\n    };\n    const updateElement = (schema, target) => {\n      if (isTransparentElement(schema, target)) {\n        const blocksSelector = makeSelectorFromSchemaMap(schema.getBlockElements());\n        updateTransparent(blocksSelector, target);\n      }\n    };\n    const updateCaret = (schema, root, caretParent) => {\n      const isRoot = el => eq(el, SugarElement.fromDom(root));\n      const parents = parents$1(SugarElement.fromDom(caretParent), isRoot);\n      get$b(parents, parents.length - 2).filter(isElement$7).fold(() => updateChildren(schema, root), scope => updateChildren(schema, scope.dom));\n    };\n    const hasBlockAttr = el => el.hasAttribute(transparentBlockAttr);\n    const isTransparentElementName = (schema, name) => has$2(schema.getTransparentElements(), name);\n    const isTransparentElement = (schema, node) => isElement$6(node) && isTransparentElementName(schema, node.nodeName);\n    const isTransparentBlock = (schema, node) => isTransparentElement(schema, node) && hasBlockAttr(node);\n    const isTransparentInline = (schema, node) => isTransparentElement(schema, node) && !hasBlockAttr(node);\n    const isTransparentAstBlock = (schema, node) => node.type === 1 && isTransparentElementName(schema, node.name) && isString(node.attr(transparentBlockAttr));\n    const isTransparentAstInline = (schema, node) => node.type === 1 && isTransparentElementName(schema, node.name) && isUndefined(node.attr(transparentBlockAttr));\n\n    const browser$1 = detect$2().browser;\n    const firstElement = nodes => find$2(nodes, isElement$7);\n    const getTableCaptionDeltaY = elm => {\n      if (browser$1.isFirefox() && name(elm) === 'table') {\n        return firstElement(children$1(elm)).filter(elm => {\n          return name(elm) === 'caption';\n        }).bind(caption => {\n          return firstElement(nextSiblings(caption)).map(body => {\n            const bodyTop = body.dom.offsetTop;\n            const captionTop = caption.dom.offsetTop;\n            const captionHeight = caption.dom.offsetHeight;\n            return bodyTop <= captionTop ? -captionHeight : 0;\n          });\n        }).getOr(0);\n      } else {\n        return 0;\n      }\n    };\n    const hasChild = (elm, child) => elm.children && contains$2(elm.children, child);\n    const getPos = (body, elm, rootElm) => {\n      let x = 0, y = 0;\n      const doc = body.ownerDocument;\n      rootElm = rootElm ? rootElm : body;\n      if (elm) {\n        if (rootElm === body && elm.getBoundingClientRect && get$7(SugarElement.fromDom(body), 'position') === 'static') {\n          const pos = elm.getBoundingClientRect();\n          x = pos.left + (doc.documentElement.scrollLeft || body.scrollLeft) - doc.documentElement.clientLeft;\n          y = pos.top + (doc.documentElement.scrollTop || body.scrollTop) - doc.documentElement.clientTop;\n          return {\n            x,\n            y\n          };\n        }\n        let offsetParent = elm;\n        while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n          const castOffsetParent = offsetParent;\n          x += castOffsetParent.offsetLeft || 0;\n          y += castOffsetParent.offsetTop || 0;\n          offsetParent = castOffsetParent.offsetParent;\n        }\n        offsetParent = elm.parentNode;\n        while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n          x -= offsetParent.scrollLeft || 0;\n          y -= offsetParent.scrollTop || 0;\n          offsetParent = offsetParent.parentNode;\n        }\n        y += getTableCaptionDeltaY(SugarElement.fromDom(elm));\n      }\n      return {\n        x,\n        y\n      };\n    };\n\n    const StyleSheetLoader = (documentOrShadowRoot, settings = {}) => {\n      let idCount = 0;\n      const loadedStates = {};\n      const edos = SugarElement.fromDom(documentOrShadowRoot);\n      const doc = documentOrOwner(edos);\n      const _setReferrerPolicy = referrerPolicy => {\n        settings.referrerPolicy = referrerPolicy;\n      };\n      const _setContentCssCors = contentCssCors => {\n        settings.contentCssCors = contentCssCors;\n      };\n      const addStyle = element => {\n        append$1(getStyleContainer(edos), element);\n      };\n      const removeStyle = id => {\n        const styleContainer = getStyleContainer(edos);\n        descendant(styleContainer, '#' + id).each(remove$5);\n      };\n      const getOrCreateState = url => get$a(loadedStates, url).getOrThunk(() => ({\n        id: 'mce-u' + idCount++,\n        passed: [],\n        failed: [],\n        count: 0\n      }));\n      const load = url => new Promise((success, failure) => {\n        let link;\n        const urlWithSuffix = Tools._addCacheSuffix(url);\n        const state = getOrCreateState(urlWithSuffix);\n        loadedStates[urlWithSuffix] = state;\n        state.count++;\n        const resolve = (callbacks, status) => {\n          each$e(callbacks, call);\n          state.status = status;\n          state.passed = [];\n          state.failed = [];\n          if (link) {\n            link.onload = null;\n            link.onerror = null;\n            link = null;\n          }\n        };\n        const passed = () => resolve(state.passed, 2);\n        const failed = () => resolve(state.failed, 3);\n        if (success) {\n          state.passed.push(success);\n        }\n        if (failure) {\n          state.failed.push(failure);\n        }\n        if (state.status === 1) {\n          return;\n        }\n        if (state.status === 2) {\n          passed();\n          return;\n        }\n        if (state.status === 3) {\n          failed();\n          return;\n        }\n        state.status = 1;\n        const linkElem = SugarElement.fromTag('link', doc.dom);\n        setAll$1(linkElem, {\n          rel: 'stylesheet',\n          type: 'text/css',\n          id: state.id\n        });\n        if (settings.contentCssCors) {\n          set$3(linkElem, 'crossOrigin', 'anonymous');\n        }\n        if (settings.referrerPolicy) {\n          set$3(linkElem, 'referrerpolicy', settings.referrerPolicy);\n        }\n        link = linkElem.dom;\n        link.onload = passed;\n        link.onerror = failed;\n        addStyle(linkElem);\n        set$3(linkElem, 'href', urlWithSuffix);\n      });\n      const loadAll = urls => {\n        const loadedUrls = Promise.allSettled(map$3(urls, url => load(url).then(constant(url))));\n        return loadedUrls.then(results => {\n          const parts = partition$2(results, r => r.status === 'fulfilled');\n          if (parts.fail.length > 0) {\n            return Promise.reject(map$3(parts.fail, result => result.reason));\n          } else {\n            return map$3(parts.pass, result => result.value);\n          }\n        });\n      };\n      const unload = url => {\n        const urlWithSuffix = Tools._addCacheSuffix(url);\n        get$a(loadedStates, urlWithSuffix).each(state => {\n          const count = --state.count;\n          if (count === 0) {\n            delete loadedStates[urlWithSuffix];\n            removeStyle(state.id);\n          }\n        });\n      };\n      const unloadAll = urls => {\n        each$e(urls, url => {\n          unload(url);\n        });\n      };\n      return {\n        load,\n        loadAll,\n        unload,\n        unloadAll,\n        _setReferrerPolicy,\n        _setContentCssCors\n      };\n    };\n\n    const create$d = () => {\n      const map = new WeakMap();\n      const forElement = (referenceElement, settings) => {\n        const root = getRootNode(referenceElement);\n        const rootDom = root.dom;\n        return Optional.from(map.get(rootDom)).getOrThunk(() => {\n          const sl = StyleSheetLoader(rootDom, settings);\n          map.set(rootDom, sl);\n          return sl;\n        });\n      };\n      return { forElement };\n    };\n    const instance = create$d();\n\n    const isSpan = node => node.nodeName.toLowerCase() === 'span';\n    const isInlineContent = (node, root) => isNonNullable(node) && (isContent$1(node, root) || isInline$1(SugarElement.fromDom(node)));\n    const surroundedByInlineContent = (node, root) => {\n      const prev = new DomTreeWalker(node, root).prev(false);\n      const next = new DomTreeWalker(node, root).next(false);\n      const prevIsInline = isUndefined(prev) || isInlineContent(prev, root);\n      const nextIsInline = isUndefined(next) || isInlineContent(next, root);\n      return prevIsInline && nextIsInline;\n    };\n    const isBookmarkNode$2 = node => isSpan(node) && node.getAttribute('data-mce-type') === 'bookmark';\n    const isKeepTextNode = (node, root) => isText$a(node) && node.data.length > 0 && surroundedByInlineContent(node, root);\n    const isKeepElement = node => isElement$6(node) ? node.childNodes.length > 0 : false;\n    const isDocument = node => isDocumentFragment(node) || isDocument$1(node);\n    const trimNode = (dom, node, root) => {\n      var _a;\n      const rootNode = root || node;\n      if (isElement$6(node) && isBookmarkNode$2(node)) {\n        return node;\n      }\n      const children = node.childNodes;\n      for (let i = children.length - 1; i >= 0; i--) {\n        trimNode(dom, children[i], rootNode);\n      }\n      if (isElement$6(node)) {\n        const currentChildren = node.childNodes;\n        if (currentChildren.length === 1 && isBookmarkNode$2(currentChildren[0])) {\n          (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(currentChildren[0], node);\n        }\n      }\n      if (!isDocument(node) && !isContent$1(node, rootNode) && !isKeepElement(node) && !isKeepTextNode(node, rootNode)) {\n        dom.remove(node);\n      }\n      return node;\n    };\n\n    const makeMap$3 = Tools.makeMap;\n    const attrsCharsRegExp = /[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n    const textCharsRegExp = /[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n    const rawCharsRegExp = /[<>&\\\"\\']/g;\n    const entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi;\n    const asciiMap = {\n      128: '\\u20AC',\n      130: '\\u201A',\n      131: '\\u0192',\n      132: '\\u201E',\n      133: '\\u2026',\n      134: '\\u2020',\n      135: '\\u2021',\n      136: '\\u02c6',\n      137: '\\u2030',\n      138: '\\u0160',\n      139: '\\u2039',\n      140: '\\u0152',\n      142: '\\u017d',\n      145: '\\u2018',\n      146: '\\u2019',\n      147: '\\u201C',\n      148: '\\u201D',\n      149: '\\u2022',\n      150: '\\u2013',\n      151: '\\u2014',\n      152: '\\u02DC',\n      153: '\\u2122',\n      154: '\\u0161',\n      155: '\\u203A',\n      156: '\\u0153',\n      158: '\\u017e',\n      159: '\\u0178'\n    };\n    const baseEntities = {\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '&': '&amp;',\n      '`': '&#96;'\n    };\n    const reverseEntities = {\n      '&lt;': '<',\n      '&gt;': '>',\n      '&amp;': '&',\n      '&quot;': '\"',\n      '&apos;': `'`\n    };\n    const nativeDecode = text => {\n      const elm = SugarElement.fromTag('div').dom;\n      elm.innerHTML = text;\n      return elm.textContent || elm.innerText || text;\n    };\n    const buildEntitiesLookup = (items, radix) => {\n      const lookup = {};\n      if (items) {\n        const itemList = items.split(',');\n        radix = radix || 10;\n        for (let i = 0; i < itemList.length; i += 2) {\n          const chr = String.fromCharCode(parseInt(itemList[i], radix));\n          if (!baseEntities[chr]) {\n            const entity = '&' + itemList[i + 1] + ';';\n            lookup[chr] = entity;\n            lookup[entity] = chr;\n          }\n        }\n        return lookup;\n      } else {\n        return undefined;\n      }\n    };\n    const namedEntities = buildEntitiesLookup('50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' + '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' + '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' + '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' + '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' + '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' + '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' + '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' + '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' + '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' + 'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' + 'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' + 't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' + 'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' + 'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' + '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' + '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' + '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' + '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' + '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' + 'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' + 'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' + 'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' + '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' + '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32);\n    const encodeRaw = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n      return baseEntities[chr] || chr;\n    });\n    const encodeAllRaw = text => ('' + text).replace(rawCharsRegExp, chr => {\n      return baseEntities[chr] || chr;\n    });\n    const encodeNumeric = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n      if (chr.length > 1) {\n        return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n      }\n      return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';\n    });\n    const encodeNamed = (text, attr, entities) => {\n      const resolveEntities = entities || namedEntities;\n      return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n        return baseEntities[chr] || resolveEntities[chr] || chr;\n      });\n    };\n    const getEncodeFunc = (name, entities) => {\n      const entitiesMap = buildEntitiesLookup(entities) || namedEntities;\n      const encodeNamedAndNumeric = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n        if (baseEntities[chr] !== undefined) {\n          return baseEntities[chr];\n        }\n        if (entitiesMap[chr] !== undefined) {\n          return entitiesMap[chr];\n        }\n        if (chr.length > 1) {\n          return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n        }\n        return '&#' + chr.charCodeAt(0) + ';';\n      });\n      const encodeCustomNamed = (text, attr) => {\n        return encodeNamed(text, attr, entitiesMap);\n      };\n      const nameMap = makeMap$3(name.replace(/\\+/g, ','));\n      if (nameMap.named && nameMap.numeric) {\n        return encodeNamedAndNumeric;\n      }\n      if (nameMap.named) {\n        if (entities) {\n          return encodeCustomNamed;\n        }\n        return encodeNamed;\n      }\n      if (nameMap.numeric) {\n        return encodeNumeric;\n      }\n      return encodeRaw;\n    };\n    const decode = text => text.replace(entityRegExp, (all, numeric) => {\n      if (numeric) {\n        if (numeric.charAt(0).toLowerCase() === 'x') {\n          numeric = parseInt(numeric.substr(1), 16);\n        } else {\n          numeric = parseInt(numeric, 10);\n        }\n        if (numeric > 65535) {\n          numeric -= 65536;\n          return String.fromCharCode(55296 + (numeric >> 10), 56320 + (numeric & 1023));\n        }\n        return asciiMap[numeric] || String.fromCharCode(numeric);\n      }\n      return reverseEntities[all] || namedEntities[all] || nativeDecode(all);\n    });\n    const Entities = {\n      encodeRaw,\n      encodeAllRaw,\n      encodeNumeric,\n      encodeNamed,\n      getEncodeFunc,\n      decode\n    };\n\n    const lookupCache = {};\n    const mapCache = {};\n    const dummyObj = {};\n    const makeMap$2 = Tools.makeMap, each$b = Tools.each, extend$2 = Tools.extend, explode$2 = Tools.explode, inArray = Tools.inArray;\n    const split$1 = (items, delim) => {\n      items = Tools.trim(items);\n      return items ? items.split(delim || ' ') : [];\n    };\n    const createMap = (defaultValue, extendWith = {}) => {\n      const value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' '));\n      return extend$2(value, extendWith);\n    };\n    const getTextRootBlockElements = schema => createMap('td th li dt dd figcaption caption details summary', schema.getTextBlockElements());\n    const compileSchema = type => {\n      const schema = {};\n      let globalAttributes, blockContent;\n      let phrasingContent, flowContent;\n      const add = (name, attributes = '', children = '') => {\n        const childNames = split$1(children);\n        const names = split$1(name);\n        let ni = names.length;\n        while (ni--) {\n          const attributesOrder = split$1([\n            globalAttributes,\n            attributes\n          ].join(' '));\n          schema[names[ni]] = {\n            attributes: mapToObject(attributesOrder, () => ({})),\n            attributesOrder,\n            children: mapToObject(childNames, constant(dummyObj))\n          };\n        }\n      };\n      const addAttrs = (name, attributes) => {\n        const names = split$1(name);\n        const attrs = split$1(attributes);\n        let ni = names.length;\n        while (ni--) {\n          const schemaItem = schema[names[ni]];\n          for (let i = 0, l = attrs.length; i < l; i++) {\n            schemaItem.attributes[attrs[i]] = {};\n            schemaItem.attributesOrder.push(attrs[i]);\n          }\n        }\n      };\n      if (lookupCache[type]) {\n        return lookupCache[type];\n      }\n      globalAttributes = 'id accesskey class dir lang style tabindex title role';\n      blockContent = 'address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul';\n      phrasingContent = 'a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd ' + 'label map noscript object q s samp script select small span strong sub sup ' + 'textarea u var #text #comment';\n      if (type !== 'html4') {\n        const transparentContent = 'a ins del canvas map';\n        globalAttributes += ' contenteditable contextmenu draggable dropzone ' + 'hidden spellcheck translate';\n        blockContent += ' article aside details dialog figure main header footer hgroup section nav ' + transparentContent;\n        phrasingContent += ' audio canvas command datalist mark meter output picture ' + 'progress time wbr video ruby bdi keygen';\n      }\n      if (type !== 'html5-strict') {\n        globalAttributes += ' xml:lang';\n        const html4PhrasingContent = 'acronym applet basefont big font strike tt';\n        phrasingContent = [\n          phrasingContent,\n          html4PhrasingContent\n        ].join(' ');\n        each$b(split$1(html4PhrasingContent), name => {\n          add(name, '', phrasingContent);\n        });\n        const html4BlockContent = 'center dir isindex noframes';\n        blockContent = [\n          blockContent,\n          html4BlockContent\n        ].join(' ');\n        flowContent = [\n          blockContent,\n          phrasingContent\n        ].join(' ');\n        each$b(split$1(html4BlockContent), name => {\n          add(name, '', flowContent);\n        });\n      }\n      flowContent = flowContent || [\n        blockContent,\n        phrasingContent\n      ].join(' ');\n      add('html', 'manifest', 'head body');\n      add('head', '', 'base command link meta noscript script style title');\n      add('title hr noscript br');\n      add('base', 'href target');\n      add('link', 'href rel media hreflang type sizes hreflang');\n      add('meta', 'name http-equiv content charset');\n      add('style', 'media type scoped');\n      add('script', 'src async defer type charset');\n      add('body', 'onafterprint onbeforeprint onbeforeunload onblur onerror onfocus ' + 'onhashchange onload onmessage onoffline ononline onpagehide onpageshow ' + 'onpopstate onresize onscroll onstorage onunload', flowContent);\n      add('dd div', '', flowContent);\n      add('address dt caption', '', type === 'html4' ? phrasingContent : flowContent);\n      add('h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn', '', phrasingContent);\n      add('blockquote', 'cite', flowContent);\n      add('ol', 'reversed start type', 'li');\n      add('ul', '', 'li');\n      add('li', 'value', flowContent);\n      add('dl', '', 'dt dd');\n      add('a', 'href target rel media hreflang type', type === 'html4' ? phrasingContent : flowContent);\n      add('q', 'cite', phrasingContent);\n      add('ins del', 'cite datetime', flowContent);\n      add('img', 'src sizes srcset alt usemap ismap width height');\n      add('iframe', 'src name width height', flowContent);\n      add('embed', 'src type width height');\n      add('object', 'data type typemustmatch name usemap form width height', [\n        flowContent,\n        'param'\n      ].join(' '));\n      add('param', 'name value');\n      add('map', 'name', [\n        flowContent,\n        'area'\n      ].join(' '));\n      add('area', 'alt coords shape href target rel media hreflang type');\n      add('table', 'border', 'caption colgroup thead tfoot tbody tr' + (type === 'html4' ? ' col' : ''));\n      add('colgroup', 'span', 'col');\n      add('col', 'span');\n      add('tbody thead tfoot', '', 'tr');\n      add('tr', '', 'td th');\n      add('td', 'colspan rowspan headers', flowContent);\n      add('th', 'colspan rowspan headers scope abbr', flowContent);\n      add('form', 'accept-charset action autocomplete enctype method name novalidate target', flowContent);\n      add('fieldset', 'disabled form name', [\n        flowContent,\n        'legend'\n      ].join(' '));\n      add('label', 'form for', phrasingContent);\n      add('input', 'accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate ' + 'formtarget height list max maxlength min multiple name pattern readonly required size src step type value width');\n      add('button', 'disabled form formaction formenctype formmethod formnovalidate formtarget name type value', type === 'html4' ? flowContent : phrasingContent);\n      add('select', 'disabled form multiple name required size', 'option optgroup');\n      add('optgroup', 'disabled label', 'option');\n      add('option', 'disabled label selected value');\n      add('textarea', 'cols dirname disabled form maxlength name readonly required rows wrap');\n      add('menu', 'type label', [\n        flowContent,\n        'li'\n      ].join(' '));\n      add('noscript', '', flowContent);\n      if (type !== 'html4') {\n        add('wbr');\n        add('ruby', '', [\n          phrasingContent,\n          'rt rp'\n        ].join(' '));\n        add('figcaption', '', flowContent);\n        add('mark rt rp summary bdi', '', phrasingContent);\n        add('canvas', 'width height', flowContent);\n        add('video', 'src crossorigin poster preload autoplay mediagroup loop ' + 'muted controls width height buffered', [\n          flowContent,\n          'track source'\n        ].join(' '));\n        add('audio', 'src crossorigin preload autoplay mediagroup loop muted controls ' + 'buffered volume', [\n          flowContent,\n          'track source'\n        ].join(' '));\n        add('picture', '', 'img source');\n        add('source', 'src srcset type media sizes');\n        add('track', 'kind src srclang label default');\n        add('datalist', '', [\n          phrasingContent,\n          'option'\n        ].join(' '));\n        add('article section nav aside main header footer', '', flowContent);\n        add('hgroup', '', 'h1 h2 h3 h4 h5 h6');\n        add('figure', '', [\n          flowContent,\n          'figcaption'\n        ].join(' '));\n        add('time', 'datetime', phrasingContent);\n        add('dialog', 'open', flowContent);\n        add('command', 'type label icon disabled checked radiogroup command');\n        add('output', 'for form name', phrasingContent);\n        add('progress', 'value max', phrasingContent);\n        add('meter', 'value min max low high optimum', phrasingContent);\n        add('details', 'open', [\n          flowContent,\n          'summary'\n        ].join(' '));\n        add('keygen', 'autofocus challenge disabled form keytype name');\n      }\n      if (type !== 'html5-strict') {\n        addAttrs('script', 'language xml:space');\n        addAttrs('style', 'xml:space');\n        addAttrs('object', 'declare classid code codebase codetype archive standby align border hspace vspace');\n        addAttrs('embed', 'align name hspace vspace');\n        addAttrs('param', 'valuetype type');\n        addAttrs('a', 'charset name rev shape coords');\n        addAttrs('br', 'clear');\n        addAttrs('applet', 'codebase archive code object alt name width height align hspace vspace');\n        addAttrs('img', 'name longdesc align border hspace vspace');\n        addAttrs('iframe', 'longdesc frameborder marginwidth marginheight scrolling align');\n        addAttrs('font basefont', 'size color face');\n        addAttrs('input', 'usemap align');\n        addAttrs('select');\n        addAttrs('textarea');\n        addAttrs('h1 h2 h3 h4 h5 h6 div p legend caption', 'align');\n        addAttrs('ul', 'type compact');\n        addAttrs('li', 'type');\n        addAttrs('ol dl menu dir', 'compact');\n        addAttrs('pre', 'width xml:space');\n        addAttrs('hr', 'align noshade size width');\n        addAttrs('isindex', 'prompt');\n        addAttrs('table', 'summary width frame rules cellspacing cellpadding align bgcolor');\n        addAttrs('col', 'width align char charoff valign');\n        addAttrs('colgroup', 'width align char charoff valign');\n        addAttrs('thead', 'align char charoff valign');\n        addAttrs('tr', 'align char charoff valign bgcolor');\n        addAttrs('th', 'axis align char charoff valign nowrap bgcolor width height');\n        addAttrs('form', 'accept');\n        addAttrs('td', 'abbr axis scope align char charoff valign nowrap bgcolor width height');\n        addAttrs('tfoot', 'align char charoff valign');\n        addAttrs('tbody', 'align char charoff valign');\n        addAttrs('area', 'nohref');\n        addAttrs('body', 'background bgcolor text link vlink alink');\n      }\n      if (type !== 'html4') {\n        addAttrs('input button select textarea', 'autofocus');\n        addAttrs('input textarea', 'placeholder');\n        addAttrs('a', 'download');\n        addAttrs('link script img', 'crossorigin');\n        addAttrs('img', 'loading');\n        addAttrs('iframe', 'sandbox seamless allow allowfullscreen loading');\n      }\n      if (type !== 'html4') {\n        each$e([\n          schema.video,\n          schema.audio\n        ], item => {\n          delete item.children.audio;\n          delete item.children.video;\n        });\n      }\n      each$b(split$1('a form meter progress dfn'), name => {\n        if (schema[name]) {\n          delete schema[name].children[name];\n        }\n      });\n      delete schema.caption.children.table;\n      delete schema.script;\n      lookupCache[type] = schema;\n      return schema;\n    };\n    const compileElementMap = (value, mode) => {\n      if (value) {\n        const styles = {};\n        if (isString(value)) {\n          value = { '*': value };\n        }\n        each$b(value, (value, key) => {\n          styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$2(value, /[, ]/);\n        });\n        return styles;\n      } else {\n        return undefined;\n      }\n    };\n    const Schema = (settings = {}) => {\n      var _a;\n      const elements = {};\n      const children = {};\n      let patternElements = [];\n      const customElementsMap = {};\n      const specialElements = {};\n      const createLookupTable = (option, defaultValue, extendWith) => {\n        const value = settings[option];\n        if (!value) {\n          let newValue = mapCache[option];\n          if (!newValue) {\n            newValue = createMap(defaultValue, extendWith);\n            mapCache[option] = newValue;\n          }\n          return newValue;\n        } else {\n          return makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/));\n        }\n      };\n      const schemaType = (_a = settings.schema) !== null && _a !== void 0 ? _a : 'html5';\n      const schemaItems = compileSchema(schemaType);\n      if (settings.verify_html === false) {\n        settings.valid_elements = '*[*]';\n      }\n      const validStyles = compileElementMap(settings.valid_styles);\n      const invalidStyles = compileElementMap(settings.invalid_styles, 'map');\n      const validClasses = compileElementMap(settings.valid_classes, 'map');\n      const whitespaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');\n      const selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\n      const voidElementsMap = createLookupTable('void_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');\n      const boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls allowfullscreen');\n      const nonEmptyOrMoveCaretBeforeOnEnter = 'td th iframe video audio object script code';\n      const nonEmptyElementsMap = createLookupTable('non_empty_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' pre', voidElementsMap);\n      const moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' table', voidElementsMap);\n      const textBlockElementsMap = createLookupTable('text_block_elements', 'h1 h2 h3 h4 h5 h6 p div address pre form ' + 'blockquote center dir fieldset header footer article section hgroup aside main nav figure');\n      const blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + 'datalist select optgroup figcaption details summary', textBlockElementsMap);\n      const textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font s strike u var cite ' + 'dfn code mark q sup sub samp');\n      const transparentElementsMap = createLookupTable('transparent_elements', 'a ins del canvas map');\n      each$b('script noscript iframe noframes noembed title style textarea xmp plaintext'.split(' '), name => {\n        specialElements[name] = new RegExp('</' + name + '[^>]*>', 'gi');\n      });\n      const patternToRegExp = str => new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\n      const addValidElements = validElements => {\n        const elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)])?$/;\n        const attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=~<]+)?(?:([=~<])(.*))?$/;\n        const hasPatternsRegExp = /[*?+]/;\n        if (validElements) {\n          const validElementsArr = split$1(validElements, ',');\n          let globalAttributes;\n          let globalAttributesOrder;\n          if (elements['@']) {\n            globalAttributes = elements['@'].attributes;\n            globalAttributesOrder = elements['@'].attributesOrder;\n          }\n          for (let ei = 0, el = validElementsArr.length; ei < el; ei++) {\n            let matches = elementRuleRegExp.exec(validElementsArr[ei]);\n            if (matches) {\n              const prefix = matches[1];\n              const elementName = matches[2];\n              const outputName = matches[3];\n              const attrData = matches[5];\n              const attributes = {};\n              const attributesOrder = [];\n              const element = {\n                attributes,\n                attributesOrder\n              };\n              if (prefix === '#') {\n                element.paddEmpty = true;\n              }\n              if (prefix === '-') {\n                element.removeEmpty = true;\n              }\n              if (matches[4] === '!') {\n                element.removeEmptyAttrs = true;\n              }\n              if (globalAttributes) {\n                each$d(globalAttributes, (value, key) => {\n                  attributes[key] = value;\n                });\n                if (globalAttributesOrder) {\n                  attributesOrder.push(...globalAttributesOrder);\n                }\n              }\n              if (attrData) {\n                const attrDatas = split$1(attrData, '|');\n                for (let ai = 0, al = attrDatas.length; ai < al; ai++) {\n                  matches = attrRuleRegExp.exec(attrDatas[ai]);\n                  if (matches) {\n                    const attr = {};\n                    const attrType = matches[1];\n                    const attrName = matches[2].replace(/[\\\\:]:/g, ':');\n                    const attrPrefix = matches[3];\n                    const value = matches[4];\n                    if (attrType === '!') {\n                      element.attributesRequired = element.attributesRequired || [];\n                      element.attributesRequired.push(attrName);\n                      attr.required = true;\n                    }\n                    if (attrType === '-') {\n                      delete attributes[attrName];\n                      attributesOrder.splice(inArray(attributesOrder, attrName), 1);\n                      continue;\n                    }\n                    if (attrPrefix) {\n                      if (attrPrefix === '=') {\n                        element.attributesDefault = element.attributesDefault || [];\n                        element.attributesDefault.push({\n                          name: attrName,\n                          value\n                        });\n                        attr.defaultValue = value;\n                      }\n                      if (attrPrefix === '~') {\n                        element.attributesForced = element.attributesForced || [];\n                        element.attributesForced.push({\n                          name: attrName,\n                          value\n                        });\n                        attr.forcedValue = value;\n                      }\n                      if (attrPrefix === '<') {\n                        attr.validValues = makeMap$2(value, '?');\n                      }\n                    }\n                    if (hasPatternsRegExp.test(attrName)) {\n                      const attrPattern = attr;\n                      element.attributePatterns = element.attributePatterns || [];\n                      attrPattern.pattern = patternToRegExp(attrName);\n                      element.attributePatterns.push(attrPattern);\n                    } else {\n                      if (!attributes[attrName]) {\n                        attributesOrder.push(attrName);\n                      }\n                      attributes[attrName] = attr;\n                    }\n                  }\n                }\n              }\n              if (!globalAttributes && elementName === '@') {\n                globalAttributes = attributes;\n                globalAttributesOrder = attributesOrder;\n              }\n              if (outputName) {\n                element.outputName = elementName;\n                elements[outputName] = element;\n              }\n              if (hasPatternsRegExp.test(elementName)) {\n                const patternElement = element;\n                patternElement.pattern = patternToRegExp(elementName);\n                patternElements.push(patternElement);\n              } else {\n                elements[elementName] = element;\n              }\n            }\n          }\n        }\n      };\n      const setValidElements = validElements => {\n        patternElements = [];\n        each$e(keys(elements), name => {\n          delete elements[name];\n        });\n        addValidElements(validElements);\n        each$b(schemaItems, (element, name) => {\n          children[name] = element.children;\n        });\n      };\n      const addCustomElements = customElements => {\n        const customElementRegExp = /^(~)?(.+)$/;\n        if (customElements) {\n          delete mapCache.text_block_elements;\n          delete mapCache.block_elements;\n          each$b(split$1(customElements, ','), rule => {\n            const matches = customElementRegExp.exec(rule);\n            if (matches) {\n              const inline = matches[1] === '~';\n              const cloneName = inline ? 'span' : 'div';\n              const name = matches[2];\n              children[name] = children[cloneName];\n              customElementsMap[name] = cloneName;\n              nonEmptyElementsMap[name.toUpperCase()] = {};\n              nonEmptyElementsMap[name] = {};\n              if (!inline) {\n                blockElementsMap[name.toUpperCase()] = {};\n                blockElementsMap[name] = {};\n              }\n              if (!elements[name]) {\n                let customRule = elements[cloneName];\n                customRule = extend$2({}, customRule);\n                delete customRule.removeEmptyAttrs;\n                delete customRule.removeEmpty;\n                elements[name] = customRule;\n              }\n              each$b(children, (element, elmName) => {\n                if (element[cloneName]) {\n                  children[elmName] = element = extend$2({}, children[elmName]);\n                  element[name] = element[cloneName];\n                }\n              });\n            }\n          });\n        }\n      };\n      const addValidChildren = validChildren => {\n        const childRuleRegExp = /^([+\\-]?)([A-Za-z0-9_\\-.\\u00b7\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u037d\\u037f-\\u1fff\\u200c-\\u200d\\u203f-\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]+)\\[([^\\]]+)]$/;\n        delete lookupCache[schemaType];\n        if (validChildren) {\n          each$b(split$1(validChildren, ','), rule => {\n            const matches = childRuleRegExp.exec(rule);\n            if (matches) {\n              const prefix = matches[1];\n              let parent;\n              if (prefix) {\n                parent = children[matches[2]];\n              } else {\n                parent = children[matches[2]] = { '#comment': {} };\n              }\n              parent = children[matches[2]];\n              each$b(split$1(matches[3], '|'), child => {\n                if (prefix === '-') {\n                  delete parent[child];\n                } else {\n                  parent[child] = {};\n                }\n              });\n            }\n          });\n        }\n      };\n      const getElementRule = name => {\n        const element = elements[name];\n        if (element) {\n          return element;\n        }\n        let i = patternElements.length;\n        while (i--) {\n          const patternElement = patternElements[i];\n          if (patternElement.pattern.test(name)) {\n            return patternElement;\n          }\n        }\n        return undefined;\n      };\n      if (!settings.valid_elements) {\n        each$b(schemaItems, (element, name) => {\n          elements[name] = {\n            attributes: element.attributes,\n            attributesOrder: element.attributesOrder\n          };\n          children[name] = element.children;\n        });\n        each$b(split$1('strong/b em/i'), item => {\n          const items = split$1(item, '/');\n          elements[items[1]].outputName = items[0];\n        });\n        each$b(textInlineElementsMap, (_val, name) => {\n          if (elements[name]) {\n            if (settings.padd_empty_block_inline_children) {\n              elements[name].paddInEmptyBlock = true;\n            }\n            elements[name].removeEmpty = true;\n          }\n        });\n        each$b(split$1('ol ul blockquote a table tbody'), name => {\n          if (elements[name]) {\n            elements[name].removeEmpty = true;\n          }\n        });\n        each$b(split$1('p h1 h2 h3 h4 h5 h6 th td pre div address caption li summary'), name => {\n          if (elements[name]) {\n            elements[name].paddEmpty = true;\n          }\n        });\n        each$b(split$1('span'), name => {\n          elements[name].removeEmptyAttrs = true;\n        });\n      } else {\n        setValidElements(settings.valid_elements);\n      }\n      addCustomElements(settings.custom_elements);\n      addValidChildren(settings.valid_children);\n      addValidElements(settings.extended_valid_elements);\n      addValidChildren('+ol[ul|ol],+ul[ul|ol]');\n      each$b({\n        dd: 'dl',\n        dt: 'dl',\n        li: 'ul ol',\n        td: 'tr',\n        th: 'tr',\n        tr: 'tbody thead tfoot',\n        tbody: 'table',\n        thead: 'table',\n        tfoot: 'table',\n        legend: 'fieldset',\n        area: 'map',\n        param: 'video audio object'\n      }, (parents, item) => {\n        if (elements[item]) {\n          elements[item].parentsRequired = split$1(parents);\n        }\n      });\n      if (settings.invalid_elements) {\n        each$b(explode$2(settings.invalid_elements), item => {\n          if (elements[item]) {\n            delete elements[item];\n          }\n        });\n      }\n      if (!getElementRule('span')) {\n        addValidElements('span[!data-mce-type|*]');\n      }\n      const getValidStyles = constant(validStyles);\n      const getInvalidStyles = constant(invalidStyles);\n      const getValidClasses = constant(validClasses);\n      const getBoolAttrs = constant(boolAttrMap);\n      const getBlockElements = constant(blockElementsMap);\n      const getTextBlockElements = constant(textBlockElementsMap);\n      const getTextInlineElements = constant(textInlineElementsMap);\n      const getVoidElements = constant(Object.seal(voidElementsMap));\n      const getSelfClosingElements = constant(selfClosingElementsMap);\n      const getNonEmptyElements = constant(nonEmptyElementsMap);\n      const getMoveCaretBeforeOnEnterElements = constant(moveCaretBeforeOnEnterElementsMap);\n      const getWhitespaceElements = constant(whitespaceElementsMap);\n      const getTransparentElements = constant(transparentElementsMap);\n      const getSpecialElements = constant(Object.seal(specialElements));\n      const isValidChild = (name, child) => {\n        const parent = children[name.toLowerCase()];\n        return !!(parent && parent[child.toLowerCase()]);\n      };\n      const isValid = (name, attr) => {\n        const rule = getElementRule(name);\n        if (rule) {\n          if (attr) {\n            if (rule.attributes[attr]) {\n              return true;\n            }\n            const attrPatterns = rule.attributePatterns;\n            if (attrPatterns) {\n              let i = attrPatterns.length;\n              while (i--) {\n                if (attrPatterns[i].pattern.test(attr)) {\n                  return true;\n                }\n              }\n            }\n          } else {\n            return true;\n          }\n        }\n        return false;\n      };\n      const getCustomElements = constant(customElementsMap);\n      return {\n        type: schemaType,\n        children,\n        elements,\n        getValidStyles,\n        getValidClasses,\n        getBlockElements,\n        getInvalidStyles,\n        getVoidElements,\n        getTextBlockElements,\n        getTextInlineElements,\n        getBoolAttrs,\n        getElementRule,\n        getSelfClosingElements,\n        getNonEmptyElements,\n        getMoveCaretBeforeOnEnterElements,\n        getWhitespaceElements,\n        getTransparentElements,\n        getSpecialElements,\n        isValidChild,\n        isValid,\n        getCustomElements,\n        addValidElements,\n        setValidElements,\n        addCustomElements,\n        addValidChildren\n      };\n    };\n\n    const Styles = (settings = {}, schema) => {\n      const urlOrStrRegExp = /(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi;\n      const styleRegExp = /\\s*([^:]+):\\s*([^;]+);?/g;\n      const trimRightRegExp = /\\s+$/;\n      const encodingLookup = {};\n      let validStyles;\n      let invalidStyles;\n      const invisibleChar = zeroWidth;\n      if (schema) {\n        validStyles = schema.getValidStyles();\n        invalidStyles = schema.getInvalidStyles();\n      }\n      const encodingItems = (`\\\\\" \\\\' \\\\; \\\\: ; : ` + invisibleChar).split(' ');\n      for (let i = 0; i < encodingItems.length; i++) {\n        encodingLookup[encodingItems[i]] = invisibleChar + i;\n        encodingLookup[invisibleChar + i] = encodingItems[i];\n      }\n      const self = {\n        parse: css => {\n          const styles = {};\n          let isEncoded = false;\n          const urlConverter = settings.url_converter;\n          const urlConverterScope = settings.url_converter_scope || self;\n          const compress = (prefix, suffix, noJoin) => {\n            const top = styles[prefix + '-top' + suffix];\n            if (!top) {\n              return;\n            }\n            const right = styles[prefix + '-right' + suffix];\n            if (!right) {\n              return;\n            }\n            const bottom = styles[prefix + '-bottom' + suffix];\n            if (!bottom) {\n              return;\n            }\n            const left = styles[prefix + '-left' + suffix];\n            if (!left) {\n              return;\n            }\n            const box = [\n              top,\n              right,\n              bottom,\n              left\n            ];\n            let i = box.length - 1;\n            while (i--) {\n              if (box[i] !== box[i + 1]) {\n                break;\n              }\n            }\n            if (i > -1 && noJoin) {\n              return;\n            }\n            styles[prefix + suffix] = i === -1 ? box[0] : box.join(' ');\n            delete styles[prefix + '-top' + suffix];\n            delete styles[prefix + '-right' + suffix];\n            delete styles[prefix + '-bottom' + suffix];\n            delete styles[prefix + '-left' + suffix];\n          };\n          const canCompress = key => {\n            const value = styles[key];\n            if (!value) {\n              return;\n            }\n            const values = value.split(' ');\n            let i = values.length;\n            while (i--) {\n              if (values[i] !== values[0]) {\n                return false;\n              }\n            }\n            styles[key] = values[0];\n            return true;\n          };\n          const compress2 = (target, a, b, c) => {\n            if (!canCompress(a)) {\n              return;\n            }\n            if (!canCompress(b)) {\n              return;\n            }\n            if (!canCompress(c)) {\n              return;\n            }\n            styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];\n            delete styles[a];\n            delete styles[b];\n            delete styles[c];\n          };\n          const encode = str => {\n            isEncoded = true;\n            return encodingLookup[str];\n          };\n          const decode = (str, keepSlashes) => {\n            if (isEncoded) {\n              str = str.replace(/\\uFEFF[0-9]/g, str => {\n                return encodingLookup[str];\n              });\n            }\n            if (!keepSlashes) {\n              str = str.replace(/\\\\([\\'\\\";:])/g, '$1');\n            }\n            return str;\n          };\n          const decodeSingleHexSequence = escSeq => {\n            return String.fromCharCode(parseInt(escSeq.slice(1), 16));\n          };\n          const decodeHexSequences = value => {\n            return value.replace(/\\\\[0-9a-f]+/gi, decodeSingleHexSequence);\n          };\n          const processUrl = (match, url, url2, url3, str, str2) => {\n            str = str || str2;\n            if (str) {\n              str = decode(str);\n              return `'` + str.replace(/\\'/g, `\\\\'`) + `'`;\n            }\n            url = decode(url || url2 || url3 || '');\n            if (!settings.allow_script_urls) {\n              const scriptUrl = url.replace(/[\\s\\r\\n]+/g, '');\n              if (/(java|vb)script:/i.test(scriptUrl)) {\n                return '';\n              }\n              if (!settings.allow_svg_data_urls && /^data:image\\/svg/i.test(scriptUrl)) {\n                return '';\n              }\n            }\n            if (urlConverter) {\n              url = urlConverter.call(urlConverterScope, url, 'style');\n            }\n            return `url('` + url.replace(/\\'/g, `\\\\'`) + `')`;\n          };\n          if (css) {\n            css = css.replace(/[\\u0000-\\u001F]/g, '');\n            css = css.replace(/\\\\[\\\"\\';:\\uFEFF]/g, encode).replace(/\\\"[^\\\"]+\\\"|\\'[^\\']+\\'/g, str => {\n              return str.replace(/[;:]/g, encode);\n            });\n            let matches;\n            while (matches = styleRegExp.exec(css)) {\n              styleRegExp.lastIndex = matches.index + matches[0].length;\n              let name = matches[1].replace(trimRightRegExp, '').toLowerCase();\n              let value = matches[2].replace(trimRightRegExp, '');\n              if (name && value) {\n                name = decodeHexSequences(name);\n                value = decodeHexSequences(value);\n                if (name.indexOf(invisibleChar) !== -1 || name.indexOf('\"') !== -1) {\n                  continue;\n                }\n                if (!settings.allow_script_urls && (name === 'behavior' || /expression\\s*\\(|\\/\\*|\\*\\//.test(value))) {\n                  continue;\n                }\n                if (name === 'font-weight' && value === '700') {\n                  value = 'bold';\n                } else if (name === 'color' || name === 'background-color') {\n                  value = value.toLowerCase();\n                }\n                value = value.replace(urlOrStrRegExp, processUrl);\n                styles[name] = isEncoded ? decode(value, true) : value;\n              }\n            }\n            compress('border', '', true);\n            compress('border', '-width');\n            compress('border', '-color');\n            compress('border', '-style');\n            compress('padding', '');\n            compress('margin', '');\n            compress2('border', 'border-width', 'border-style', 'border-color');\n            if (styles.border === 'medium none') {\n              delete styles.border;\n            }\n            if (styles['border-image'] === 'none') {\n              delete styles['border-image'];\n            }\n          }\n          return styles;\n        },\n        serialize: (styles, elementName) => {\n          let css = '';\n          const serializeStyles = (elemName, validStyleList) => {\n            const styleList = validStyleList[elemName];\n            if (styleList) {\n              for (let i = 0, l = styleList.length; i < l; i++) {\n                const name = styleList[i];\n                const value = styles[name];\n                if (value) {\n                  css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n                }\n              }\n            }\n          };\n          const isValid = (name, elemName) => {\n            if (!invalidStyles || !elemName) {\n              return true;\n            }\n            let styleMap = invalidStyles['*'];\n            if (styleMap && styleMap[name]) {\n              return false;\n            }\n            styleMap = invalidStyles[elemName];\n            return !(styleMap && styleMap[name]);\n          };\n          if (elementName && validStyles) {\n            serializeStyles('*', validStyles);\n            serializeStyles(elementName, validStyles);\n          } else {\n            each$d(styles, (value, name) => {\n              if (value && isValid(name, elementName)) {\n                css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n              }\n            });\n          }\n          return css;\n        }\n      };\n      return self;\n    };\n\n    const deprecated = {\n      keyLocation: true,\n      layerX: true,\n      layerY: true,\n      returnValue: true,\n      webkitMovementX: true,\n      webkitMovementY: true,\n      keyIdentifier: true,\n      mozPressure: true\n    };\n    const isNativeEvent = event => event instanceof Event || isFunction(event.initEvent);\n    const hasIsDefaultPrevented = event => event.isDefaultPrevented === always || event.isDefaultPrevented === never;\n    const needsNormalizing = event => isNullable(event.preventDefault) || isNativeEvent(event);\n    const clone$3 = (originalEvent, data) => {\n      const event = data !== null && data !== void 0 ? data : {};\n      for (const name in originalEvent) {\n        if (!has$2(deprecated, name)) {\n          event[name] = originalEvent[name];\n        }\n      }\n      if (isNonNullable(originalEvent.composedPath)) {\n        event.composedPath = () => originalEvent.composedPath();\n      }\n      return event;\n    };\n    const normalize$3 = (type, originalEvent, fallbackTarget, data) => {\n      var _a;\n      const event = clone$3(originalEvent, data);\n      event.type = type;\n      if (isNullable(event.target)) {\n        event.target = (_a = event.srcElement) !== null && _a !== void 0 ? _a : fallbackTarget;\n      }\n      if (needsNormalizing(originalEvent)) {\n        event.preventDefault = () => {\n          event.defaultPrevented = true;\n          event.isDefaultPrevented = always;\n          if (isFunction(originalEvent.preventDefault)) {\n            originalEvent.preventDefault();\n          }\n        };\n        event.stopPropagation = () => {\n          event.cancelBubble = true;\n          event.isPropagationStopped = always;\n          if (isFunction(originalEvent.stopPropagation)) {\n            originalEvent.stopPropagation();\n          }\n        };\n        event.stopImmediatePropagation = () => {\n          event.isImmediatePropagationStopped = always;\n          event.stopPropagation();\n        };\n        if (!hasIsDefaultPrevented(event)) {\n          event.isDefaultPrevented = event.defaultPrevented === true ? always : never;\n          event.isPropagationStopped = event.cancelBubble === true ? always : never;\n          event.isImmediatePropagationStopped = never;\n        }\n      }\n      return event;\n    };\n\n    const eventExpandoPrefix = 'mce-data-';\n    const mouseEventRe = /^(?:mouse|contextmenu)|click/;\n    const addEvent = (target, name, callback, capture) => {\n      target.addEventListener(name, callback, capture || false);\n    };\n    const removeEvent = (target, name, callback, capture) => {\n      target.removeEventListener(name, callback, capture || false);\n    };\n    const isMouseEvent = event => isNonNullable(event) && mouseEventRe.test(event.type);\n    const fix = (originalEvent, data) => {\n      const event = normalize$3(originalEvent.type, originalEvent, document, data);\n      if (isMouseEvent(originalEvent) && isUndefined(originalEvent.pageX) && !isUndefined(originalEvent.clientX)) {\n        const eventDoc = event.target.ownerDocument || document;\n        const doc = eventDoc.documentElement;\n        const body = eventDoc.body;\n        const mouseEvent = event;\n        mouseEvent.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n        mouseEvent.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n      }\n      return event;\n    };\n    const bindOnReady = (win, callback, eventUtils) => {\n      const doc = win.document, event = { type: 'ready' };\n      if (eventUtils.domLoaded) {\n        callback(event);\n        return;\n      }\n      const isDocReady = () => {\n        return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;\n      };\n      const readyHandler = () => {\n        removeEvent(win, 'DOMContentLoaded', readyHandler);\n        removeEvent(win, 'load', readyHandler);\n        if (!eventUtils.domLoaded) {\n          eventUtils.domLoaded = true;\n          callback(event);\n        }\n        win = null;\n      };\n      if (isDocReady()) {\n        readyHandler();\n      } else {\n        addEvent(win, 'DOMContentLoaded', readyHandler);\n      }\n      if (!eventUtils.domLoaded) {\n        addEvent(win, 'load', readyHandler);\n      }\n    };\n    class EventUtils {\n      constructor() {\n        this.domLoaded = false;\n        this.events = {};\n        this.count = 1;\n        this.expando = eventExpandoPrefix + (+new Date()).toString(32);\n        this.hasFocusIn = 'onfocusin' in document.documentElement;\n        this.count = 1;\n      }\n      bind(target, names, callback, scope) {\n        const self = this;\n        let callbackList;\n        const win = window;\n        const defaultNativeHandler = evt => {\n          self.executeHandlers(fix(evt || win.event), id);\n        };\n        if (!target || isText$a(target) || isComment(target)) {\n          return callback;\n        }\n        let id;\n        if (!target[self.expando]) {\n          id = self.count++;\n          target[self.expando] = id;\n          self.events[id] = {};\n        } else {\n          id = target[self.expando];\n        }\n        scope = scope || target;\n        const namesList = names.split(' ');\n        let i = namesList.length;\n        while (i--) {\n          let name = namesList[i];\n          let nativeHandler = defaultNativeHandler;\n          let capture = false;\n          let fakeName = false;\n          if (name === 'DOMContentLoaded') {\n            name = 'ready';\n          }\n          if (self.domLoaded && name === 'ready' && target.readyState === 'complete') {\n            callback.call(scope, fix({ type: name }));\n            continue;\n          }\n          if (!self.hasFocusIn && (name === 'focusin' || name === 'focusout')) {\n            capture = true;\n            fakeName = name === 'focusin' ? 'focus' : 'blur';\n            nativeHandler = evt => {\n              const event = fix(evt || win.event);\n              event.type = event.type === 'focus' ? 'focusin' : 'focusout';\n              self.executeHandlers(event, id);\n            };\n          }\n          callbackList = self.events[id][name];\n          if (!callbackList) {\n            self.events[id][name] = callbackList = [{\n                func: callback,\n                scope\n              }];\n            callbackList.fakeName = fakeName;\n            callbackList.capture = capture;\n            callbackList.nativeHandler = nativeHandler;\n            if (name === 'ready') {\n              bindOnReady(target, nativeHandler, self);\n            } else {\n              addEvent(target, fakeName || name, nativeHandler, capture);\n            }\n          } else {\n            if (name === 'ready' && self.domLoaded) {\n              callback(fix({ type: name }));\n            } else {\n              callbackList.push({\n                func: callback,\n                scope\n              });\n            }\n          }\n        }\n        target = callbackList = null;\n        return callback;\n      }\n      unbind(target, names, callback) {\n        if (!target || isText$a(target) || isComment(target)) {\n          return this;\n        }\n        const id = target[this.expando];\n        if (id) {\n          let eventMap = this.events[id];\n          if (names) {\n            const namesList = names.split(' ');\n            let i = namesList.length;\n            while (i--) {\n              const name = namesList[i];\n              const callbackList = eventMap[name];\n              if (callbackList) {\n                if (callback) {\n                  let ci = callbackList.length;\n                  while (ci--) {\n                    if (callbackList[ci].func === callback) {\n                      const nativeHandler = callbackList.nativeHandler;\n                      const fakeName = callbackList.fakeName, capture = callbackList.capture;\n                      const newCallbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1));\n                      newCallbackList.nativeHandler = nativeHandler;\n                      newCallbackList.fakeName = fakeName;\n                      newCallbackList.capture = capture;\n                      eventMap[name] = newCallbackList;\n                    }\n                  }\n                }\n                if (!callback || callbackList.length === 0) {\n                  delete eventMap[name];\n                  removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n                }\n              }\n            }\n          } else {\n            each$d(eventMap, (callbackList, name) => {\n              removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n            });\n            eventMap = {};\n          }\n          for (const name in eventMap) {\n            if (has$2(eventMap, name)) {\n              return this;\n            }\n          }\n          delete this.events[id];\n          try {\n            delete target[this.expando];\n          } catch (ex) {\n            target[this.expando] = null;\n          }\n        }\n        return this;\n      }\n      fire(target, name, args) {\n        return this.dispatch(target, name, args);\n      }\n      dispatch(target, name, args) {\n        if (!target || isText$a(target) || isComment(target)) {\n          return this;\n        }\n        const event = fix({\n          type: name,\n          target\n        }, args);\n        do {\n          const id = target[this.expando];\n          if (id) {\n            this.executeHandlers(event, id);\n          }\n          target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;\n        } while (target && !event.isPropagationStopped());\n        return this;\n      }\n      clean(target) {\n        if (!target || isText$a(target) || isComment(target)) {\n          return this;\n        }\n        if (target[this.expando]) {\n          this.unbind(target);\n        }\n        if (!target.getElementsByTagName) {\n          target = target.document;\n        }\n        if (target && target.getElementsByTagName) {\n          this.unbind(target);\n          const children = target.getElementsByTagName('*');\n          let i = children.length;\n          while (i--) {\n            target = children[i];\n            if (target[this.expando]) {\n              this.unbind(target);\n            }\n          }\n        }\n        return this;\n      }\n      destroy() {\n        this.events = {};\n      }\n      cancel(e) {\n        if (e) {\n          e.preventDefault();\n          e.stopImmediatePropagation();\n        }\n        return false;\n      }\n      executeHandlers(evt, id) {\n        const container = this.events[id];\n        const callbackList = container && container[evt.type];\n        if (callbackList) {\n          for (let i = 0, l = callbackList.length; i < l; i++) {\n            const callback = callbackList[i];\n            if (callback && callback.func.call(callback.scope, evt) === false) {\n              evt.preventDefault();\n            }\n            if (evt.isImmediatePropagationStopped()) {\n              return;\n            }\n          }\n        }\n      }\n    }\n    EventUtils.Event = new EventUtils();\n\n    const each$a = Tools.each;\n    const grep = Tools.grep;\n    const internalStyleName = 'data-mce-style';\n    const numericalCssMap = Tools.makeMap('fill-opacity font-weight line-height opacity orphans widows z-index zoom', ' ');\n    const legacySetAttribute = (elm, name, value) => {\n      if (isNullable(value) || value === '') {\n        remove$a(elm, name);\n      } else {\n        set$3(elm, name, value);\n      }\n    };\n    const camelCaseToHyphens = name => name.replace(/[A-Z]/g, v => '-' + v.toLowerCase());\n    const findNodeIndex = (node, normalized) => {\n      let idx = 0;\n      if (node) {\n        for (let lastNodeType = node.nodeType, tempNode = node.previousSibling; tempNode; tempNode = tempNode.previousSibling) {\n          const nodeType = tempNode.nodeType;\n          if (normalized && isText$a(tempNode)) {\n            if (nodeType === lastNodeType || !tempNode.data.length) {\n              continue;\n            }\n          }\n          idx++;\n          lastNodeType = nodeType;\n        }\n      }\n      return idx;\n    };\n    const updateInternalStyleAttr = (styles, elm) => {\n      const rawValue = get$9(elm, 'style');\n      const value = styles.serialize(styles.parse(rawValue), name(elm));\n      legacySetAttribute(elm, internalStyleName, value);\n    };\n    const convertStyleToString = (cssValue, cssName) => {\n      if (isNumber(cssValue)) {\n        return has$2(numericalCssMap, cssName) ? cssValue + '' : cssValue + 'px';\n      } else {\n        return cssValue;\n      }\n    };\n    const applyStyle$1 = ($elm, cssName, cssValue) => {\n      const normalizedName = camelCaseToHyphens(cssName);\n      if (isNullable(cssValue) || cssValue === '') {\n        remove$6($elm, normalizedName);\n      } else {\n        set$2($elm, normalizedName, convertStyleToString(cssValue, normalizedName));\n      }\n    };\n    const setupAttrHooks = (styles, settings, getContext) => {\n      const keepValues = settings.keep_values;\n      const keepUrlHook = {\n        set: (elm, value, name) => {\n          const sugarElm = SugarElement.fromDom(elm);\n          if (isFunction(settings.url_converter) && isNonNullable(value)) {\n            value = settings.url_converter.call(settings.url_converter_scope || getContext(), String(value), name, elm);\n          }\n          const internalName = 'data-mce-' + name;\n          legacySetAttribute(sugarElm, internalName, value);\n          legacySetAttribute(sugarElm, name, value);\n        },\n        get: (elm, name) => {\n          const sugarElm = SugarElement.fromDom(elm);\n          return get$9(sugarElm, 'data-mce-' + name) || get$9(sugarElm, name);\n        }\n      };\n      const attrHooks = {\n        style: {\n          set: (elm, value) => {\n            const sugarElm = SugarElement.fromDom(elm);\n            if (keepValues) {\n              legacySetAttribute(sugarElm, internalStyleName, value);\n            }\n            remove$a(sugarElm, 'style');\n            if (isString(value)) {\n              setAll(sugarElm, styles.parse(value));\n            }\n          },\n          get: elm => {\n            const sugarElm = SugarElement.fromDom(elm);\n            const value = get$9(sugarElm, internalStyleName) || get$9(sugarElm, 'style');\n            return styles.serialize(styles.parse(value), name(sugarElm));\n          }\n        }\n      };\n      if (keepValues) {\n        attrHooks.href = attrHooks.src = keepUrlHook;\n      }\n      return attrHooks;\n    };\n    const DOMUtils = (doc, settings = {}) => {\n      const addedStyles = {};\n      const win = window;\n      const files = {};\n      let counter = 0;\n      const stdMode = true;\n      const boxModel = true;\n      const styleSheetLoader = instance.forElement(SugarElement.fromDom(doc), {\n        contentCssCors: settings.contentCssCors,\n        referrerPolicy: settings.referrerPolicy\n      });\n      const boundEvents = [];\n      const schema = settings.schema ? settings.schema : Schema({});\n      const styles = Styles({\n        url_converter: settings.url_converter,\n        url_converter_scope: settings.url_converter_scope\n      }, settings.schema);\n      const events = settings.ownEvents ? new EventUtils() : EventUtils.Event;\n      const blockElementsMap = schema.getBlockElements();\n      const isBlock = node => {\n        if (isString(node)) {\n          return has$2(blockElementsMap, node);\n        } else {\n          return isElement$6(node) && (has$2(blockElementsMap, node.nodeName) || isTransparentBlock(schema, node));\n        }\n      };\n      const get = elm => elm && doc && isString(elm) ? doc.getElementById(elm) : elm;\n      const _get = elm => {\n        const value = get(elm);\n        return isNonNullable(value) ? SugarElement.fromDom(value) : null;\n      };\n      const getAttrib = (elm, name, defaultVal = '') => {\n        let value;\n        const $elm = _get(elm);\n        if (isNonNullable($elm) && isElement$7($elm)) {\n          const hook = attrHooks[name];\n          if (hook && hook.get) {\n            value = hook.get($elm.dom, name);\n          } else {\n            value = get$9($elm, name);\n          }\n        }\n        return isNonNullable(value) ? value : defaultVal;\n      };\n      const getAttribs = elm => {\n        const node = get(elm);\n        return isNullable(node) ? [] : node.attributes;\n      };\n      const setAttrib = (elm, name, value) => {\n        run(elm, e => {\n          if (isElement$6(e)) {\n            const $elm = SugarElement.fromDom(e);\n            const val = value === '' ? null : value;\n            const originalValue = get$9($elm, name);\n            const hook = attrHooks[name];\n            if (hook && hook.set) {\n              hook.set($elm.dom, val, name);\n            } else {\n              legacySetAttribute($elm, name, val);\n            }\n            if (originalValue !== val && settings.onSetAttrib) {\n              settings.onSetAttrib({\n                attrElm: $elm.dom,\n                attrName: name,\n                attrValue: val\n              });\n            }\n          }\n        });\n      };\n      const clone = (node, deep) => {\n        return node.cloneNode(deep);\n      };\n      const getRoot = () => settings.root_element || doc.body;\n      const getViewPort = argWin => {\n        const vp = getBounds(argWin);\n        return {\n          x: vp.x,\n          y: vp.y,\n          w: vp.width,\n          h: vp.height\n        };\n      };\n      const getPos$1 = (elm, rootElm) => getPos(doc.body, get(elm), rootElm);\n      const setStyle = (elm, name, value) => {\n        run(elm, e => {\n          const $elm = SugarElement.fromDom(e);\n          applyStyle$1($elm, name, value);\n          if (settings.update_styles) {\n            updateInternalStyleAttr(styles, $elm);\n          }\n        });\n      };\n      const setStyles = (elm, stylesArg) => {\n        run(elm, e => {\n          const $elm = SugarElement.fromDom(e);\n          each$d(stylesArg, (v, n) => {\n            applyStyle$1($elm, n, v);\n          });\n          if (settings.update_styles) {\n            updateInternalStyleAttr(styles, $elm);\n          }\n        });\n      };\n      const getStyle = (elm, name, computed) => {\n        const $elm = get(elm);\n        if (isNullable($elm) || !isElement$6($elm)) {\n          return undefined;\n        }\n        if (computed) {\n          return get$7(SugarElement.fromDom($elm), camelCaseToHyphens(name));\n        } else {\n          name = name.replace(/-(\\D)/g, (a, b) => b.toUpperCase());\n          if (name === 'float') {\n            name = 'cssFloat';\n          }\n          return $elm.style ? $elm.style[name] : undefined;\n        }\n      };\n      const getSize = elm => {\n        const $elm = get(elm);\n        if (!$elm) {\n          return {\n            w: 0,\n            h: 0\n          };\n        }\n        let w = getStyle($elm, 'width');\n        let h = getStyle($elm, 'height');\n        if (!w || w.indexOf('px') === -1) {\n          w = '0';\n        }\n        if (!h || h.indexOf('px') === -1) {\n          h = '0';\n        }\n        return {\n          w: parseInt(w, 10) || $elm.offsetWidth || $elm.clientWidth,\n          h: parseInt(h, 10) || $elm.offsetHeight || $elm.clientHeight\n        };\n      };\n      const getRect = elm => {\n        const $elm = get(elm);\n        const pos = getPos$1($elm);\n        const size = getSize($elm);\n        return {\n          x: pos.x,\n          y: pos.y,\n          w: size.w,\n          h: size.h\n        };\n      };\n      const is = (elm, selector) => {\n        if (!elm) {\n          return false;\n        }\n        const elms = isArray$1(elm) ? elm : [elm];\n        return exists(elms, e => {\n          return is$1(SugarElement.fromDom(e), selector);\n        });\n      };\n      const getParents = (elm, selector, root, collect) => {\n        const result = [];\n        let node = get(elm);\n        collect = collect === undefined;\n        const resolvedRoot = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null);\n        if (isString(selector)) {\n          if (selector === '*') {\n            selector = isElement$6;\n          } else {\n            const selectorVal = selector;\n            selector = node => is(node, selectorVal);\n          }\n        }\n        while (node) {\n          if (node === resolvedRoot || isNullable(node.nodeType) || isDocument$1(node) || isDocumentFragment(node)) {\n            break;\n          }\n          if (!selector || selector(node)) {\n            if (collect) {\n              result.push(node);\n            } else {\n              return [node];\n            }\n          }\n          node = node.parentNode;\n        }\n        return collect ? result : null;\n      };\n      const getParent = (node, selector, root) => {\n        const parents = getParents(node, selector, root, false);\n        return parents && parents.length > 0 ? parents[0] : null;\n      };\n      const _findSib = (node, selector, name) => {\n        let func = selector;\n        if (node) {\n          if (isString(selector)) {\n            func = node => {\n              return is(node, selector);\n            };\n          }\n          for (let tempNode = node[name]; tempNode; tempNode = tempNode[name]) {\n            if (isFunction(func) && func(tempNode)) {\n              return tempNode;\n            }\n          }\n        }\n        return null;\n      };\n      const getNext = (node, selector) => _findSib(node, selector, 'nextSibling');\n      const getPrev = (node, selector) => _findSib(node, selector, 'previousSibling');\n      const isParentNode = node => isFunction(node.querySelectorAll);\n      const select = (selector, scope) => {\n        var _a, _b;\n        const elm = (_b = (_a = get(scope)) !== null && _a !== void 0 ? _a : settings.root_element) !== null && _b !== void 0 ? _b : doc;\n        return isParentNode(elm) ? from(elm.querySelectorAll(selector)) : [];\n      };\n      const run = function (elm, func, scope) {\n        const context = scope !== null && scope !== void 0 ? scope : this;\n        if (isArray$1(elm)) {\n          const result = [];\n          each$a(elm, (e, i) => {\n            const node = get(e);\n            if (node) {\n              result.push(func.call(context, node, i));\n            }\n          });\n          return result;\n        } else {\n          const node = get(elm);\n          return !node ? false : func.call(context, node);\n        }\n      };\n      const setAttribs = (elm, attrs) => {\n        run(elm, $elm => {\n          each$d(attrs, (value, name) => {\n            setAttrib($elm, name, value);\n          });\n        });\n      };\n      const setHTML = (elm, html) => {\n        run(elm, e => {\n          const $elm = SugarElement.fromDom(e);\n          set$1($elm, html);\n        });\n      };\n      const add = (parentElm, name, attrs, html, create) => run(parentElm, parentElm => {\n        const newElm = isString(name) ? doc.createElement(name) : name;\n        if (isNonNullable(attrs)) {\n          setAttribs(newElm, attrs);\n        }\n        if (html) {\n          if (!isString(html) && html.nodeType) {\n            newElm.appendChild(html);\n          } else if (isString(html)) {\n            setHTML(newElm, html);\n          }\n        }\n        return !create ? parentElm.appendChild(newElm) : newElm;\n      });\n      const create = (name, attrs, html) => add(doc.createElement(name), name, attrs, html, true);\n      const decode = Entities.decode;\n      const encode = Entities.encodeAllRaw;\n      const createHTML = (name, attrs, html = '') => {\n        let outHtml = '<' + name;\n        for (const key in attrs) {\n          if (hasNonNullableKey(attrs, key)) {\n            outHtml += ' ' + key + '=\"' + encode(attrs[key]) + '\"';\n          }\n        }\n        if (isEmpty$3(html) && has$2(schema.getVoidElements(), name)) {\n          return outHtml + ' />';\n        } else {\n          return outHtml + '>' + html + '</' + name + '>';\n        }\n      };\n      const createFragment = html => {\n        const container = doc.createElement('div');\n        const frag = doc.createDocumentFragment();\n        frag.appendChild(container);\n        if (html) {\n          container.innerHTML = html;\n        }\n        let node;\n        while (node = container.firstChild) {\n          frag.appendChild(node);\n        }\n        frag.removeChild(container);\n        return frag;\n      };\n      const remove = (node, keepChildren) => {\n        return run(node, n => {\n          const $node = SugarElement.fromDom(n);\n          if (keepChildren) {\n            each$e(children$1($node), child => {\n              if (isText$b(child) && child.dom.length === 0) {\n                remove$5(child);\n              } else {\n                before$3($node, child);\n              }\n            });\n          }\n          remove$5($node);\n          return $node.dom;\n        });\n      };\n      const removeAllAttribs = e => run(e, e => {\n        const attrs = e.attributes;\n        for (let i = attrs.length - 1; i >= 0; i--) {\n          e.removeAttributeNode(attrs.item(i));\n        }\n      });\n      const parseStyle = cssText => styles.parse(cssText);\n      const serializeStyle = (stylesArg, name) => styles.serialize(stylesArg, name);\n      const addStyle = cssText => {\n        if (self !== DOMUtils.DOM && doc === document) {\n          if (addedStyles[cssText]) {\n            return;\n          }\n          addedStyles[cssText] = true;\n        }\n        let styleElm = doc.getElementById('mceDefaultStyles');\n        if (!styleElm) {\n          styleElm = doc.createElement('style');\n          styleElm.id = 'mceDefaultStyles';\n          styleElm.type = 'text/css';\n          const head = doc.head;\n          if (head.firstChild) {\n            head.insertBefore(styleElm, head.firstChild);\n          } else {\n            head.appendChild(styleElm);\n          }\n        }\n        if (styleElm.styleSheet) {\n          styleElm.styleSheet.cssText += cssText;\n        } else {\n          styleElm.appendChild(doc.createTextNode(cssText));\n        }\n      };\n      const loadCSS = urls => {\n        if (!urls) {\n          urls = '';\n        }\n        each$e(urls.split(','), url => {\n          files[url] = true;\n          styleSheetLoader.load(url).catch(noop);\n        });\n      };\n      const toggleClass = (elm, cls, state) => {\n        run(elm, e => {\n          if (isElement$6(e)) {\n            const $elm = SugarElement.fromDom(e);\n            const classes = cls.split(' ');\n            each$e(classes, c => {\n              if (isNonNullable(state)) {\n                const fn = state ? add$2 : remove$7;\n                fn($elm, c);\n              } else {\n                toggle$1($elm, c);\n              }\n            });\n          }\n        });\n      };\n      const addClass = (elm, cls) => {\n        toggleClass(elm, cls, true);\n      };\n      const removeClass = (elm, cls) => {\n        toggleClass(elm, cls, false);\n      };\n      const hasClass = (elm, cls) => {\n        const $elm = _get(elm);\n        const classes = cls.split(' ');\n        return isNonNullable($elm) && forall(classes, c => has($elm, c));\n      };\n      const show = elm => {\n        run(elm, e => remove$6(SugarElement.fromDom(e), 'display'));\n      };\n      const hide = elm => {\n        run(elm, e => set$2(SugarElement.fromDom(e), 'display', 'none'));\n      };\n      const isHidden = elm => {\n        const $elm = _get(elm);\n        return isNonNullable($elm) && is$2(getRaw($elm, 'display'), 'none');\n      };\n      const uniqueId = prefix => (!prefix ? 'mce_' : prefix) + counter++;\n      const getOuterHTML = elm => {\n        const $elm = _get(elm);\n        if (isNonNullable($elm)) {\n          return isElement$6($elm.dom) ? $elm.dom.outerHTML : getOuter($elm);\n        } else {\n          return '';\n        }\n      };\n      const setOuterHTML = (elm, html) => {\n        run(elm, $elm => {\n          if (isElement$6($elm)) {\n            $elm.outerHTML = html;\n          }\n        });\n      };\n      const insertAfter = (node, reference) => {\n        const referenceNode = get(reference);\n        return run(node, node => {\n          const parent = referenceNode === null || referenceNode === void 0 ? void 0 : referenceNode.parentNode;\n          const nextSibling = referenceNode === null || referenceNode === void 0 ? void 0 : referenceNode.nextSibling;\n          if (parent) {\n            if (nextSibling) {\n              parent.insertBefore(node, nextSibling);\n            } else {\n              parent.appendChild(node);\n            }\n          }\n          return node;\n        });\n      };\n      const replace = (newElm, oldElm, keepChildren) => run(oldElm, elm => {\n        var _a;\n        const replacee = isArray$1(oldElm) ? newElm.cloneNode(true) : newElm;\n        if (keepChildren) {\n          each$a(grep(elm.childNodes), node => {\n            replacee.appendChild(node);\n          });\n        }\n        (_a = elm.parentNode) === null || _a === void 0 ? void 0 : _a.replaceChild(replacee, elm);\n        return elm;\n      });\n      const rename = (elm, name) => {\n        if (elm.nodeName !== name.toUpperCase()) {\n          const newElm = create(name);\n          each$a(getAttribs(elm), attrNode => {\n            setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName));\n          });\n          replace(newElm, elm, true);\n          return newElm;\n        } else {\n          return elm;\n        }\n      };\n      const findCommonAncestor = (a, b) => {\n        let ps = a;\n        while (ps) {\n          let pe = b;\n          while (pe && ps !== pe) {\n            pe = pe.parentNode;\n          }\n          if (ps === pe) {\n            break;\n          }\n          ps = ps.parentNode;\n        }\n        if (!ps && a.ownerDocument) {\n          return a.ownerDocument.documentElement;\n        } else {\n          return ps;\n        }\n      };\n      const isNonEmptyElement = node => {\n        if (isElement$6(node)) {\n          const isNamedAnchor = node.nodeName.toLowerCase() === 'a' && !getAttrib(node, 'href') && getAttrib(node, 'id');\n          if (getAttrib(node, 'name') || getAttrib(node, 'data-mce-bookmark') || isNamedAnchor) {\n            return true;\n          }\n        }\n        return false;\n      };\n      const isEmpty = (node, elements, options) => {\n        let brCount = 0;\n        if (isNonEmptyElement(node)) {\n          return false;\n        }\n        const firstChild = node.firstChild;\n        if (firstChild) {\n          const walker = new DomTreeWalker(firstChild, node);\n          const whitespaceElements = schema ? schema.getWhitespaceElements() : {};\n          const nonEmptyElements = elements || (schema ? schema.getNonEmptyElements() : null);\n          let tempNode = firstChild;\n          do {\n            if (isElement$6(tempNode)) {\n              const bogusVal = tempNode.getAttribute('data-mce-bogus');\n              if (bogusVal) {\n                tempNode = walker.next(bogusVal === 'all');\n                continue;\n              }\n              const name = tempNode.nodeName.toLowerCase();\n              if (nonEmptyElements && nonEmptyElements[name]) {\n                if (name === 'br') {\n                  brCount++;\n                  tempNode = walker.next();\n                  continue;\n                }\n                return false;\n              }\n              if (isNonEmptyElement(tempNode)) {\n                return false;\n              }\n            }\n            if (isComment(tempNode)) {\n              return false;\n            }\n            if (isText$a(tempNode) && !isWhitespaceText(tempNode.data) && (!(options === null || options === void 0 ? void 0 : options.includeZwsp) || !isZwsp(tempNode.data))) {\n              return false;\n            }\n            if (isText$a(tempNode) && tempNode.parentNode && whitespaceElements[tempNode.parentNode.nodeName] && isWhitespaceText(tempNode.data)) {\n              return false;\n            }\n            tempNode = walker.next();\n          } while (tempNode);\n        }\n        return brCount <= 1;\n      };\n      const createRng = () => doc.createRange();\n      const split = (parentElm, splitElm, replacementElm) => {\n        let range = createRng();\n        let beforeFragment;\n        let afterFragment;\n        if (parentElm && splitElm && parentElm.parentNode && splitElm.parentNode) {\n          const parentNode = parentElm.parentNode;\n          range.setStart(parentNode, findNodeIndex(parentElm));\n          range.setEnd(splitElm.parentNode, findNodeIndex(splitElm));\n          beforeFragment = range.extractContents();\n          range = createRng();\n          range.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);\n          range.setEnd(parentNode, findNodeIndex(parentElm) + 1);\n          afterFragment = range.extractContents();\n          parentNode.insertBefore(trimNode(self, beforeFragment), parentElm);\n          if (replacementElm) {\n            parentNode.insertBefore(replacementElm, parentElm);\n          } else {\n            parentNode.insertBefore(splitElm, parentElm);\n          }\n          parentNode.insertBefore(trimNode(self, afterFragment), parentElm);\n          remove(parentElm);\n          return replacementElm || splitElm;\n        } else {\n          return undefined;\n        }\n      };\n      const bind = (target, name, func, scope) => {\n        if (isArray$1(target)) {\n          let i = target.length;\n          const rv = [];\n          while (i--) {\n            rv[i] = bind(target[i], name, func, scope);\n          }\n          return rv;\n        } else {\n          if (settings.collect && (target === doc || target === win)) {\n            boundEvents.push([\n              target,\n              name,\n              func,\n              scope\n            ]);\n          }\n          return events.bind(target, name, func, scope || self);\n        }\n      };\n      const unbind = (target, name, func) => {\n        if (isArray$1(target)) {\n          let i = target.length;\n          const rv = [];\n          while (i--) {\n            rv[i] = unbind(target[i], name, func);\n          }\n          return rv;\n        } else {\n          if (boundEvents.length > 0 && (target === doc || target === win)) {\n            let i = boundEvents.length;\n            while (i--) {\n              const [boundTarget, boundName, boundFunc] = boundEvents[i];\n              if (target === boundTarget && (!name || name === boundName) && (!func || func === boundFunc)) {\n                events.unbind(boundTarget, boundName, boundFunc);\n              }\n            }\n          }\n          return events.unbind(target, name, func);\n        }\n      };\n      const dispatch = (target, name, evt) => events.dispatch(target, name, evt);\n      const fire = (target, name, evt) => events.dispatch(target, name, evt);\n      const getContentEditable = node => {\n        if (node && isElement$6(node)) {\n          const contentEditable = node.getAttribute('data-mce-contenteditable');\n          if (contentEditable && contentEditable !== 'inherit') {\n            return contentEditable;\n          }\n          return node.contentEditable !== 'inherit' ? node.contentEditable : null;\n        } else {\n          return null;\n        }\n      };\n      const getContentEditableParent = node => {\n        const root = getRoot();\n        let state = null;\n        for (let tempNode = node; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n          state = getContentEditable(tempNode);\n          if (state !== null) {\n            break;\n          }\n        }\n        return state;\n      };\n      const isEditable = node => {\n        if (isNonNullable(node)) {\n          const scope = isElement$6(node) ? node : node.parentElement;\n          return isNonNullable(scope) && isEditable$3(SugarElement.fromDom(scope));\n        } else {\n          return false;\n        }\n      };\n      const destroy = () => {\n        if (boundEvents.length > 0) {\n          let i = boundEvents.length;\n          while (i--) {\n            const [boundTarget, boundName, boundFunc] = boundEvents[i];\n            events.unbind(boundTarget, boundName, boundFunc);\n          }\n        }\n        each$d(files, (_, url) => {\n          styleSheetLoader.unload(url);\n          delete files[url];\n        });\n      };\n      const isChildOf = (node, parent) => {\n        return node === parent || parent.contains(node);\n      };\n      const dumpRng = r => 'startContainer: ' + r.startContainer.nodeName + ', startOffset: ' + r.startOffset + ', endContainer: ' + r.endContainer.nodeName + ', endOffset: ' + r.endOffset;\n      const self = {\n        doc,\n        settings,\n        win,\n        files,\n        stdMode,\n        boxModel,\n        styleSheetLoader,\n        boundEvents,\n        styles,\n        schema,\n        events,\n        isBlock: isBlock,\n        root: null,\n        clone,\n        getRoot,\n        getViewPort,\n        getRect,\n        getSize,\n        getParent,\n        getParents: getParents,\n        get,\n        getNext,\n        getPrev,\n        select,\n        is,\n        add,\n        create,\n        createHTML,\n        createFragment,\n        remove,\n        setStyle,\n        getStyle: getStyle,\n        setStyles,\n        removeAllAttribs,\n        setAttrib,\n        setAttribs,\n        getAttrib,\n        getPos: getPos$1,\n        parseStyle,\n        serializeStyle,\n        addStyle,\n        loadCSS,\n        addClass,\n        removeClass,\n        hasClass,\n        toggleClass,\n        show,\n        hide,\n        isHidden,\n        uniqueId,\n        setHTML,\n        getOuterHTML,\n        setOuterHTML,\n        decode,\n        encode,\n        insertAfter,\n        replace,\n        rename,\n        findCommonAncestor,\n        run,\n        getAttribs,\n        isEmpty,\n        createRng,\n        nodeIndex: findNodeIndex,\n        split,\n        bind: bind,\n        unbind: unbind,\n        fire,\n        dispatch,\n        getContentEditable,\n        getContentEditableParent,\n        isEditable,\n        destroy,\n        isChildOf,\n        dumpRng\n      };\n      const attrHooks = setupAttrHooks(styles, settings, constant(self));\n      return self;\n    };\n    DOMUtils.DOM = DOMUtils(document);\n    DOMUtils.nodeIndex = findNodeIndex;\n\n    const DOM$b = DOMUtils.DOM;\n    const QUEUED = 0;\n    const LOADING = 1;\n    const LOADED = 2;\n    const FAILED = 3;\n    class ScriptLoader {\n      constructor(settings = {}) {\n        this.states = {};\n        this.queue = [];\n        this.scriptLoadedCallbacks = {};\n        this.queueLoadedCallbacks = [];\n        this.loading = false;\n        this.settings = settings;\n      }\n      _setReferrerPolicy(referrerPolicy) {\n        this.settings.referrerPolicy = referrerPolicy;\n      }\n      loadScript(url) {\n        return new Promise((resolve, reject) => {\n          const dom = DOM$b;\n          let elm;\n          const cleanup = () => {\n            dom.remove(id);\n            if (elm) {\n              elm.onerror = elm.onload = elm = null;\n            }\n          };\n          const done = () => {\n            cleanup();\n            resolve();\n          };\n          const error = () => {\n            cleanup();\n            reject('Failed to load script: ' + url);\n          };\n          const id = dom.uniqueId();\n          elm = document.createElement('script');\n          elm.id = id;\n          elm.type = 'text/javascript';\n          elm.src = Tools._addCacheSuffix(url);\n          if (this.settings.referrerPolicy) {\n            dom.setAttrib(elm, 'referrerpolicy', this.settings.referrerPolicy);\n          }\n          elm.onload = done;\n          elm.onerror = error;\n          (document.getElementsByTagName('head')[0] || document.body).appendChild(elm);\n        });\n      }\n      isDone(url) {\n        return this.states[url] === LOADED;\n      }\n      markDone(url) {\n        this.states[url] = LOADED;\n      }\n      add(url) {\n        const self = this;\n        self.queue.push(url);\n        const state = self.states[url];\n        if (state === undefined) {\n          self.states[url] = QUEUED;\n        }\n        return new Promise((resolve, reject) => {\n          if (!self.scriptLoadedCallbacks[url]) {\n            self.scriptLoadedCallbacks[url] = [];\n          }\n          self.scriptLoadedCallbacks[url].push({\n            resolve,\n            reject\n          });\n        });\n      }\n      load(url) {\n        return this.add(url);\n      }\n      remove(url) {\n        delete this.states[url];\n        delete this.scriptLoadedCallbacks[url];\n      }\n      loadQueue() {\n        const queue = this.queue;\n        this.queue = [];\n        return this.loadScripts(queue);\n      }\n      loadScripts(scripts) {\n        const self = this;\n        const execCallbacks = (name, url) => {\n          get$a(self.scriptLoadedCallbacks, url).each(callbacks => {\n            each$e(callbacks, callback => callback[name](url));\n          });\n          delete self.scriptLoadedCallbacks[url];\n        };\n        const processResults = results => {\n          const failures = filter$5(results, result => result.status === 'rejected');\n          if (failures.length > 0) {\n            return Promise.reject(bind$3(failures, ({reason}) => isArray$1(reason) ? reason : [reason]));\n          } else {\n            return Promise.resolve();\n          }\n        };\n        const load = urls => Promise.allSettled(map$3(urls, url => {\n          if (self.states[url] === LOADED) {\n            execCallbacks('resolve', url);\n            return Promise.resolve();\n          } else if (self.states[url] === FAILED) {\n            execCallbacks('reject', url);\n            return Promise.reject(url);\n          } else {\n            self.states[url] = LOADING;\n            return self.loadScript(url).then(() => {\n              self.states[url] = LOADED;\n              execCallbacks('resolve', url);\n              const queue = self.queue;\n              if (queue.length > 0) {\n                self.queue = [];\n                return load(queue).then(processResults);\n              } else {\n                return Promise.resolve();\n              }\n            }, () => {\n              self.states[url] = FAILED;\n              execCallbacks('reject', url);\n              return Promise.reject(url);\n            });\n          }\n        }));\n        const processQueue = urls => {\n          self.loading = true;\n          return load(urls).then(results => {\n            self.loading = false;\n            const nextQueuedItem = self.queueLoadedCallbacks.shift();\n            Optional.from(nextQueuedItem).each(call);\n            return processResults(results);\n          });\n        };\n        const uniqueScripts = stringArray(scripts);\n        if (self.loading) {\n          return new Promise((resolve, reject) => {\n            self.queueLoadedCallbacks.push(() => {\n              processQueue(uniqueScripts).then(resolve, reject);\n            });\n          });\n        } else {\n          return processQueue(uniqueScripts);\n        }\n      }\n    }\n    ScriptLoader.ScriptLoader = new ScriptLoader();\n\n    const Cell = initial => {\n      let value = initial;\n      const get = () => {\n        return value;\n      };\n      const set = v => {\n        value = v;\n      };\n      return {\n        get,\n        set\n      };\n    };\n\n    const isRaw = str => isObject(str) && has$2(str, 'raw');\n    const isTokenised = str => isArray$1(str) && str.length > 1;\n    const data = {};\n    const currentCode = Cell('en');\n    const getLanguageData = () => get$a(data, currentCode.get());\n    const getData$1 = () => map$2(data, value => ({ ...value }));\n    const setCode = newCode => {\n      if (newCode) {\n        currentCode.set(newCode);\n      }\n    };\n    const getCode = () => currentCode.get();\n    const add$1 = (code, items) => {\n      let langData = data[code];\n      if (!langData) {\n        data[code] = langData = {};\n      }\n      each$d(items, (translation, name) => {\n        langData[name.toLowerCase()] = translation;\n      });\n    };\n    const translate = text => {\n      const langData = getLanguageData().getOr({});\n      const toString = obj => {\n        if (isFunction(obj)) {\n          return Object.prototype.toString.call(obj);\n        }\n        return !isEmpty(obj) ? '' + obj : '';\n      };\n      const isEmpty = text => text === '' || text === null || text === undefined;\n      const getLangData = text => {\n        const textstr = toString(text);\n        return get$a(langData, textstr.toLowerCase()).map(toString).getOr(textstr);\n      };\n      const removeContext = str => str.replace(/{context:\\w+}$/, '');\n      if (isEmpty(text)) {\n        return '';\n      }\n      if (isRaw(text)) {\n        return toString(text.raw);\n      }\n      if (isTokenised(text)) {\n        const values = text.slice(1);\n        const substitued = getLangData(text[0]).replace(/\\{([0-9]+)\\}/g, ($1, $2) => has$2(values, $2) ? toString(values[$2]) : $1);\n        return removeContext(substitued);\n      }\n      return removeContext(getLangData(text));\n    };\n    const isRtl$1 = () => getLanguageData().bind(items => get$a(items, '_dir')).exists(dir => dir === 'rtl');\n    const hasCode = code => has$2(data, code);\n    const I18n = {\n      getData: getData$1,\n      setCode,\n      getCode,\n      add: add$1,\n      translate,\n      isRtl: isRtl$1,\n      hasCode\n    };\n\n    const AddOnManager = () => {\n      const items = [];\n      const urls = {};\n      const lookup = {};\n      const _listeners = [];\n      const runListeners = (name, state) => {\n        const matchedListeners = filter$5(_listeners, listener => listener.name === name && listener.state === state);\n        each$e(matchedListeners, listener => listener.resolve());\n      };\n      const isLoaded = name => has$2(urls, name);\n      const isAdded = name => has$2(lookup, name);\n      const get = name => {\n        if (lookup[name]) {\n          return lookup[name].instance;\n        }\n        return undefined;\n      };\n      const loadLanguagePack = (name, languages) => {\n        const language = I18n.getCode();\n        const wrappedLanguages = ',' + (languages || '') + ',';\n        if (!language || languages && wrappedLanguages.indexOf(',' + language + ',') === -1) {\n          return;\n        }\n        ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');\n      };\n      const requireLangPack = (name, languages) => {\n        if (AddOnManager.languageLoad !== false) {\n          if (isLoaded(name)) {\n            loadLanguagePack(name, languages);\n          } else {\n            waitFor(name, 'loaded').then(() => loadLanguagePack(name, languages));\n          }\n        }\n      };\n      const add = (id, addOn) => {\n        items.push(addOn);\n        lookup[id] = { instance: addOn };\n        runListeners(id, 'added');\n        return addOn;\n      };\n      const remove = name => {\n        delete urls[name];\n        delete lookup[name];\n      };\n      const createUrl = (baseUrl, dep) => {\n        if (isString(dep)) {\n          return isString(baseUrl) ? {\n            prefix: '',\n            resource: dep,\n            suffix: ''\n          } : {\n            prefix: baseUrl.prefix,\n            resource: dep,\n            suffix: baseUrl.suffix\n          };\n        } else {\n          return dep;\n        }\n      };\n      const load = (name, addOnUrl) => {\n        if (urls[name]) {\n          return Promise.resolve();\n        }\n        let urlString = isString(addOnUrl) ? addOnUrl : addOnUrl.prefix + addOnUrl.resource + addOnUrl.suffix;\n        if (urlString.indexOf('/') !== 0 && urlString.indexOf('://') === -1) {\n          urlString = AddOnManager.baseURL + '/' + urlString;\n        }\n        urls[name] = urlString.substring(0, urlString.lastIndexOf('/'));\n        const done = () => {\n          runListeners(name, 'loaded');\n          return Promise.resolve();\n        };\n        if (lookup[name]) {\n          return done();\n        } else {\n          return ScriptLoader.ScriptLoader.add(urlString).then(done);\n        }\n      };\n      const waitFor = (name, state = 'added') => {\n        if (state === 'added' && isAdded(name)) {\n          return Promise.resolve();\n        } else if (state === 'loaded' && isLoaded(name)) {\n          return Promise.resolve();\n        } else {\n          return new Promise(resolve => {\n            _listeners.push({\n              name,\n              state,\n              resolve\n            });\n          });\n        }\n      };\n      return {\n        items,\n        urls,\n        lookup,\n        get,\n        requireLangPack,\n        add,\n        remove,\n        createUrl,\n        load,\n        waitFor\n      };\n    };\n    AddOnManager.languageLoad = true;\n    AddOnManager.baseURL = '';\n    AddOnManager.PluginManager = AddOnManager();\n    AddOnManager.ThemeManager = AddOnManager();\n    AddOnManager.ModelManager = AddOnManager();\n\n    const singleton = doRevoke => {\n      const subject = Cell(Optional.none());\n      const revoke = () => subject.get().each(doRevoke);\n      const clear = () => {\n        revoke();\n        subject.set(Optional.none());\n      };\n      const isSet = () => subject.get().isSome();\n      const get = () => subject.get();\n      const set = s => {\n        revoke();\n        subject.set(Optional.some(s));\n      };\n      return {\n        clear,\n        isSet,\n        get,\n        set\n      };\n    };\n    const repeatable = delay => {\n      const intervalId = Cell(Optional.none());\n      const revoke = () => intervalId.get().each(id => clearInterval(id));\n      const clear = () => {\n        revoke();\n        intervalId.set(Optional.none());\n      };\n      const isSet = () => intervalId.get().isSome();\n      const get = () => intervalId.get();\n      const set = functionToRepeat => {\n        revoke();\n        intervalId.set(Optional.some(setInterval(functionToRepeat, delay)));\n      };\n      return {\n        clear,\n        isSet,\n        get,\n        set\n      };\n    };\n    const value$2 = () => {\n      const subject = singleton(noop);\n      const on = f => subject.get().each(f);\n      return {\n        ...subject,\n        on\n      };\n    };\n\n    const first$1 = (fn, rate) => {\n      let timer = null;\n      const cancel = () => {\n        if (!isNull(timer)) {\n          clearTimeout(timer);\n          timer = null;\n        }\n      };\n      const throttle = (...args) => {\n        if (isNull(timer)) {\n          timer = setTimeout(() => {\n            timer = null;\n            fn.apply(null, args);\n          }, rate);\n        }\n      };\n      return {\n        cancel,\n        throttle\n      };\n    };\n    const last$1 = (fn, rate) => {\n      let timer = null;\n      const cancel = () => {\n        if (!isNull(timer)) {\n          clearTimeout(timer);\n          timer = null;\n        }\n      };\n      const throttle = (...args) => {\n        cancel();\n        timer = setTimeout(() => {\n          timer = null;\n          fn.apply(null, args);\n        }, rate);\n      };\n      return {\n        cancel,\n        throttle\n      };\n    };\n\n    const annotation = constant('mce-annotation');\n    const dataAnnotation = constant('data-mce-annotation');\n    const dataAnnotationId = constant('data-mce-annotation-uid');\n    const dataAnnotationActive = constant('data-mce-annotation-active');\n    const dataAnnotationClasses = constant('data-mce-annotation-classes');\n    const dataAnnotationAttributes = constant('data-mce-annotation-attrs');\n\n    const isRoot$1 = root => node => eq(node, root);\n    const identify = (editor, annotationName) => {\n      const rng = editor.selection.getRng();\n      const start = SugarElement.fromDom(rng.startContainer);\n      const root = SugarElement.fromDom(editor.getBody());\n      const selector = annotationName.fold(() => '.' + annotation(), an => `[${ dataAnnotation() }=\"${ an }\"]`);\n      const newStart = child$1(start, rng.startOffset).getOr(start);\n      const closest = closest$3(newStart, selector, isRoot$1(root));\n      return closest.bind(c => getOpt(c, `${ dataAnnotationId() }`).bind(uid => getOpt(c, `${ dataAnnotation() }`).map(name => {\n        const elements = findMarkers(editor, uid);\n        return {\n          uid,\n          name,\n          elements\n        };\n      })));\n    };\n    const isAnnotation = elem => isElement$7(elem) && has(elem, annotation());\n    const isBogusElement = (elem, root) => has$1(elem, 'data-mce-bogus') || ancestor$2(elem, '[data-mce-bogus=\"all\"]', isRoot$1(root));\n    const findMarkers = (editor, uid) => {\n      const body = SugarElement.fromDom(editor.getBody());\n      const descendants$1 = descendants(body, `[${ dataAnnotationId() }=\"${ uid }\"]`);\n      return filter$5(descendants$1, descendant => !isBogusElement(descendant, body));\n    };\n    const findAll = (editor, name) => {\n      const body = SugarElement.fromDom(editor.getBody());\n      const markers = descendants(body, `[${ dataAnnotation() }=\"${ name }\"]`);\n      const directory = {};\n      each$e(markers, m => {\n        if (!isBogusElement(m, body)) {\n          const uid = get$9(m, dataAnnotationId());\n          const nodesAlready = get$a(directory, uid).getOr([]);\n          directory[uid] = nodesAlready.concat([m]);\n        }\n      });\n      return directory;\n    };\n\n    const setup$x = (editor, registry) => {\n      const changeCallbacks = Cell({});\n      const initData = () => ({\n        listeners: [],\n        previous: value$2()\n      });\n      const withCallbacks = (name, f) => {\n        updateCallbacks(name, data => {\n          f(data);\n          return data;\n        });\n      };\n      const updateCallbacks = (name, f) => {\n        const callbackMap = changeCallbacks.get();\n        const data = get$a(callbackMap, name).getOrThunk(initData);\n        const outputData = f(data);\n        callbackMap[name] = outputData;\n        changeCallbacks.set(callbackMap);\n      };\n      const fireCallbacks = (name, uid, elements) => {\n        withCallbacks(name, data => {\n          each$e(data.listeners, f => f(true, name, {\n            uid,\n            nodes: map$3(elements, elem => elem.dom)\n          }));\n        });\n      };\n      const fireNoAnnotation = name => {\n        withCallbacks(name, data => {\n          each$e(data.listeners, f => f(false, name));\n        });\n      };\n      const toggleActiveAttr = (uid, state) => {\n        each$e(findMarkers(editor, uid), elem => {\n          if (state) {\n            set$3(elem, dataAnnotationActive(), 'true');\n          } else {\n            remove$a(elem, dataAnnotationActive());\n          }\n        });\n      };\n      const onNodeChange = last$1(() => {\n        const annotations = sort(registry.getNames());\n        each$e(annotations, name => {\n          updateCallbacks(name, data => {\n            const prev = data.previous.get();\n            identify(editor, Optional.some(name)).fold(() => {\n              prev.each(uid => {\n                fireNoAnnotation(name);\n                data.previous.clear();\n                toggleActiveAttr(uid, false);\n              });\n            }, ({uid, name, elements}) => {\n              if (!is$2(prev, uid)) {\n                prev.each(uid => toggleActiveAttr(uid, false));\n                fireCallbacks(name, uid, elements);\n                data.previous.set(uid);\n                toggleActiveAttr(uid, true);\n              }\n            });\n            return {\n              previous: data.previous,\n              listeners: data.listeners\n            };\n          });\n        });\n      }, 30);\n      editor.on('remove', () => {\n        onNodeChange.cancel();\n      });\n      editor.on('NodeChange', () => {\n        onNodeChange.throttle();\n      });\n      const addListener = (name, f) => {\n        updateCallbacks(name, data => ({\n          previous: data.previous,\n          listeners: data.listeners.concat([f])\n        }));\n      };\n      return { addListener };\n    };\n\n    const setup$w = (editor, registry) => {\n      const dataAnnotation$1 = dataAnnotation();\n      const identifyParserNode = node => Optional.from(node.attr(dataAnnotation$1)).bind(registry.lookup);\n      const removeDirectAnnotation = node => {\n        var _a, _b;\n        node.attr(dataAnnotationId(), null);\n        node.attr(dataAnnotation(), null);\n        node.attr(dataAnnotationActive(), null);\n        const customAttrNames = Optional.from(node.attr(dataAnnotationAttributes())).map(names => names.split(',')).getOr([]);\n        const customClasses = Optional.from(node.attr(dataAnnotationClasses())).map(names => names.split(',')).getOr([]);\n        each$e(customAttrNames, name => node.attr(name, null));\n        const classList = (_b = (_a = node.attr('class')) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];\n        const newClassList = difference(classList, [annotation()].concat(customClasses));\n        node.attr('class', newClassList.length > 0 ? newClassList.join(' ') : null);\n        node.attr(dataAnnotationClasses(), null);\n        node.attr(dataAnnotationAttributes(), null);\n      };\n      editor.serializer.addTempAttr(dataAnnotationActive());\n      editor.serializer.addAttributeFilter(dataAnnotation$1, nodes => {\n        for (const node of nodes) {\n          identifyParserNode(node).each(settings => {\n            if (settings.persistent === false) {\n              if (node.name === 'span') {\n                node.unwrap();\n              } else {\n                removeDirectAnnotation(node);\n              }\n            }\n          });\n        }\n      });\n    };\n\n    const create$c = () => {\n      const annotations = {};\n      const register = (name, settings) => {\n        annotations[name] = {\n          name,\n          settings\n        };\n      };\n      const lookup = name => get$a(annotations, name).map(a => a.settings);\n      const getNames = () => keys(annotations);\n      return {\n        register,\n        lookup,\n        getNames\n      };\n    };\n\n    let unique = 0;\n    const generate$1 = prefix => {\n      const date = new Date();\n      const time = date.getTime();\n      const random = Math.floor(Math.random() * 1000000000);\n      unique++;\n      return prefix + '_' + random + unique + String(time);\n    };\n\n    const add = (element, classes) => {\n      each$e(classes, x => {\n        add$2(element, x);\n      });\n    };\n    const remove$4 = (element, classes) => {\n      each$e(classes, x => {\n        remove$7(element, x);\n      });\n    };\n\n    const clone$2 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n    const shallow$1 = original => clone$2(original, false);\n    const deep$1 = original => clone$2(original, true);\n    const shallowAs = (original, tag) => {\n      const nu = SugarElement.fromTag(tag);\n      const attributes = clone$4(original);\n      setAll$1(nu, attributes);\n      return nu;\n    };\n    const mutate = (original, tag) => {\n      const nu = shallowAs(original, tag);\n      after$4(original, nu);\n      const children = children$1(original);\n      append(nu, children);\n      remove$5(original);\n      return nu;\n    };\n\n    const TextWalker = (startNode, rootNode, isBoundary = never) => {\n      const walker = new DomTreeWalker(startNode, rootNode);\n      const walk = direction => {\n        let next;\n        do {\n          next = walker[direction]();\n        } while (next && !isText$a(next) && !isBoundary(next));\n        return Optional.from(next).filter(isText$a);\n      };\n      return {\n        current: () => Optional.from(walker.current()).filter(isText$a),\n        next: () => walk('next'),\n        prev: () => walk('prev'),\n        prev2: () => walk('prev2')\n      };\n    };\n\n    const TextSeeker = (dom, isBoundary) => {\n      const isBlockBoundary = isBoundary ? isBoundary : node => dom.isBlock(node) || isBr$6(node) || isContentEditableFalse$b(node);\n      const walk = (node, offset, walker, process) => {\n        if (isText$a(node)) {\n          const newOffset = process(node, offset, node.data);\n          if (newOffset !== -1) {\n            return Optional.some({\n              container: node,\n              offset: newOffset\n            });\n          }\n        }\n        return walker().bind(next => walk(next.container, next.offset, walker, process));\n      };\n      const backwards = (node, offset, process, root) => {\n        const walker = TextWalker(node, root !== null && root !== void 0 ? root : dom.getRoot(), isBlockBoundary);\n        return walk(node, offset, () => walker.prev().map(prev => ({\n          container: prev,\n          offset: prev.length\n        })), process).getOrNull();\n      };\n      const forwards = (node, offset, process, root) => {\n        const walker = TextWalker(node, root !== null && root !== void 0 ? root : dom.getRoot(), isBlockBoundary);\n        return walk(node, offset, () => walker.next().map(next => ({\n          container: next,\n          offset: 0\n        })), process).getOrNull();\n      };\n      return {\n        backwards,\n        forwards\n      };\n    };\n\n    const round$2 = Math.round;\n    const clone$1 = rect => {\n      if (!rect) {\n        return {\n          left: 0,\n          top: 0,\n          bottom: 0,\n          right: 0,\n          width: 0,\n          height: 0\n        };\n      }\n      return {\n        left: round$2(rect.left),\n        top: round$2(rect.top),\n        bottom: round$2(rect.bottom),\n        right: round$2(rect.right),\n        width: round$2(rect.width),\n        height: round$2(rect.height)\n      };\n    };\n    const collapse = (rect, toStart) => {\n      rect = clone$1(rect);\n      if (toStart) {\n        rect.right = rect.left;\n      } else {\n        rect.left = rect.left + rect.width;\n        rect.right = rect.left;\n      }\n      rect.width = 0;\n      return rect;\n    };\n    const isEqual = (rect1, rect2) => rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right;\n    const isValidOverflow = (overflowY, rect1, rect2) => overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;\n    const isAbove$1 = (rect1, rect2) => {\n      const halfHeight = Math.min(rect2.height / 2, rect1.height / 2);\n      if (rect1.bottom - halfHeight < rect2.top) {\n        return true;\n      }\n      if (rect1.top > rect2.bottom) {\n        return false;\n      }\n      return isValidOverflow(rect2.top - rect1.bottom, rect1, rect2);\n    };\n    const isBelow$1 = (rect1, rect2) => {\n      if (rect1.top > rect2.bottom) {\n        return true;\n      }\n      if (rect1.bottom < rect2.top) {\n        return false;\n      }\n      return isValidOverflow(rect2.bottom - rect1.top, rect1, rect2);\n    };\n    const containsXY = (rect, clientX, clientY) => clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;\n    const boundingClientRectFromRects = rects => {\n      return foldl(rects, (acc, rect) => {\n        return acc.fold(() => Optional.some(rect), prevRect => {\n          const left = Math.min(rect.left, prevRect.left);\n          const top = Math.min(rect.top, prevRect.top);\n          const right = Math.max(rect.right, prevRect.right);\n          const bottom = Math.max(rect.bottom, prevRect.bottom);\n          return Optional.some({\n            top,\n            right,\n            bottom,\n            left,\n            width: right - left,\n            height: bottom - top\n          });\n        });\n      }, Optional.none());\n    };\n    const distanceToRectEdgeFromXY = (rect, x, y) => {\n      const cx = Math.max(Math.min(x, rect.left + rect.width), rect.left);\n      const cy = Math.max(Math.min(y, rect.top + rect.height), rect.top);\n      return Math.sqrt((x - cx) * (x - cx) + (y - cy) * (y - cy));\n    };\n    const overlapY = (r1, r2) => Math.max(0, Math.min(r1.bottom, r2.bottom) - Math.max(r1.top, r2.top));\n\n    const clamp$2 = (value, min, max) => Math.min(Math.max(value, min), max);\n\n    const getSelectedNode = range => {\n      const startContainer = range.startContainer, startOffset = range.startOffset;\n      if (startContainer === range.endContainer && startContainer.hasChildNodes() && range.endOffset === startOffset + 1) {\n        return startContainer.childNodes[startOffset];\n      }\n      return null;\n    };\n    const getNode$1 = (container, offset) => {\n      if (isElement$6(container) && container.hasChildNodes()) {\n        const childNodes = container.childNodes;\n        const safeOffset = clamp$2(offset, 0, childNodes.length - 1);\n        return childNodes[safeOffset];\n      } else {\n        return container;\n      }\n    };\n    const getNodeUnsafe = (container, offset) => {\n      if (offset < 0 && isElement$6(container) && container.hasChildNodes()) {\n        return undefined;\n      } else {\n        return getNode$1(container, offset);\n      }\n    };\n\n    const extendingChars = new RegExp('[\\u0300-\\u036f\\u0483-\\u0487\\u0488-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u0610-\\u061a' + '\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7-\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0' + '\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08e3-\\u0902\\u093a\\u093c' + '\\u0941-\\u0948\\u094d\\u0951-\\u0957\\u0962-\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2-\\u09e3' + '\\u0a01-\\u0a02\\u0a3c\\u0a41-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70-\\u0a71\\u0a75\\u0a81-\\u0a82\\u0abc' + '\\u0ac1-\\u0ac5\\u0ac7-\\u0ac8\\u0acd\\u0ae2-\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57' + '\\u0b62-\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c00\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56' + '\\u0c62-\\u0c63\\u0c81\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc-\\u0ccd\\u0cd5-\\u0cd6\\u0ce2-\\u0ce3\\u0d01\\u0d3e\\u0d41-\\u0d44' + '\\u0d4d\\u0d57\\u0d62-\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9' + '\\u0ebb-\\u0ebc\\u0ec8-\\u0ecd\\u0f18-\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97' + '\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039-\\u103a\\u103d-\\u103e\\u1058-\\u1059\\u105e-\\u1060\\u1071-\\u1074' + '\\u1082\\u1085-\\u1086\\u108d\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17b4-\\u17b5' + '\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927-\\u1928\\u1932\\u1939-\\u193b\\u1a17-\\u1a18' + '\\u1a1b\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1ab0-\\u1abd\\u1ABE\\u1b00-\\u1b03\\u1b34' + '\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80-\\u1b81\\u1ba2-\\u1ba5\\u1ba8-\\u1ba9\\u1bab-\\u1bad\\u1be6\\u1be8-\\u1be9' + '\\u1bed\\u1bef-\\u1bf1\\u1c2c-\\u1c33\\u1c36-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1cf4\\u1cf8-\\u1cf9' + '\\u1dc0-\\u1df5\\u1dfc-\\u1dff\\u200c-\\u200d\\u20d0-\\u20dc\\u20DD-\\u20E0\\u20e1\\u20E2-\\u20E4\\u20e5-\\u20f0\\u2cef-\\u2cf1' + '\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302d\\u302e-\\u302f\\u3099-\\u309a\\ua66f\\uA670-\\uA672\\ua674-\\ua67d\\ua69e-\\ua69f\\ua6f0-\\ua6f1' + '\\ua802\\ua806\\ua80b\\ua825-\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc' + '\\ua9e5\\uaa29-\\uaa2e\\uaa31-\\uaa32\\uaa35-\\uaa36\\uaa43\\uaa4c\\uaa7c\\uaab0\\uaab2-\\uaab4\\uaab7-\\uaab8\\uaabe-\\uaabf\\uaac1' + '\\uaaec-\\uaaed\\uaaf6\\uabe5\\uabe8\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\uff9e-\\uff9f]');\n    const isExtendingChar = ch => isString(ch) && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n\n    const or = (...args) => {\n      return x => {\n        for (let i = 0; i < args.length; i++) {\n          if (args[i](x)) {\n            return true;\n          }\n        }\n        return false;\n      };\n    };\n    const and = (...args) => {\n      return x => {\n        for (let i = 0; i < args.length; i++) {\n          if (!args[i](x)) {\n            return false;\n          }\n        }\n        return true;\n      };\n    };\n\n    const isElement$4 = isElement$6;\n    const isCaretCandidate$2 = isCaretCandidate$3;\n    const isBlock$1 = matchStyleValues('display', 'block table');\n    const isFloated = matchStyleValues('float', 'left right');\n    const isValidElementCaretCandidate = and(isElement$4, isCaretCandidate$2, not(isFloated));\n    const isNotPre = not(matchStyleValues('white-space', 'pre pre-line pre-wrap'));\n    const isText$7 = isText$a;\n    const isBr$3 = isBr$6;\n    const nodeIndex$1 = DOMUtils.nodeIndex;\n    const resolveIndex$1 = getNodeUnsafe;\n    const createRange$1 = doc => doc ? doc.createRange() : DOMUtils.DOM.createRng();\n    const isWhiteSpace$1 = chr => isString(chr) && /[\\r\\n\\t ]/.test(chr);\n    const isRange = rng => !!rng.setStart && !!rng.setEnd;\n    const isHiddenWhiteSpaceRange = range => {\n      const container = range.startContainer;\n      const offset = range.startOffset;\n      if (isWhiteSpace$1(range.toString()) && isNotPre(container.parentNode) && isText$a(container)) {\n        const text = container.data;\n        if (isWhiteSpace$1(text[offset - 1]) || isWhiteSpace$1(text[offset + 1])) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const getBrClientRect = brNode => {\n      const doc = brNode.ownerDocument;\n      const rng = createRange$1(doc);\n      const nbsp$1 = doc.createTextNode(nbsp);\n      const parentNode = brNode.parentNode;\n      parentNode.insertBefore(nbsp$1, brNode);\n      rng.setStart(nbsp$1, 0);\n      rng.setEnd(nbsp$1, 1);\n      const clientRect = clone$1(rng.getBoundingClientRect());\n      parentNode.removeChild(nbsp$1);\n      return clientRect;\n    };\n    const getBoundingClientRectWebKitText = rng => {\n      const sc = rng.startContainer;\n      const ec = rng.endContainer;\n      const so = rng.startOffset;\n      const eo = rng.endOffset;\n      if (sc === ec && isText$a(ec) && so === 0 && eo === 1) {\n        const newRng = rng.cloneRange();\n        newRng.setEndAfter(ec);\n        return getBoundingClientRect$1(newRng);\n      } else {\n        return null;\n      }\n    };\n    const isZeroRect = r => r.left === 0 && r.right === 0 && r.top === 0 && r.bottom === 0;\n    const getBoundingClientRect$1 = item => {\n      var _a;\n      let clientRect;\n      const clientRects = item.getClientRects();\n      if (clientRects.length > 0) {\n        clientRect = clone$1(clientRects[0]);\n      } else {\n        clientRect = clone$1(item.getBoundingClientRect());\n      }\n      if (!isRange(item) && isBr$3(item) && isZeroRect(clientRect)) {\n        return getBrClientRect(item);\n      }\n      if (isZeroRect(clientRect) && isRange(item)) {\n        return (_a = getBoundingClientRectWebKitText(item)) !== null && _a !== void 0 ? _a : clientRect;\n      }\n      return clientRect;\n    };\n    const collapseAndInflateWidth = (clientRect, toStart) => {\n      const newClientRect = collapse(clientRect, toStart);\n      newClientRect.width = 1;\n      newClientRect.right = newClientRect.left + 1;\n      return newClientRect;\n    };\n    const getCaretPositionClientRects = caretPosition => {\n      const clientRects = [];\n      const addUniqueAndValidRect = clientRect => {\n        if (clientRect.height === 0) {\n          return;\n        }\n        if (clientRects.length > 0) {\n          if (isEqual(clientRect, clientRects[clientRects.length - 1])) {\n            return;\n          }\n        }\n        clientRects.push(clientRect);\n      };\n      const addCharacterOffset = (container, offset) => {\n        const range = createRange$1(container.ownerDocument);\n        if (offset < container.data.length) {\n          if (isExtendingChar(container.data[offset])) {\n            return;\n          }\n          if (isExtendingChar(container.data[offset - 1])) {\n            range.setStart(container, offset);\n            range.setEnd(container, offset + 1);\n            if (!isHiddenWhiteSpaceRange(range)) {\n              addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), false));\n              return;\n            }\n          }\n        }\n        if (offset > 0) {\n          range.setStart(container, offset - 1);\n          range.setEnd(container, offset);\n          if (!isHiddenWhiteSpaceRange(range)) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), false));\n          }\n        }\n        if (offset < container.data.length) {\n          range.setStart(container, offset);\n          range.setEnd(container, offset + 1);\n          if (!isHiddenWhiteSpaceRange(range)) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), true));\n          }\n        }\n      };\n      const container = caretPosition.container();\n      const offset = caretPosition.offset();\n      if (isText$7(container)) {\n        addCharacterOffset(container, offset);\n        return clientRects;\n      }\n      if (isElement$4(container)) {\n        if (caretPosition.isAtEnd()) {\n          const node = resolveIndex$1(container, offset);\n          if (isText$7(node)) {\n            addCharacterOffset(node, node.data.length);\n          }\n          if (isValidElementCaretCandidate(node) && !isBr$3(node)) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n          }\n        } else {\n          const node = resolveIndex$1(container, offset);\n          if (isText$7(node)) {\n            addCharacterOffset(node, 0);\n          }\n          if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n            return clientRects;\n          }\n          const beforeNode = resolveIndex$1(caretPosition.container(), caretPosition.offset() - 1);\n          if (isValidElementCaretCandidate(beforeNode) && !isBr$3(beforeNode)) {\n            if (isBlock$1(beforeNode) || isBlock$1(node) || !isValidElementCaretCandidate(node)) {\n              addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(beforeNode), false));\n            }\n          }\n          if (isValidElementCaretCandidate(node)) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), true));\n          }\n        }\n      }\n      return clientRects;\n    };\n    const CaretPosition = (container, offset, clientRects) => {\n      const isAtStart = () => {\n        if (isText$7(container)) {\n          return offset === 0;\n        }\n        return offset === 0;\n      };\n      const isAtEnd = () => {\n        if (isText$7(container)) {\n          return offset >= container.data.length;\n        }\n        return offset >= container.childNodes.length;\n      };\n      const toRange = () => {\n        const range = createRange$1(container.ownerDocument);\n        range.setStart(container, offset);\n        range.setEnd(container, offset);\n        return range;\n      };\n      const getClientRects = () => {\n        if (!clientRects) {\n          clientRects = getCaretPositionClientRects(CaretPosition(container, offset));\n        }\n        return clientRects;\n      };\n      const isVisible = () => getClientRects().length > 0;\n      const isEqual = caretPosition => caretPosition && container === caretPosition.container() && offset === caretPosition.offset();\n      const getNode = before => resolveIndex$1(container, before ? offset - 1 : offset);\n      return {\n        container: constant(container),\n        offset: constant(offset),\n        toRange,\n        getClientRects,\n        isVisible,\n        isAtStart,\n        isAtEnd,\n        isEqual,\n        getNode\n      };\n    };\n    CaretPosition.fromRangeStart = range => CaretPosition(range.startContainer, range.startOffset);\n    CaretPosition.fromRangeEnd = range => CaretPosition(range.endContainer, range.endOffset);\n    CaretPosition.after = node => CaretPosition(node.parentNode, nodeIndex$1(node) + 1);\n    CaretPosition.before = node => CaretPosition(node.parentNode, nodeIndex$1(node));\n    CaretPosition.isAbove = (pos1, pos2) => lift2(head(pos2.getClientRects()), last$3(pos1.getClientRects()), isAbove$1).getOr(false);\n    CaretPosition.isBelow = (pos1, pos2) => lift2(last$3(pos2.getClientRects()), head(pos1.getClientRects()), isBelow$1).getOr(false);\n    CaretPosition.isAtStart = pos => pos ? pos.isAtStart() : false;\n    CaretPosition.isAtEnd = pos => pos ? pos.isAtEnd() : false;\n    CaretPosition.isTextPosition = pos => pos ? isText$a(pos.container()) : false;\n    CaretPosition.isElementPosition = pos => !CaretPosition.isTextPosition(pos);\n\n    const trimEmptyTextNode$1 = (dom, node) => {\n      if (isText$a(node) && node.data.length === 0) {\n        dom.remove(node);\n      }\n    };\n    const insertNode = (dom, rng, node) => {\n      rng.insertNode(node);\n      trimEmptyTextNode$1(dom, node.previousSibling);\n      trimEmptyTextNode$1(dom, node.nextSibling);\n    };\n    const insertFragment = (dom, rng, frag) => {\n      const firstChild = Optional.from(frag.firstChild);\n      const lastChild = Optional.from(frag.lastChild);\n      rng.insertNode(frag);\n      firstChild.each(child => trimEmptyTextNode$1(dom, child.previousSibling));\n      lastChild.each(child => trimEmptyTextNode$1(dom, child.nextSibling));\n    };\n    const rangeInsertNode = (dom, rng, node) => {\n      if (isDocumentFragment(node)) {\n        insertFragment(dom, rng, node);\n      } else {\n        insertNode(dom, rng, node);\n      }\n    };\n\n    const isText$6 = isText$a;\n    const isBogus = isBogus$2;\n    const nodeIndex = DOMUtils.nodeIndex;\n    const normalizedParent = node => {\n      const parentNode = node.parentNode;\n      if (isBogus(parentNode)) {\n        return normalizedParent(parentNode);\n      }\n      return parentNode;\n    };\n    const getChildNodes = node => {\n      if (!node) {\n        return [];\n      }\n      return reduce(node.childNodes, (result, node) => {\n        if (isBogus(node) && node.nodeName !== 'BR') {\n          result = result.concat(getChildNodes(node));\n        } else {\n          result.push(node);\n        }\n        return result;\n      }, []);\n    };\n    const normalizedTextOffset = (node, offset) => {\n      let tempNode = node;\n      while (tempNode = tempNode.previousSibling) {\n        if (!isText$6(tempNode)) {\n          break;\n        }\n        offset += tempNode.data.length;\n      }\n      return offset;\n    };\n    const equal = a => b => a === b;\n    const normalizedNodeIndex = node => {\n      let nodes, index;\n      nodes = getChildNodes(normalizedParent(node));\n      index = findIndex$1(nodes, equal(node), node);\n      nodes = nodes.slice(0, index + 1);\n      const numTextFragments = reduce(nodes, (result, node, i) => {\n        if (isText$6(node) && isText$6(nodes[i - 1])) {\n          result++;\n        }\n        return result;\n      }, 0);\n      nodes = filter$3(nodes, matchNodeNames([node.nodeName]));\n      index = findIndex$1(nodes, equal(node), node);\n      return index - numTextFragments;\n    };\n    const createPathItem = node => {\n      const name = isText$6(node) ? 'text()' : node.nodeName.toLowerCase();\n      return name + '[' + normalizedNodeIndex(node) + ']';\n    };\n    const parentsUntil$1 = (root, node, predicate) => {\n      const parents = [];\n      for (let tempNode = node.parentNode; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n        if (predicate && predicate(tempNode)) {\n          break;\n        }\n        parents.push(tempNode);\n      }\n      return parents;\n    };\n    const create$b = (root, caretPosition) => {\n      let path = [];\n      let container = caretPosition.container();\n      let offset = caretPosition.offset();\n      let outputOffset;\n      if (isText$6(container)) {\n        outputOffset = normalizedTextOffset(container, offset);\n      } else {\n        const childNodes = container.childNodes;\n        if (offset >= childNodes.length) {\n          outputOffset = 'after';\n          offset = childNodes.length - 1;\n        } else {\n          outputOffset = 'before';\n        }\n        container = childNodes[offset];\n      }\n      path.push(createPathItem(container));\n      let parents = parentsUntil$1(root, container);\n      parents = filter$3(parents, not(isBogus$2));\n      path = path.concat(map$1(parents, node => {\n        return createPathItem(node);\n      }));\n      return path.reverse().join('/') + ',' + outputOffset;\n    };\n    const resolvePathItem = (node, name, index) => {\n      let nodes = getChildNodes(node);\n      nodes = filter$3(nodes, (node, index) => {\n        return !isText$6(node) || !isText$6(nodes[index - 1]);\n      });\n      nodes = filter$3(nodes, matchNodeNames([name]));\n      return nodes[index];\n    };\n    const findTextPosition = (container, offset) => {\n      let node = container;\n      let targetOffset = 0;\n      while (isText$6(node)) {\n        const dataLen = node.data.length;\n        if (offset >= targetOffset && offset <= targetOffset + dataLen) {\n          container = node;\n          offset = offset - targetOffset;\n          break;\n        }\n        if (!isText$6(node.nextSibling)) {\n          container = node;\n          offset = dataLen;\n          break;\n        }\n        targetOffset += dataLen;\n        node = node.nextSibling;\n      }\n      if (isText$6(container) && offset > container.data.length) {\n        offset = container.data.length;\n      }\n      return CaretPosition(container, offset);\n    };\n    const resolve$1 = (root, path) => {\n      if (!path) {\n        return null;\n      }\n      const parts = path.split(',');\n      const paths = parts[0].split('/');\n      const offset = parts.length > 1 ? parts[1] : 'before';\n      const container = reduce(paths, (result, value) => {\n        const match = /([\\w\\-\\(\\)]+)\\[([0-9]+)\\]/.exec(value);\n        if (!match) {\n          return null;\n        }\n        if (match[1] === 'text()') {\n          match[1] = '#text';\n        }\n        return resolvePathItem(result, match[1], parseInt(match[2], 10));\n      }, root);\n      if (!container) {\n        return null;\n      }\n      if (!isText$6(container) && container.parentNode) {\n        let nodeOffset;\n        if (offset === 'after') {\n          nodeOffset = nodeIndex(container) + 1;\n        } else {\n          nodeOffset = nodeIndex(container);\n        }\n        return CaretPosition(container.parentNode, nodeOffset);\n      }\n      return findTextPosition(container, parseInt(offset, 10));\n    };\n\n    const isContentEditableFalse$9 = isContentEditableFalse$b;\n    const getNormalizedTextOffset$1 = (trim, container, offset) => {\n      let trimmedOffset = trim(container.data.slice(0, offset)).length;\n      for (let node = container.previousSibling; node && isText$a(node); node = node.previousSibling) {\n        trimmedOffset += trim(node.data).length;\n      }\n      return trimmedOffset;\n    };\n    const getPoint = (dom, trim, normalized, rng, start) => {\n      const container = start ? rng.startContainer : rng.endContainer;\n      let offset = start ? rng.startOffset : rng.endOffset;\n      const point = [];\n      const root = dom.getRoot();\n      if (isText$a(container)) {\n        point.push(normalized ? getNormalizedTextOffset$1(trim, container, offset) : offset);\n      } else {\n        let after = 0;\n        const childNodes = container.childNodes;\n        if (offset >= childNodes.length && childNodes.length) {\n          after = 1;\n          offset = Math.max(0, childNodes.length - 1);\n        }\n        point.push(dom.nodeIndex(childNodes[offset], normalized) + after);\n      }\n      for (let node = container; node && node !== root; node = node.parentNode) {\n        point.push(dom.nodeIndex(node, normalized));\n      }\n      return point;\n    };\n    const getLocation = (trim, selection, normalized, rng) => {\n      const dom = selection.dom;\n      const start = getPoint(dom, trim, normalized, rng, true);\n      const forward = selection.isForward();\n      const fakeCaret = isRangeInCaretContainerBlock(rng) ? { isFakeCaret: true } : {};\n      if (!selection.isCollapsed()) {\n        const end = getPoint(dom, trim, normalized, rng, false);\n        return {\n          start,\n          end,\n          forward,\n          ...fakeCaret\n        };\n      } else {\n        return {\n          start,\n          forward,\n          ...fakeCaret\n        };\n      }\n    };\n    const findIndex = (dom, name, element) => {\n      let count = 0;\n      Tools.each(dom.select(name), node => {\n        if (node.getAttribute('data-mce-bogus') === 'all') {\n          return;\n        } else if (node === element) {\n          return false;\n        } else {\n          count++;\n          return;\n        }\n      });\n      return count;\n    };\n    const moveEndPoint$1 = (rng, start) => {\n      let container = start ? rng.startContainer : rng.endContainer;\n      let offset = start ? rng.startOffset : rng.endOffset;\n      if (isElement$6(container) && container.nodeName === 'TR') {\n        const childNodes = container.childNodes;\n        container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)];\n        if (container) {\n          offset = start ? 0 : container.childNodes.length;\n          if (start) {\n            rng.setStart(container, offset);\n          } else {\n            rng.setEnd(container, offset);\n          }\n        }\n      }\n    };\n    const normalizeTableCellSelection = rng => {\n      moveEndPoint$1(rng, true);\n      moveEndPoint$1(rng, false);\n      return rng;\n    };\n    const findSibling = (node, offset) => {\n      if (isElement$6(node)) {\n        node = getNode$1(node, offset);\n        if (isContentEditableFalse$9(node)) {\n          return node;\n        }\n      }\n      if (isCaretContainer$2(node)) {\n        if (isText$a(node) && isCaretContainerBlock$1(node)) {\n          node = node.parentNode;\n        }\n        let sibling = node.previousSibling;\n        if (isContentEditableFalse$9(sibling)) {\n          return sibling;\n        }\n        sibling = node.nextSibling;\n        if (isContentEditableFalse$9(sibling)) {\n          return sibling;\n        }\n      }\n      return undefined;\n    };\n    const findAdjacentContentEditableFalseElm = rng => {\n      return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset);\n    };\n    const getOffsetBookmark = (trim, normalized, selection) => {\n      const element = selection.getNode();\n      const rng = selection.getRng();\n      if (element.nodeName === 'IMG' || isContentEditableFalse$9(element)) {\n        const name = element.nodeName;\n        return {\n          name,\n          index: findIndex(selection.dom, name, element)\n        };\n      }\n      const sibling = findAdjacentContentEditableFalseElm(rng);\n      if (sibling) {\n        const name = sibling.tagName;\n        return {\n          name,\n          index: findIndex(selection.dom, name, sibling)\n        };\n      }\n      return getLocation(trim, selection, normalized, rng);\n    };\n    const getCaretBookmark = selection => {\n      const rng = selection.getRng();\n      return {\n        start: create$b(selection.dom.getRoot(), CaretPosition.fromRangeStart(rng)),\n        end: create$b(selection.dom.getRoot(), CaretPosition.fromRangeEnd(rng)),\n        forward: selection.isForward()\n      };\n    };\n    const getRangeBookmark = selection => {\n      return {\n        rng: selection.getRng(),\n        forward: selection.isForward()\n      };\n    };\n    const createBookmarkSpan = (dom, id, filled) => {\n      const args = {\n        'data-mce-type': 'bookmark',\n        id,\n        'style': 'overflow:hidden;line-height:0px'\n      };\n      return filled ? dom.create('span', args, '&#xFEFF;') : dom.create('span', args);\n    };\n    const getPersistentBookmark = (selection, filled) => {\n      const dom = selection.dom;\n      let rng = selection.getRng();\n      const id = dom.uniqueId();\n      const collapsed = selection.isCollapsed();\n      const element = selection.getNode();\n      const name = element.nodeName;\n      const forward = selection.isForward();\n      if (name === 'IMG') {\n        return {\n          name,\n          index: findIndex(dom, name, element)\n        };\n      }\n      const rng2 = normalizeTableCellSelection(rng.cloneRange());\n      if (!collapsed) {\n        rng2.collapse(false);\n        const endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);\n        rangeInsertNode(dom, rng2, endBookmarkNode);\n      }\n      rng = normalizeTableCellSelection(rng);\n      rng.collapse(true);\n      const startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);\n      rangeInsertNode(dom, rng, startBookmarkNode);\n      selection.moveToBookmark({\n        id,\n        keep: true,\n        forward\n      });\n      return {\n        id,\n        forward\n      };\n    };\n    const getBookmark$2 = (selection, type, normalized = false) => {\n      if (type === 2) {\n        return getOffsetBookmark(trim$1, normalized, selection);\n      } else if (type === 3) {\n        return getCaretBookmark(selection);\n      } else if (type) {\n        return getRangeBookmark(selection);\n      } else {\n        return getPersistentBookmark(selection, false);\n      }\n    };\n    const getUndoBookmark = curry(getOffsetBookmark, identity, true);\n\n    const value$1 = value => {\n      const applyHelper = fn => fn(value);\n      const constHelper = constant(value);\n      const outputHelper = () => output;\n      const output = {\n        tag: true,\n        inner: value,\n        fold: (_onError, onValue) => onValue(value),\n        isValue: always,\n        isError: never,\n        map: mapper => Result.value(mapper(value)),\n        mapError: outputHelper,\n        bind: applyHelper,\n        exists: applyHelper,\n        forall: applyHelper,\n        getOr: constHelper,\n        or: outputHelper,\n        getOrThunk: constHelper,\n        orThunk: outputHelper,\n        getOrDie: constHelper,\n        each: fn => {\n          fn(value);\n        },\n        toOptional: () => Optional.some(value)\n      };\n      return output;\n    };\n    const error = error => {\n      const outputHelper = () => output;\n      const output = {\n        tag: false,\n        inner: error,\n        fold: (onError, _onValue) => onError(error),\n        isValue: never,\n        isError: always,\n        map: outputHelper,\n        mapError: mapper => Result.error(mapper(error)),\n        bind: outputHelper,\n        exists: never,\n        forall: always,\n        getOr: identity,\n        or: identity,\n        getOrThunk: apply$1,\n        orThunk: apply$1,\n        getOrDie: die(String(error)),\n        each: noop,\n        toOptional: Optional.none\n      };\n      return output;\n    };\n    const fromOption = (optional, err) => optional.fold(() => error(err), value$1);\n    const Result = {\n      value: value$1,\n      error,\n      fromOption\n    };\n\n    const generate = cases => {\n      if (!isArray$1(cases)) {\n        throw new Error('cases must be an array');\n      }\n      if (cases.length === 0) {\n        throw new Error('there must be at least one case');\n      }\n      const constructors = [];\n      const adt = {};\n      each$e(cases, (acase, count) => {\n        const keys$1 = keys(acase);\n        if (keys$1.length !== 1) {\n          throw new Error('one and only one name per case');\n        }\n        const key = keys$1[0];\n        const value = acase[key];\n        if (adt[key] !== undefined) {\n          throw new Error('duplicate key detected:' + key);\n        } else if (key === 'cata') {\n          throw new Error('cannot have a case named cata (sorry)');\n        } else if (!isArray$1(value)) {\n          throw new Error('case arguments must be an array');\n        }\n        constructors.push(key);\n        adt[key] = (...args) => {\n          const argLength = args.length;\n          if (argLength !== value.length) {\n            throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n          }\n          const match = branches => {\n            const branchKeys = keys(branches);\n            if (constructors.length !== branchKeys.length) {\n              throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n            }\n            const allReqd = forall(constructors, reqKey => {\n              return contains$2(branchKeys, reqKey);\n            });\n            if (!allReqd) {\n              throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n            }\n            return branches[key].apply(null, args);\n          };\n          return {\n            fold: (...foldArgs) => {\n              if (foldArgs.length !== cases.length) {\n                throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n              }\n              const target = foldArgs[count];\n              return target.apply(null, args);\n            },\n            match,\n            log: label => {\n              console.log(label, {\n                constructors,\n                constructor: key,\n                params: args\n              });\n            }\n          };\n        };\n      });\n      return adt;\n    };\n    const Adt = { generate };\n\n    Adt.generate([\n      {\n        bothErrors: [\n          'error1',\n          'error2'\n        ]\n      },\n      {\n        firstError: [\n          'error1',\n          'value2'\n        ]\n      },\n      {\n        secondError: [\n          'value1',\n          'error2'\n        ]\n      },\n      {\n        bothValues: [\n          'value1',\n          'value2'\n        ]\n      }\n    ]);\n    const partition$1 = results => {\n      const errors = [];\n      const values = [];\n      each$e(results, result => {\n        result.fold(err => {\n          errors.push(err);\n        }, value => {\n          values.push(value);\n        });\n      });\n      return {\n        errors,\n        values\n      };\n    };\n\n    const isInlinePattern = pattern => pattern.type === 'inline-command' || pattern.type === 'inline-format';\n    const isBlockPattern = pattern => pattern.type === 'block-command' || pattern.type === 'block-format';\n    const normalizePattern = pattern => {\n      const err = message => Result.error({\n        message,\n        pattern\n      });\n      const formatOrCmd = (name, onFormat, onCommand) => {\n        if (pattern.format !== undefined) {\n          let formats;\n          if (isArray$1(pattern.format)) {\n            if (!forall(pattern.format, isString)) {\n              return err(name + ' pattern has non-string items in the `format` array');\n            }\n            formats = pattern.format;\n          } else if (isString(pattern.format)) {\n            formats = [pattern.format];\n          } else {\n            return err(name + ' pattern has non-string `format` parameter');\n          }\n          return Result.value(onFormat(formats));\n        } else if (pattern.cmd !== undefined) {\n          if (!isString(pattern.cmd)) {\n            return err(name + ' pattern has non-string `cmd` parameter');\n          }\n          return Result.value(onCommand(pattern.cmd, pattern.value));\n        } else {\n          return err(name + ' pattern is missing both `format` and `cmd` parameters');\n        }\n      };\n      if (!isObject(pattern)) {\n        return err('Raw pattern is not an object');\n      }\n      if (!isString(pattern.start)) {\n        return err('Raw pattern is missing `start` parameter');\n      }\n      if (pattern.end !== undefined) {\n        if (!isString(pattern.end)) {\n          return err('Inline pattern has non-string `end` parameter');\n        }\n        if (pattern.start.length === 0 && pattern.end.length === 0) {\n          return err('Inline pattern has empty `start` and `end` parameters');\n        }\n        let start = pattern.start;\n        let end = pattern.end;\n        if (end.length === 0) {\n          end = start;\n          start = '';\n        }\n        return formatOrCmd('Inline', format => ({\n          type: 'inline-format',\n          start,\n          end,\n          format\n        }), (cmd, value) => ({\n          type: 'inline-command',\n          start,\n          end,\n          cmd,\n          value\n        }));\n      } else if (pattern.replacement !== undefined) {\n        if (!isString(pattern.replacement)) {\n          return err('Replacement pattern has non-string `replacement` parameter');\n        }\n        if (pattern.start.length === 0) {\n          return err('Replacement pattern has empty `start` parameter');\n        }\n        return Result.value({\n          type: 'inline-command',\n          start: '',\n          end: pattern.start,\n          cmd: 'mceInsertContent',\n          value: pattern.replacement\n        });\n      } else {\n        if (pattern.start.length === 0) {\n          return err('Block pattern has empty `start` parameter');\n        }\n        return formatOrCmd('Block', formats => ({\n          type: 'block-format',\n          start: pattern.start,\n          format: formats[0]\n        }), (command, commandValue) => ({\n          type: 'block-command',\n          start: pattern.start,\n          cmd: command,\n          value: commandValue\n        }));\n      }\n    };\n    const getBlockPatterns = patterns => filter$5(patterns, isBlockPattern);\n    const getInlinePatterns = patterns => filter$5(patterns, isInlinePattern);\n    const createPatternSet = (patterns, dynamicPatternsLookup) => ({\n      inlinePatterns: getInlinePatterns(patterns),\n      blockPatterns: getBlockPatterns(patterns),\n      dynamicPatternsLookup\n    });\n    const fromRawPatterns = patterns => {\n      const normalized = partition$1(map$3(patterns, normalizePattern));\n      each$e(normalized.errors, err => console.error(err.message, err.pattern));\n      return normalized.values;\n    };\n    const fromRawPatternsLookup = lookupFn => {\n      return ctx => {\n        const rawPatterns = lookupFn(ctx);\n        return fromRawPatterns(rawPatterns);\n      };\n    };\n\n    const deviceDetection$1 = detect$2().deviceType;\n    const isTouch = deviceDetection$1.isTouch();\n    const DOM$a = DOMUtils.DOM;\n    const getHash = value => {\n      const items = value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(',');\n      return foldl(items, (output, item) => {\n        const arr = item.split('=');\n        const key = arr[0];\n        const val = arr.length > 1 ? arr[1] : key;\n        output[trim$3(key)] = trim$3(val);\n        return output;\n      }, {});\n    };\n    const isRegExp = x => is$4(x, RegExp);\n    const option = name => editor => editor.options.get(name);\n    const stringOrObjectProcessor = value => isString(value) || isObject(value);\n    const bodyOptionProcessor = (editor, defaultValue = '') => value => {\n      const valid = isString(value);\n      if (valid) {\n        if (value.indexOf('=') !== -1) {\n          const bodyObj = getHash(value);\n          return {\n            value: get$a(bodyObj, editor.id).getOr(defaultValue),\n            valid\n          };\n        } else {\n          return {\n            value,\n            valid\n          };\n        }\n      } else {\n        return {\n          valid: false,\n          message: 'Must be a string.'\n        };\n      }\n    };\n    const register$7 = editor => {\n      const registerOption = editor.options.register;\n      registerOption('id', {\n        processor: 'string',\n        default: editor.id\n      });\n      registerOption('selector', { processor: 'string' });\n      registerOption('target', { processor: 'object' });\n      registerOption('suffix', { processor: 'string' });\n      registerOption('cache_suffix', { processor: 'string' });\n      registerOption('base_url', { processor: 'string' });\n      registerOption('referrer_policy', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('language_load', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('inline', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('iframe_attrs', {\n        processor: 'object',\n        default: {}\n      });\n      registerOption('doctype', {\n        processor: 'string',\n        default: '<!DOCTYPE html>'\n      });\n      registerOption('document_base_url', {\n        processor: 'string',\n        default: editor.documentBaseUrl\n      });\n      registerOption('body_id', {\n        processor: bodyOptionProcessor(editor, 'tinymce'),\n        default: 'tinymce'\n      });\n      registerOption('body_class', {\n        processor: bodyOptionProcessor(editor),\n        default: ''\n      });\n      registerOption('content_security_policy', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('br_in_pre', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('forced_root_block', {\n        processor: value => {\n          const valid = isString(value) && isNotEmpty(value);\n          if (valid) {\n            return {\n              value,\n              valid\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be a non-empty string.'\n            };\n          }\n        },\n        default: 'p'\n      });\n      registerOption('forced_root_block_attrs', {\n        processor: 'object',\n        default: {}\n      });\n      registerOption('newline_behavior', {\n        processor: value => {\n          const valid = contains$2([\n            'block',\n            'linebreak',\n            'invert',\n            'default'\n          ], value);\n          return valid ? {\n            value,\n            valid\n          } : {\n            valid: false,\n            message: 'Must be one of: block, linebreak, invert or default.'\n          };\n        },\n        default: 'default'\n      });\n      registerOption('br_newline_selector', {\n        processor: 'string',\n        default: '.mce-toc h2,figcaption,caption'\n      });\n      registerOption('no_newline_selector', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('keep_styles', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('end_container_on_empty_block', {\n        processor: value => {\n          if (isBoolean(value)) {\n            return {\n              valid: true,\n              value\n            };\n          } else if (isString(value)) {\n            return {\n              valid: true,\n              value\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be boolean or a string'\n            };\n          }\n        },\n        default: 'blockquote'\n      });\n      registerOption('font_size_style_values', {\n        processor: 'string',\n        default: 'xx-small,x-small,small,medium,large,x-large,xx-large'\n      });\n      registerOption('font_size_legacy_values', {\n        processor: 'string',\n        default: 'xx-small,small,medium,large,x-large,xx-large,300%'\n      });\n      registerOption('font_size_classes', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('automatic_uploads', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('images_reuse_filename', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('images_replace_blob_uris', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('icons', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('icons_url', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('images_upload_url', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('images_upload_base_path', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('images_upload_credentials', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('images_upload_handler', { processor: 'function' });\n      registerOption('language', {\n        processor: 'string',\n        default: 'en'\n      });\n      registerOption('language_url', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('entity_encoding', {\n        processor: 'string',\n        default: 'named'\n      });\n      registerOption('indent', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('indent_before', {\n        processor: 'string',\n        default: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,details,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist'\n      });\n      registerOption('indent_after', {\n        processor: 'string',\n        default: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,details,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist'\n      });\n      registerOption('indent_use_margin', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('indentation', {\n        processor: 'string',\n        default: '40px'\n      });\n      registerOption('content_css', {\n        processor: value => {\n          const valid = value === false || isString(value) || isArrayOf(value, isString);\n          if (valid) {\n            if (isString(value)) {\n              return {\n                value: map$3(value.split(','), trim$3),\n                valid\n              };\n            } else if (isArray$1(value)) {\n              return {\n                value,\n                valid\n              };\n            } else if (value === false) {\n              return {\n                value: [],\n                valid\n              };\n            } else {\n              return {\n                value,\n                valid\n              };\n            }\n          } else {\n            return {\n              valid: false,\n              message: 'Must be false, a string or an array of strings.'\n            };\n          }\n        },\n        default: isInline(editor) ? [] : ['default']\n      });\n      registerOption('content_style', { processor: 'string' });\n      registerOption('content_css_cors', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('font_css', {\n        processor: value => {\n          const valid = isString(value) || isArrayOf(value, isString);\n          if (valid) {\n            const newValue = isArray$1(value) ? value : map$3(value.split(','), trim$3);\n            return {\n              value: newValue,\n              valid\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be a string or an array of strings.'\n            };\n          }\n        },\n        default: []\n      });\n      registerOption('inline_boundaries', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('inline_boundaries_selector', {\n        processor: 'string',\n        default: 'a[href],code,span.mce-annotation'\n      });\n      registerOption('object_resizing', {\n        processor: value => {\n          const valid = isBoolean(value) || isString(value);\n          if (valid) {\n            if (value === false || deviceDetection$1.isiPhone() || deviceDetection$1.isiPad()) {\n              return {\n                value: '',\n                valid\n              };\n            } else {\n              return {\n                value: value === true ? 'table,img,figure.image,div,video,iframe' : value,\n                valid\n              };\n            }\n          } else {\n            return {\n              valid: false,\n              message: 'Must be boolean or a string'\n            };\n          }\n        },\n        default: !isTouch\n      });\n      registerOption('resize_img_proportional', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('event_root', { processor: 'object' });\n      registerOption('service_message', { processor: 'string' });\n      registerOption('theme', {\n        processor: value => value === false || isString(value) || isFunction(value),\n        default: 'silver'\n      });\n      registerOption('theme_url', { processor: 'string' });\n      registerOption('formats', { processor: 'object' });\n      registerOption('format_empty_lines', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('format_noneditable_selector', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('preview_styles', {\n        processor: value => {\n          const valid = value === false || isString(value);\n          if (valid) {\n            return {\n              value: value === false ? '' : value,\n              valid\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be false or a string'\n            };\n          }\n        },\n        default: 'font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow'\n      });\n      registerOption('custom_ui_selector', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('hidden_input', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('submit_patch', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('encoding', { processor: 'string' });\n      registerOption('add_form_submit_trigger', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('add_unload_trigger', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('custom_undo_redo_levels', {\n        processor: 'number',\n        default: 0\n      });\n      registerOption('disable_nodechange', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('readonly', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('editable_root', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('plugins', {\n        processor: 'string[]',\n        default: []\n      });\n      registerOption('external_plugins', { processor: 'object' });\n      registerOption('forced_plugins', { processor: 'string[]' });\n      registerOption('model', {\n        processor: 'string',\n        default: editor.hasPlugin('rtc') ? 'plugin' : 'dom'\n      });\n      registerOption('model_url', { processor: 'string' });\n      registerOption('block_unsupported_drop', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('visual', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('visual_table_class', {\n        processor: 'string',\n        default: 'mce-item-table'\n      });\n      registerOption('visual_anchor_class', {\n        processor: 'string',\n        default: 'mce-item-anchor'\n      });\n      registerOption('iframe_aria_text', {\n        processor: 'string',\n        default: 'Rich Text Area. Press ALT-0 for help.'\n      });\n      registerOption('setup', { processor: 'function' });\n      registerOption('init_instance_callback', { processor: 'function' });\n      registerOption('url_converter', {\n        processor: 'function',\n        default: editor.convertURL\n      });\n      registerOption('url_converter_scope', {\n        processor: 'object',\n        default: editor\n      });\n      registerOption('urlconverter_callback', { processor: 'function' });\n      registerOption('allow_conditional_comments', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('allow_html_data_urls', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('allow_svg_data_urls', { processor: 'boolean' });\n      registerOption('allow_html_in_named_anchor', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('allow_script_urls', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('allow_unsafe_link_target', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('convert_fonts_to_spans', {\n        processor: 'boolean',\n        default: true,\n        deprecated: true\n      });\n      registerOption('fix_list_elements', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('preserve_cdata', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('remove_trailing_brs', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('inline_styles', {\n        processor: 'boolean',\n        default: true,\n        deprecated: true\n      });\n      registerOption('element_format', {\n        processor: 'string',\n        default: 'html'\n      });\n      registerOption('entities', { processor: 'string' });\n      registerOption('schema', {\n        processor: 'string',\n        default: 'html5'\n      });\n      registerOption('convert_urls', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('relative_urls', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('remove_script_host', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('custom_elements', { processor: 'string' });\n      registerOption('extended_valid_elements', { processor: 'string' });\n      registerOption('invalid_elements', { processor: 'string' });\n      registerOption('invalid_styles', { processor: stringOrObjectProcessor });\n      registerOption('valid_children', { processor: 'string' });\n      registerOption('valid_classes', { processor: stringOrObjectProcessor });\n      registerOption('valid_elements', { processor: 'string' });\n      registerOption('valid_styles', { processor: stringOrObjectProcessor });\n      registerOption('verify_html', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('auto_focus', { processor: value => isString(value) || value === true });\n      registerOption('browser_spellcheck', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('protect', { processor: 'array' });\n      registerOption('images_file_types', {\n        processor: 'string',\n        default: 'jpeg,jpg,jpe,jfi,jif,jfif,png,gif,bmp,webp'\n      });\n      registerOption('deprecation_warnings', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('a11y_advanced_options', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('api_key', { processor: 'string' });\n      registerOption('paste_block_drop', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('paste_data_images', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('paste_preprocess', { processor: 'function' });\n      registerOption('paste_postprocess', { processor: 'function' });\n      registerOption('paste_webkit_styles', {\n        processor: 'string',\n        default: 'none'\n      });\n      registerOption('paste_remove_styles_if_webkit', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('paste_merge_formats', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('smart_paste', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('paste_as_text', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('paste_tab_spaces', {\n        processor: 'number',\n        default: 4\n      });\n      registerOption('text_patterns', {\n        processor: value => {\n          if (isArrayOf(value, isObject) || value === false) {\n            const patterns = value === false ? [] : value;\n            return {\n              value: fromRawPatterns(patterns),\n              valid: true\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be an array of objects or false.'\n            };\n          }\n        },\n        default: [\n          {\n            start: '*',\n            end: '*',\n            format: 'italic'\n          },\n          {\n            start: '**',\n            end: '**',\n            format: 'bold'\n          },\n          {\n            start: '#',\n            format: 'h1'\n          },\n          {\n            start: '##',\n            format: 'h2'\n          },\n          {\n            start: '###',\n            format: 'h3'\n          },\n          {\n            start: '####',\n            format: 'h4'\n          },\n          {\n            start: '#####',\n            format: 'h5'\n          },\n          {\n            start: '######',\n            format: 'h6'\n          },\n          {\n            start: '1. ',\n            cmd: 'InsertOrderedList'\n          },\n          {\n            start: '* ',\n            cmd: 'InsertUnorderedList'\n          },\n          {\n            start: '- ',\n            cmd: 'InsertUnorderedList'\n          }\n        ]\n      });\n      registerOption('text_patterns_lookup', {\n        processor: value => {\n          if (isFunction(value)) {\n            return {\n              value: fromRawPatternsLookup(value),\n              valid: true\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be a single function'\n            };\n          }\n        },\n        default: _ctx => []\n      });\n      registerOption('noneditable_class', {\n        processor: 'string',\n        default: 'mceNonEditable'\n      });\n      registerOption('editable_class', {\n        processor: 'string',\n        default: 'mceEditable'\n      });\n      registerOption('noneditable_regexp', {\n        processor: value => {\n          if (isArrayOf(value, isRegExp)) {\n            return {\n              value,\n              valid: true\n            };\n          } else if (isRegExp(value)) {\n            return {\n              value: [value],\n              valid: true\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be a RegExp or an array of RegExp.'\n            };\n          }\n        },\n        default: []\n      });\n      registerOption('table_tab_navigation', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('highlight_on_focus', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('xss_sanitization', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('details_initial_state', {\n        processor: value => {\n          const valid = contains$2([\n            'inherited',\n            'collapsed',\n            'expanded'\n          ], value);\n          return valid ? {\n            value,\n            valid\n          } : {\n            valid: false,\n            message: 'Must be one of: inherited, collapsed, or expanded.'\n          };\n        },\n        default: 'inherited'\n      });\n      registerOption('details_serialized_state', {\n        processor: value => {\n          const valid = contains$2([\n            'inherited',\n            'collapsed',\n            'expanded'\n          ], value);\n          return valid ? {\n            value,\n            valid\n          } : {\n            valid: false,\n            message: 'Must be one of: inherited, collapsed, or expanded.'\n          };\n        },\n        default: 'inherited'\n      });\n      registerOption('init_content_sync', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('newdocument_content', {\n        processor: 'string',\n        default: ''\n      });\n      editor.on('ScriptsLoaded', () => {\n        registerOption('directionality', {\n          processor: 'string',\n          default: I18n.isRtl() ? 'rtl' : undefined\n        });\n        registerOption('placeholder', {\n          processor: 'string',\n          default: DOM$a.getAttrib(editor.getElement(), 'placeholder')\n        });\n      });\n    };\n    const getIframeAttrs = option('iframe_attrs');\n    const getDocType = option('doctype');\n    const getDocumentBaseUrl = option('document_base_url');\n    const getBodyId = option('body_id');\n    const getBodyClass = option('body_class');\n    const getContentSecurityPolicy = option('content_security_policy');\n    const shouldPutBrInPre$1 = option('br_in_pre');\n    const getForcedRootBlock = option('forced_root_block');\n    const getForcedRootBlockAttrs = option('forced_root_block_attrs');\n    const getNewlineBehavior = option('newline_behavior');\n    const getBrNewLineSelector = option('br_newline_selector');\n    const getNoNewLineSelector = option('no_newline_selector');\n    const shouldKeepStyles = option('keep_styles');\n    const shouldEndContainerOnEmptyBlock = option('end_container_on_empty_block');\n    const isAutomaticUploadsEnabled = option('automatic_uploads');\n    const shouldReuseFileName = option('images_reuse_filename');\n    const shouldReplaceBlobUris = option('images_replace_blob_uris');\n    const getIconPackName = option('icons');\n    const getIconsUrl = option('icons_url');\n    const getImageUploadUrl = option('images_upload_url');\n    const getImageUploadBasePath = option('images_upload_base_path');\n    const getImagesUploadCredentials = option('images_upload_credentials');\n    const getImagesUploadHandler = option('images_upload_handler');\n    const shouldUseContentCssCors = option('content_css_cors');\n    const getReferrerPolicy = option('referrer_policy');\n    const getLanguageCode = option('language');\n    const getLanguageUrl = option('language_url');\n    const shouldIndentUseMargin = option('indent_use_margin');\n    const getIndentation = option('indentation');\n    const getContentCss = option('content_css');\n    const getContentStyle = option('content_style');\n    const getFontCss = option('font_css');\n    const getDirectionality = option('directionality');\n    const getInlineBoundarySelector = option('inline_boundaries_selector');\n    const getObjectResizing = option('object_resizing');\n    const getResizeImgProportional = option('resize_img_proportional');\n    const getPlaceholder = option('placeholder');\n    const getEventRoot = option('event_root');\n    const getServiceMessage = option('service_message');\n    const getTheme = option('theme');\n    const getThemeUrl = option('theme_url');\n    const getModel = option('model');\n    const getModelUrl = option('model_url');\n    const isInlineBoundariesEnabled = option('inline_boundaries');\n    const getFormats = option('formats');\n    const getPreviewStyles = option('preview_styles');\n    const canFormatEmptyLines = option('format_empty_lines');\n    const getFormatNoneditableSelector = option('format_noneditable_selector');\n    const getCustomUiSelector = option('custom_ui_selector');\n    const isInline = option('inline');\n    const hasHiddenInput = option('hidden_input');\n    const shouldPatchSubmit = option('submit_patch');\n    const shouldAddFormSubmitTrigger = option('add_form_submit_trigger');\n    const shouldAddUnloadTrigger = option('add_unload_trigger');\n    const getCustomUndoRedoLevels = option('custom_undo_redo_levels');\n    const shouldDisableNodeChange = option('disable_nodechange');\n    const isReadOnly$1 = option('readonly');\n    const hasEditableRoot$1 = option('editable_root');\n    const hasContentCssCors = option('content_css_cors');\n    const getPlugins = option('plugins');\n    const getExternalPlugins$1 = option('external_plugins');\n    const shouldBlockUnsupportedDrop = option('block_unsupported_drop');\n    const isVisualAidsEnabled = option('visual');\n    const getVisualAidsTableClass = option('visual_table_class');\n    const getVisualAidsAnchorClass = option('visual_anchor_class');\n    const getIframeAriaText = option('iframe_aria_text');\n    const getSetupCallback = option('setup');\n    const getInitInstanceCallback = option('init_instance_callback');\n    const getUrlConverterCallback = option('urlconverter_callback');\n    const getAutoFocus = option('auto_focus');\n    const shouldBrowserSpellcheck = option('browser_spellcheck');\n    const getProtect = option('protect');\n    const shouldPasteBlockDrop = option('paste_block_drop');\n    const shouldPasteDataImages = option('paste_data_images');\n    const getPastePreProcess = option('paste_preprocess');\n    const getPastePostProcess = option('paste_postprocess');\n    const getNewDocumentContent = option('newdocument_content');\n    const getPasteWebkitStyles = option('paste_webkit_styles');\n    const shouldPasteRemoveWebKitStyles = option('paste_remove_styles_if_webkit');\n    const shouldPasteMergeFormats = option('paste_merge_formats');\n    const isSmartPasteEnabled = option('smart_paste');\n    const isPasteAsTextEnabled = option('paste_as_text');\n    const getPasteTabSpaces = option('paste_tab_spaces');\n    const shouldAllowHtmlDataUrls = option('allow_html_data_urls');\n    const getTextPatterns = option('text_patterns');\n    const getTextPatternsLookup = option('text_patterns_lookup');\n    const getNonEditableClass = option('noneditable_class');\n    const getEditableClass = option('editable_class');\n    const getNonEditableRegExps = option('noneditable_regexp');\n    const shouldPreserveCData = option('preserve_cdata');\n    const shouldHighlightOnFocus = option('highlight_on_focus');\n    const shouldSanitizeXss = option('xss_sanitization');\n    const shouldUseDocumentWrite = option('init_content_sync');\n    const hasTextPatternsLookup = editor => editor.options.isSet('text_patterns_lookup');\n    const getFontStyleValues = editor => Tools.explode(editor.options.get('font_size_style_values'));\n    const getFontSizeClasses = editor => Tools.explode(editor.options.get('font_size_classes'));\n    const isEncodingXml = editor => editor.options.get('encoding') === 'xml';\n    const getAllowedImageFileTypes = editor => Tools.explode(editor.options.get('images_file_types'));\n    const hasTableTabNavigation = option('table_tab_navigation');\n    const getDetailsInitialState = option('details_initial_state');\n    const getDetailsSerializedState = option('details_serialized_state');\n\n    const isElement$3 = isElement$6;\n    const isText$5 = isText$a;\n    const removeNode$1 = node => {\n      const parentNode = node.parentNode;\n      if (parentNode) {\n        parentNode.removeChild(node);\n      }\n    };\n    const trimCount = text => {\n      const trimmedText = trim$1(text);\n      return {\n        count: text.length - trimmedText.length,\n        text: trimmedText\n      };\n    };\n    const deleteZwspChars = caretContainer => {\n      let idx;\n      while ((idx = caretContainer.data.lastIndexOf(ZWSP$1)) !== -1) {\n        caretContainer.deleteData(idx, 1);\n      }\n    };\n    const removeUnchanged = (caretContainer, pos) => {\n      remove$3(caretContainer);\n      return pos;\n    };\n    const removeTextAndReposition = (caretContainer, pos) => {\n      const before = trimCount(caretContainer.data.substr(0, pos.offset()));\n      const after = trimCount(caretContainer.data.substr(pos.offset()));\n      const text = before.text + after.text;\n      if (text.length > 0) {\n        deleteZwspChars(caretContainer);\n        return CaretPosition(caretContainer, pos.offset() - before.count);\n      } else {\n        return pos;\n      }\n    };\n    const removeElementAndReposition = (caretContainer, pos) => {\n      const parentNode = pos.container();\n      const newPosition = indexOf$1(from(parentNode.childNodes), caretContainer).map(index => {\n        return index < pos.offset() ? CaretPosition(parentNode, pos.offset() - 1) : pos;\n      }).getOr(pos);\n      remove$3(caretContainer);\n      return newPosition;\n    };\n    const removeTextCaretContainer = (caretContainer, pos) => isText$5(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n    const removeElementCaretContainer = (caretContainer, pos) => pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n    const removeAndReposition = (container, pos) => CaretPosition.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);\n    const remove$3 = caretContainerNode => {\n      if (isElement$3(caretContainerNode) && isCaretContainer$2(caretContainerNode)) {\n        if (hasContent(caretContainerNode)) {\n          caretContainerNode.removeAttribute('data-mce-caret');\n        } else {\n          removeNode$1(caretContainerNode);\n        }\n      }\n      if (isText$5(caretContainerNode)) {\n        deleteZwspChars(caretContainerNode);\n        if (caretContainerNode.data.length === 0) {\n          removeNode$1(caretContainerNode);\n        }\n      }\n    };\n\n    const isContentEditableFalse$8 = isContentEditableFalse$b;\n    const isMedia$1 = isMedia$2;\n    const isTableCell$1 = isTableCell$3;\n    const inlineFakeCaretSelector = '*[contentEditable=false],video,audio,embed,object';\n    const getAbsoluteClientRect = (root, element, before) => {\n      const clientRect = collapse(element.getBoundingClientRect(), before);\n      let scrollX;\n      let scrollY;\n      if (root.tagName === 'BODY') {\n        const docElm = root.ownerDocument.documentElement;\n        scrollX = root.scrollLeft || docElm.scrollLeft;\n        scrollY = root.scrollTop || docElm.scrollTop;\n      } else {\n        const rootRect = root.getBoundingClientRect();\n        scrollX = root.scrollLeft - rootRect.left;\n        scrollY = root.scrollTop - rootRect.top;\n      }\n      clientRect.left += scrollX;\n      clientRect.right += scrollX;\n      clientRect.top += scrollY;\n      clientRect.bottom += scrollY;\n      clientRect.width = 1;\n      let margin = element.offsetWidth - element.clientWidth;\n      if (margin > 0) {\n        if (before) {\n          margin *= -1;\n        }\n        clientRect.left += margin;\n        clientRect.right += margin;\n      }\n      return clientRect;\n    };\n    const trimInlineCaretContainers = root => {\n      var _a, _b;\n      const fakeCaretTargetNodes = descendants(SugarElement.fromDom(root), inlineFakeCaretSelector);\n      for (let i = 0; i < fakeCaretTargetNodes.length; i++) {\n        const node = fakeCaretTargetNodes[i].dom;\n        let sibling = node.previousSibling;\n        if (endsWithCaretContainer$1(sibling)) {\n          const data = sibling.data;\n          if (data.length === 1) {\n            (_a = sibling.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(sibling);\n          } else {\n            sibling.deleteData(data.length - 1, 1);\n          }\n        }\n        sibling = node.nextSibling;\n        if (startsWithCaretContainer$1(sibling)) {\n          const data = sibling.data;\n          if (data.length === 1) {\n            (_b = sibling.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(sibling);\n          } else {\n            sibling.deleteData(0, 1);\n          }\n        }\n      }\n    };\n    const FakeCaret = (editor, root, isBlock, hasFocus) => {\n      const lastVisualCaret = value$2();\n      let cursorInterval;\n      let caretContainerNode;\n      const caretBlock = getForcedRootBlock(editor);\n      const dom = editor.dom;\n      const show = (before, element) => {\n        let rng;\n        hide();\n        if (isTableCell$1(element)) {\n          return null;\n        }\n        if (isBlock(element)) {\n          const caretContainer = insertBlock(caretBlock, element, before);\n          const clientRect = getAbsoluteClientRect(root, element, before);\n          dom.setStyle(caretContainer, 'top', clientRect.top);\n          caretContainerNode = caretContainer;\n          const caret = dom.create('div', {\n            'class': 'mce-visual-caret',\n            'data-mce-bogus': 'all'\n          });\n          dom.setStyles(caret, { ...clientRect });\n          dom.add(root, caret);\n          lastVisualCaret.set({\n            caret,\n            element,\n            before\n          });\n          if (before) {\n            dom.addClass(caret, 'mce-visual-caret-before');\n          }\n          startBlink();\n          rng = element.ownerDocument.createRange();\n          rng.setStart(caretContainer, 0);\n          rng.setEnd(caretContainer, 0);\n        } else {\n          caretContainerNode = insertInline$1(element, before);\n          rng = element.ownerDocument.createRange();\n          if (isInlineFakeCaretTarget(caretContainerNode.nextSibling)) {\n            rng.setStart(caretContainerNode, 0);\n            rng.setEnd(caretContainerNode, 0);\n          } else {\n            rng.setStart(caretContainerNode, 1);\n            rng.setEnd(caretContainerNode, 1);\n          }\n          return rng;\n        }\n        return rng;\n      };\n      const hide = () => {\n        trimInlineCaretContainers(root);\n        if (caretContainerNode) {\n          remove$3(caretContainerNode);\n          caretContainerNode = null;\n        }\n        lastVisualCaret.on(caretState => {\n          dom.remove(caretState.caret);\n          lastVisualCaret.clear();\n        });\n        if (cursorInterval) {\n          clearInterval(cursorInterval);\n          cursorInterval = undefined;\n        }\n      };\n      const startBlink = () => {\n        cursorInterval = setInterval(() => {\n          lastVisualCaret.on(caretState => {\n            if (hasFocus()) {\n              dom.toggleClass(caretState.caret, 'mce-visual-caret-hidden');\n            } else {\n              dom.addClass(caretState.caret, 'mce-visual-caret-hidden');\n            }\n          });\n        }, 500);\n      };\n      const reposition = () => {\n        lastVisualCaret.on(caretState => {\n          const clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before);\n          dom.setStyles(caretState.caret, { ...clientRect });\n        });\n      };\n      const destroy = () => clearInterval(cursorInterval);\n      const getCss = () => '.mce-visual-caret {' + 'position: absolute;' + 'background-color: black;' + 'background-color: currentcolor;' + '}' + '.mce-visual-caret-hidden {' + 'display: none;' + '}' + '*[data-mce-caret] {' + 'position: absolute;' + 'left: -1000px;' + 'right: auto;' + 'top: 0;' + 'margin: 0;' + 'padding: 0;' + '}';\n      return {\n        show,\n        hide,\n        getCss,\n        reposition,\n        destroy\n      };\n    };\n    const isFakeCaretTableBrowser = () => Env.browser.isFirefox();\n    const isInlineFakeCaretTarget = node => isContentEditableFalse$8(node) || isMedia$1(node);\n    const isFakeCaretTarget = node => {\n      const isTarget = isInlineFakeCaretTarget(node) || isTable$2(node) && isFakeCaretTableBrowser();\n      return isTarget && parentElement(SugarElement.fromDom(node)).exists(isEditable$3);\n    };\n\n    const isContentEditableTrue$1 = isContentEditableTrue$3;\n    const isContentEditableFalse$7 = isContentEditableFalse$b;\n    const isMedia = isMedia$2;\n    const isBlockLike = matchStyleValues('display', 'block table table-cell table-caption list-item');\n    const isCaretContainer = isCaretContainer$2;\n    const isCaretContainerBlock = isCaretContainerBlock$1;\n    const isElement$2 = isElement$6;\n    const isText$4 = isText$a;\n    const isCaretCandidate$1 = isCaretCandidate$3;\n    const isForwards = direction => direction > 0;\n    const isBackwards = direction => direction < 0;\n    const skipCaretContainers = (walk, shallow) => {\n      let node;\n      while (node = walk(shallow)) {\n        if (!isCaretContainerBlock(node)) {\n          return node;\n        }\n      }\n      return null;\n    };\n    const findNode = (node, direction, predicateFn, rootNode, shallow) => {\n      const walker = new DomTreeWalker(node, rootNode);\n      const isCefOrCaretContainer = isContentEditableFalse$7(node) || isCaretContainerBlock(node);\n      let tempNode;\n      if (isBackwards(direction)) {\n        if (isCefOrCaretContainer) {\n          tempNode = skipCaretContainers(walker.prev.bind(walker), true);\n          if (predicateFn(tempNode)) {\n            return tempNode;\n          }\n        }\n        while (tempNode = skipCaretContainers(walker.prev.bind(walker), shallow)) {\n          if (predicateFn(tempNode)) {\n            return tempNode;\n          }\n        }\n      }\n      if (isForwards(direction)) {\n        if (isCefOrCaretContainer) {\n          tempNode = skipCaretContainers(walker.next.bind(walker), true);\n          if (predicateFn(tempNode)) {\n            return tempNode;\n          }\n        }\n        while (tempNode = skipCaretContainers(walker.next.bind(walker), shallow)) {\n          if (predicateFn(tempNode)) {\n            return tempNode;\n          }\n        }\n      }\n      return null;\n    };\n    const getEditingHost = (node, rootNode) => {\n      const isCETrue = node => isContentEditableTrue$1(node.dom);\n      const isRoot = node => node.dom === rootNode;\n      return ancestor$4(SugarElement.fromDom(node), isCETrue, isRoot).map(elm => elm.dom).getOr(rootNode);\n    };\n    const getParentBlock$3 = (node, rootNode) => {\n      while (node && node !== rootNode) {\n        if (isBlockLike(node)) {\n          return node;\n        }\n        node = node.parentNode;\n      }\n      return null;\n    };\n    const isInSameBlock = (caretPosition1, caretPosition2, rootNode) => getParentBlock$3(caretPosition1.container(), rootNode) === getParentBlock$3(caretPosition2.container(), rootNode);\n    const getChildNodeAtRelativeOffset = (relativeOffset, caretPosition) => {\n      if (!caretPosition) {\n        return Optional.none();\n      }\n      const container = caretPosition.container();\n      const offset = caretPosition.offset();\n      if (!isElement$2(container)) {\n        return Optional.none();\n      }\n      return Optional.from(container.childNodes[offset + relativeOffset]);\n    };\n    const beforeAfter = (before, node) => {\n      var _a;\n      const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n      const range = doc.createRange();\n      if (before) {\n        range.setStartBefore(node);\n        range.setEndBefore(node);\n      } else {\n        range.setStartAfter(node);\n        range.setEndAfter(node);\n      }\n      return range;\n    };\n    const isNodesInSameBlock = (root, node1, node2) => getParentBlock$3(node1, root) === getParentBlock$3(node2, root);\n    const lean = (left, root, node) => {\n      const siblingName = left ? 'previousSibling' : 'nextSibling';\n      let tempNode = node;\n      while (tempNode && tempNode !== root) {\n        let sibling = tempNode[siblingName];\n        if (sibling && isCaretContainer(sibling)) {\n          sibling = sibling[siblingName];\n        }\n        if (isContentEditableFalse$7(sibling) || isMedia(sibling)) {\n          if (isNodesInSameBlock(root, sibling, tempNode)) {\n            return sibling;\n          }\n          break;\n        }\n        if (isCaretCandidate$1(sibling)) {\n          break;\n        }\n        tempNode = tempNode.parentNode;\n      }\n      return null;\n    };\n    const before$2 = curry(beforeAfter, true);\n    const after$2 = curry(beforeAfter, false);\n    const normalizeRange = (direction, root, range) => {\n      let node;\n      const leanLeft = curry(lean, true, root);\n      const leanRight = curry(lean, false, root);\n      const container = range.startContainer;\n      const offset = range.startOffset;\n      if (isCaretContainerBlock$1(container)) {\n        const block = isText$4(container) ? container.parentNode : container;\n        const location = block.getAttribute('data-mce-caret');\n        if (location === 'before') {\n          node = block.nextSibling;\n          if (isFakeCaretTarget(node)) {\n            return before$2(node);\n          }\n        }\n        if (location === 'after') {\n          node = block.previousSibling;\n          if (isFakeCaretTarget(node)) {\n            return after$2(node);\n          }\n        }\n      }\n      if (!range.collapsed) {\n        return range;\n      }\n      if (isText$a(container)) {\n        if (isCaretContainer(container)) {\n          if (direction === 1) {\n            node = leanRight(container);\n            if (node) {\n              return before$2(node);\n            }\n            node = leanLeft(container);\n            if (node) {\n              return after$2(node);\n            }\n          }\n          if (direction === -1) {\n            node = leanLeft(container);\n            if (node) {\n              return after$2(node);\n            }\n            node = leanRight(container);\n            if (node) {\n              return before$2(node);\n            }\n          }\n          return range;\n        }\n        if (endsWithCaretContainer$1(container) && offset >= container.data.length - 1) {\n          if (direction === 1) {\n            node = leanRight(container);\n            if (node) {\n              return before$2(node);\n            }\n          }\n          return range;\n        }\n        if (startsWithCaretContainer$1(container) && offset <= 1) {\n          if (direction === -1) {\n            node = leanLeft(container);\n            if (node) {\n              return after$2(node);\n            }\n          }\n          return range;\n        }\n        if (offset === container.data.length) {\n          node = leanRight(container);\n          if (node) {\n            return before$2(node);\n          }\n          return range;\n        }\n        if (offset === 0) {\n          node = leanLeft(container);\n          if (node) {\n            return after$2(node);\n          }\n          return range;\n        }\n      }\n      return range;\n    };\n    const getRelativeCefElm = (forward, caretPosition) => getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition).filter(isContentEditableFalse$7);\n    const getNormalizedRangeEndPoint = (direction, root, range) => {\n      const normalizedRange = normalizeRange(direction, root, range);\n      return direction === -1 ? CaretPosition.fromRangeStart(normalizedRange) : CaretPosition.fromRangeEnd(normalizedRange);\n    };\n    const getElementFromPosition = pos => Optional.from(pos.getNode()).map(SugarElement.fromDom);\n    const getElementFromPrevPosition = pos => Optional.from(pos.getNode(true)).map(SugarElement.fromDom);\n    const getVisualCaretPosition = (walkFn, caretPosition) => {\n      let pos = caretPosition;\n      while (pos = walkFn(pos)) {\n        if (pos.isVisible()) {\n          return pos;\n        }\n      }\n      return pos;\n    };\n    const isMoveInsideSameBlock = (from, to) => {\n      const inSameBlock = isInSameBlock(from, to);\n      if (!inSameBlock && isBr$6(from.getNode())) {\n        return true;\n      }\n      return inSameBlock;\n    };\n\n    var HDirection;\n    (function (HDirection) {\n      HDirection[HDirection['Backwards'] = -1] = 'Backwards';\n      HDirection[HDirection['Forwards'] = 1] = 'Forwards';\n    }(HDirection || (HDirection = {})));\n    const isContentEditableFalse$6 = isContentEditableFalse$b;\n    const isText$3 = isText$a;\n    const isElement$1 = isElement$6;\n    const isBr$2 = isBr$6;\n    const isCaretCandidate = isCaretCandidate$3;\n    const isAtomic = isAtomic$1;\n    const isEditableCaretCandidate = isEditableCaretCandidate$1;\n    const getParents$3 = (node, root) => {\n      const parents = [];\n      let tempNode = node;\n      while (tempNode && tempNode !== root) {\n        parents.push(tempNode);\n        tempNode = tempNode.parentNode;\n      }\n      return parents;\n    };\n    const nodeAtIndex = (container, offset) => {\n      if (container.hasChildNodes() && offset < container.childNodes.length) {\n        return container.childNodes[offset];\n      }\n      return null;\n    };\n    const getCaretCandidatePosition = (direction, node) => {\n      if (isForwards(direction)) {\n        if (isCaretCandidate(node.previousSibling) && !isText$3(node.previousSibling)) {\n          return CaretPosition.before(node);\n        }\n        if (isText$3(node)) {\n          return CaretPosition(node, 0);\n        }\n      }\n      if (isBackwards(direction)) {\n        if (isCaretCandidate(node.nextSibling) && !isText$3(node.nextSibling)) {\n          return CaretPosition.after(node);\n        }\n        if (isText$3(node)) {\n          return CaretPosition(node, node.data.length);\n        }\n      }\n      if (isBackwards(direction)) {\n        if (isBr$2(node)) {\n          return CaretPosition.before(node);\n        }\n        return CaretPosition.after(node);\n      }\n      return CaretPosition.before(node);\n    };\n    const moveForwardFromBr = (root, nextNode) => {\n      const nextSibling = nextNode.nextSibling;\n      if (nextSibling && isCaretCandidate(nextSibling)) {\n        if (isText$3(nextSibling)) {\n          return CaretPosition(nextSibling, 0);\n        } else {\n          return CaretPosition.before(nextSibling);\n        }\n      } else {\n        return findCaretPosition$1(HDirection.Forwards, CaretPosition.after(nextNode), root);\n      }\n    };\n    const findCaretPosition$1 = (direction, startPos, root) => {\n      let node;\n      let nextNode;\n      let innerNode;\n      let caretPosition;\n      if (!isElement$1(root) || !startPos) {\n        return null;\n      }\n      if (startPos.isEqual(CaretPosition.after(root)) && root.lastChild) {\n        caretPosition = CaretPosition.after(root.lastChild);\n        if (isBackwards(direction) && isCaretCandidate(root.lastChild) && isElement$1(root.lastChild)) {\n          return isBr$2(root.lastChild) ? CaretPosition.before(root.lastChild) : caretPosition;\n        }\n      } else {\n        caretPosition = startPos;\n      }\n      const container = caretPosition.container();\n      let offset = caretPosition.offset();\n      if (isText$3(container)) {\n        if (isBackwards(direction) && offset > 0) {\n          return CaretPosition(container, --offset);\n        }\n        if (isForwards(direction) && offset < container.length) {\n          return CaretPosition(container, ++offset);\n        }\n        node = container;\n      } else {\n        if (isBackwards(direction) && offset > 0) {\n          nextNode = nodeAtIndex(container, offset - 1);\n          if (isCaretCandidate(nextNode)) {\n            if (!isAtomic(nextNode)) {\n              innerNode = findNode(nextNode, direction, isEditableCaretCandidate, nextNode);\n              if (innerNode) {\n                if (isText$3(innerNode)) {\n                  return CaretPosition(innerNode, innerNode.data.length);\n                }\n                return CaretPosition.after(innerNode);\n              }\n            }\n            if (isText$3(nextNode)) {\n              return CaretPosition(nextNode, nextNode.data.length);\n            }\n            return CaretPosition.before(nextNode);\n          }\n        }\n        if (isForwards(direction) && offset < container.childNodes.length) {\n          nextNode = nodeAtIndex(container, offset);\n          if (isCaretCandidate(nextNode)) {\n            if (isBr$2(nextNode)) {\n              return moveForwardFromBr(root, nextNode);\n            }\n            if (!isAtomic(nextNode)) {\n              innerNode = findNode(nextNode, direction, isEditableCaretCandidate, nextNode);\n              if (innerNode) {\n                if (isText$3(innerNode)) {\n                  return CaretPosition(innerNode, 0);\n                }\n                return CaretPosition.before(innerNode);\n              }\n            }\n            if (isText$3(nextNode)) {\n              return CaretPosition(nextNode, 0);\n            }\n            return CaretPosition.after(nextNode);\n          }\n        }\n        node = nextNode ? nextNode : caretPosition.getNode();\n      }\n      if (node && (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart())) {\n        node = findNode(node, direction, always, root, true);\n        if (isEditableCaretCandidate(node, root)) {\n          return getCaretCandidatePosition(direction, node);\n        }\n      }\n      nextNode = node ? findNode(node, direction, isEditableCaretCandidate, root) : node;\n      const rootContentEditableFalseElm = last$2(filter$5(getParents$3(container, root), isContentEditableFalse$6));\n      if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {\n        if (isForwards(direction)) {\n          caretPosition = CaretPosition.after(rootContentEditableFalseElm);\n        } else {\n          caretPosition = CaretPosition.before(rootContentEditableFalseElm);\n        }\n        return caretPosition;\n      }\n      if (nextNode) {\n        return getCaretCandidatePosition(direction, nextNode);\n      }\n      return null;\n    };\n    const CaretWalker = root => ({\n      next: caretPosition => {\n        return findCaretPosition$1(HDirection.Forwards, caretPosition, root);\n      },\n      prev: caretPosition => {\n        return findCaretPosition$1(HDirection.Backwards, caretPosition, root);\n      }\n    });\n\n    const walkToPositionIn = (forward, root, start) => {\n      const position = forward ? CaretPosition.before(start) : CaretPosition.after(start);\n      return fromPosition(forward, root, position);\n    };\n    const afterElement = node => isBr$6(node) ? CaretPosition.before(node) : CaretPosition.after(node);\n    const isBeforeOrStart = position => {\n      if (CaretPosition.isTextPosition(position)) {\n        return position.offset() === 0;\n      } else {\n        return isCaretCandidate$3(position.getNode());\n      }\n    };\n    const isAfterOrEnd = position => {\n      if (CaretPosition.isTextPosition(position)) {\n        const container = position.container();\n        return position.offset() === container.data.length;\n      } else {\n        return isCaretCandidate$3(position.getNode(true));\n      }\n    };\n    const isBeforeAfterSameElement = (from, to) => !CaretPosition.isTextPosition(from) && !CaretPosition.isTextPosition(to) && from.getNode() === to.getNode(true);\n    const isAtBr = position => !CaretPosition.isTextPosition(position) && isBr$6(position.getNode());\n    const shouldSkipPosition = (forward, from, to) => {\n      if (forward) {\n        return !isBeforeAfterSameElement(from, to) && !isAtBr(from) && isAfterOrEnd(from) && isBeforeOrStart(to);\n      } else {\n        return !isBeforeAfterSameElement(to, from) && isBeforeOrStart(from) && isAfterOrEnd(to);\n      }\n    };\n    const fromPosition = (forward, root, pos) => {\n      const walker = CaretWalker(root);\n      return Optional.from(forward ? walker.next(pos) : walker.prev(pos));\n    };\n    const navigate = (forward, root, from) => fromPosition(forward, root, from).bind(to => {\n      if (isInSameBlock(from, to, root) && shouldSkipPosition(forward, from, to)) {\n        return fromPosition(forward, root, to);\n      } else {\n        return Optional.some(to);\n      }\n    });\n    const navigateIgnore = (forward, root, from, ignoreFilter) => navigate(forward, root, from).bind(pos => ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Optional.some(pos));\n    const positionIn = (forward, element) => {\n      const startNode = forward ? element.firstChild : element.lastChild;\n      if (isText$a(startNode)) {\n        return Optional.some(CaretPosition(startNode, forward ? 0 : startNode.data.length));\n      } else if (startNode) {\n        if (isCaretCandidate$3(startNode)) {\n          return Optional.some(forward ? CaretPosition.before(startNode) : afterElement(startNode));\n        } else {\n          return walkToPositionIn(forward, element, startNode);\n        }\n      } else {\n        return Optional.none();\n      }\n    };\n    const nextPosition = curry(fromPosition, true);\n    const prevPosition = curry(fromPosition, false);\n    const firstPositionIn = curry(positionIn, true);\n    const lastPositionIn = curry(positionIn, false);\n\n    const CARET_ID = '_mce_caret';\n    const isCaretNode = node => isElement$6(node) && node.id === CARET_ID;\n    const getParentCaretContainer = (body, node) => {\n      let currentNode = node;\n      while (currentNode && currentNode !== body) {\n        if (isCaretNode(currentNode)) {\n          return currentNode;\n        }\n        currentNode = currentNode.parentNode;\n      }\n      return null;\n    };\n\n    const isStringPathBookmark = bookmark => isString(bookmark.start);\n    const isRangeBookmark = bookmark => has$2(bookmark, 'rng');\n    const isIdBookmark = bookmark => has$2(bookmark, 'id');\n    const isIndexBookmark = bookmark => has$2(bookmark, 'name');\n    const isPathBookmark = bookmark => Tools.isArray(bookmark.start);\n\n    const isForwardBookmark = bookmark => !isIndexBookmark(bookmark) && isBoolean(bookmark.forward) ? bookmark.forward : true;\n    const addBogus = (dom, node) => {\n      if (isElement$6(node) && dom.isBlock(node) && !node.innerHTML) {\n        node.innerHTML = '<br data-mce-bogus=\"1\" />';\n      }\n      return node;\n    };\n    const resolveCaretPositionBookmark = (dom, bookmark) => {\n      const startPos = Optional.from(resolve$1(dom.getRoot(), bookmark.start));\n      const endPos = Optional.from(resolve$1(dom.getRoot(), bookmark.end));\n      return lift2(startPos, endPos, (start, end) => {\n        const range = dom.createRng();\n        range.setStart(start.container(), start.offset());\n        range.setEnd(end.container(), end.offset());\n        return {\n          range,\n          forward: isForwardBookmark(bookmark)\n        };\n      });\n    };\n    const insertZwsp = (node, rng) => {\n      var _a;\n      const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n      const textNode = doc.createTextNode(ZWSP$1);\n      node.appendChild(textNode);\n      rng.setStart(textNode, 0);\n      rng.setEnd(textNode, 0);\n    };\n    const isEmpty$1 = node => !node.hasChildNodes();\n    const tryFindRangePosition = (node, rng) => lastPositionIn(node).fold(never, pos => {\n      rng.setStart(pos.container(), pos.offset());\n      rng.setEnd(pos.container(), pos.offset());\n      return true;\n    });\n    const padEmptyCaretContainer = (root, node, rng) => {\n      if (isEmpty$1(node) && getParentCaretContainer(root, node)) {\n        insertZwsp(node, rng);\n        return true;\n      } else {\n        return false;\n      }\n    };\n    const setEndPoint = (dom, start, bookmark, rng) => {\n      const point = bookmark[start ? 'start' : 'end'];\n      const root = dom.getRoot();\n      if (point) {\n        let node = root;\n        let offset = point[0];\n        for (let i = point.length - 1; node && i >= 1; i--) {\n          const children = node.childNodes;\n          if (padEmptyCaretContainer(root, node, rng)) {\n            return true;\n          }\n          if (point[i] > children.length - 1) {\n            if (padEmptyCaretContainer(root, node, rng)) {\n              return true;\n            }\n            return tryFindRangePosition(node, rng);\n          }\n          node = children[point[i]];\n        }\n        if (isText$a(node)) {\n          offset = Math.min(point[0], node.data.length);\n        }\n        if (isElement$6(node)) {\n          offset = Math.min(point[0], node.childNodes.length);\n        }\n        if (start) {\n          rng.setStart(node, offset);\n        } else {\n          rng.setEnd(node, offset);\n        }\n      }\n      return true;\n    };\n    const isValidTextNode = node => isText$a(node) && node.data.length > 0;\n    const restoreEndPoint = (dom, suffix, bookmark) => {\n      const marker = dom.get(bookmark.id + '_' + suffix);\n      const markerParent = marker === null || marker === void 0 ? void 0 : marker.parentNode;\n      const keep = bookmark.keep;\n      if (marker && markerParent) {\n        let container;\n        let offset;\n        if (suffix === 'start') {\n          if (!keep) {\n            container = markerParent;\n            offset = dom.nodeIndex(marker);\n          } else {\n            if (marker.hasChildNodes()) {\n              container = marker.firstChild;\n              offset = 1;\n            } else if (isValidTextNode(marker.nextSibling)) {\n              container = marker.nextSibling;\n              offset = 0;\n            } else if (isValidTextNode(marker.previousSibling)) {\n              container = marker.previousSibling;\n              offset = marker.previousSibling.data.length;\n            } else {\n              container = markerParent;\n              offset = dom.nodeIndex(marker) + 1;\n            }\n          }\n        } else {\n          if (!keep) {\n            container = markerParent;\n            offset = dom.nodeIndex(marker);\n          } else {\n            if (marker.hasChildNodes()) {\n              container = marker.firstChild;\n              offset = 1;\n            } else if (isValidTextNode(marker.previousSibling)) {\n              container = marker.previousSibling;\n              offset = marker.previousSibling.data.length;\n            } else {\n              container = markerParent;\n              offset = dom.nodeIndex(marker);\n            }\n          }\n        }\n        if (!keep) {\n          const prev = marker.previousSibling;\n          const next = marker.nextSibling;\n          Tools.each(Tools.grep(marker.childNodes), node => {\n            if (isText$a(node)) {\n              node.data = node.data.replace(/\\uFEFF/g, '');\n            }\n          });\n          let otherMarker;\n          while (otherMarker = dom.get(bookmark.id + '_' + suffix)) {\n            dom.remove(otherMarker, true);\n          }\n          if (isText$a(next) && isText$a(prev) && !Env.browser.isOpera()) {\n            const idx = prev.data.length;\n            prev.appendData(next.data);\n            dom.remove(next);\n            container = prev;\n            offset = idx;\n          }\n        }\n        return Optional.some(CaretPosition(container, offset));\n      } else {\n        return Optional.none();\n      }\n    };\n    const resolvePaths = (dom, bookmark) => {\n      const range = dom.createRng();\n      if (setEndPoint(dom, true, bookmark, range) && setEndPoint(dom, false, bookmark, range)) {\n        return Optional.some({\n          range,\n          forward: isForwardBookmark(bookmark)\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const resolveId = (dom, bookmark) => {\n      const startPos = restoreEndPoint(dom, 'start', bookmark);\n      const endPos = restoreEndPoint(dom, 'end', bookmark);\n      return lift2(startPos, endPos.or(startPos), (spos, epos) => {\n        const range = dom.createRng();\n        range.setStart(addBogus(dom, spos.container()), spos.offset());\n        range.setEnd(addBogus(dom, epos.container()), epos.offset());\n        return {\n          range,\n          forward: isForwardBookmark(bookmark)\n        };\n      });\n    };\n    const resolveIndex = (dom, bookmark) => Optional.from(dom.select(bookmark.name)[bookmark.index]).map(elm => {\n      const range = dom.createRng();\n      range.selectNode(elm);\n      return {\n        range,\n        forward: true\n      };\n    });\n    const resolve = (selection, bookmark) => {\n      const dom = selection.dom;\n      if (bookmark) {\n        if (isPathBookmark(bookmark)) {\n          return resolvePaths(dom, bookmark);\n        } else if (isStringPathBookmark(bookmark)) {\n          return resolveCaretPositionBookmark(dom, bookmark);\n        } else if (isIdBookmark(bookmark)) {\n          return resolveId(dom, bookmark);\n        } else if (isIndexBookmark(bookmark)) {\n          return resolveIndex(dom, bookmark);\n        } else if (isRangeBookmark(bookmark)) {\n          return Optional.some({\n            range: bookmark.rng,\n            forward: isForwardBookmark(bookmark)\n          });\n        }\n      }\n      return Optional.none();\n    };\n\n    const getBookmark$1 = (selection, type, normalized) => {\n      return getBookmark$2(selection, type, normalized);\n    };\n    const moveToBookmark = (selection, bookmark) => {\n      resolve(selection, bookmark).each(({range, forward}) => {\n        selection.setRng(range, forward);\n      });\n    };\n    const isBookmarkNode$1 = node => {\n      return isElement$6(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n    };\n\n    const is = expected => actual => expected === actual;\n    const isNbsp = is(nbsp);\n    const isWhiteSpace = chr => chr !== '' && ' \\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n    const isContent = chr => !isWhiteSpace(chr) && !isNbsp(chr) && !isZwsp$2(chr);\n\n    const hexColour = value => ({ value: normalizeHex(value) });\n    const normalizeHex = hex => removeLeading(hex, '#').toUpperCase();\n    const toHex = component => {\n      const hex = component.toString(16);\n      return (hex.length === 1 ? '0' + hex : hex).toUpperCase();\n    };\n    const fromRgba = rgbaColour => {\n      const value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue);\n      return hexColour(value);\n    };\n\n    const rgbRegex = /^\\s*rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i;\n    const rgbaRegex = /^\\s*rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?(?:\\.\\d+)?)\\s*\\)\\s*$/i;\n    const rgbaColour = (red, green, blue, alpha) => ({\n      red,\n      green,\n      blue,\n      alpha\n    });\n    const fromStringValues = (red, green, blue, alpha) => {\n      const r = parseInt(red, 10);\n      const g = parseInt(green, 10);\n      const b = parseInt(blue, 10);\n      const a = parseFloat(alpha);\n      return rgbaColour(r, g, b, a);\n    };\n    const fromString = rgbaString => {\n      if (rgbaString === 'transparent') {\n        return Optional.some(rgbaColour(0, 0, 0, 0));\n      }\n      const rgbMatch = rgbRegex.exec(rgbaString);\n      if (rgbMatch !== null) {\n        return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n      }\n      const rgbaMatch = rgbaRegex.exec(rgbaString);\n      if (rgbaMatch !== null) {\n        return Optional.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));\n      }\n      return Optional.none();\n    };\n\n    const rgbaToHexString = color => fromString(color).map(fromRgba).map(h => '#' + h.value).getOr(color);\n\n    const getRanges$1 = selection => {\n      const ranges = [];\n      if (selection) {\n        for (let i = 0; i < selection.rangeCount; i++) {\n          ranges.push(selection.getRangeAt(i));\n        }\n      }\n      return ranges;\n    };\n    const getSelectedNodes = ranges => {\n      return bind$3(ranges, range => {\n        const node = getSelectedNode(range);\n        return node ? [SugarElement.fromDom(node)] : [];\n      });\n    };\n    const hasMultipleRanges = selection => {\n      return getRanges$1(selection).length > 1;\n    };\n\n    const getCellsFromRanges = ranges => filter$5(getSelectedNodes(ranges), isTableCell$2);\n    const getCellsFromElement = elm => descendants(elm, 'td[data-mce-selected],th[data-mce-selected]');\n    const getCellsFromElementOrRanges = (ranges, element) => {\n      const selectedCells = getCellsFromElement(element);\n      return selectedCells.length > 0 ? selectedCells : getCellsFromRanges(ranges);\n    };\n    const getCellsFromEditor = editor => getCellsFromElementOrRanges(getRanges$1(editor.selection.getSel()), SugarElement.fromDom(editor.getBody()));\n    const getClosestTable = (cell, isRoot) => ancestor$3(cell, 'table', isRoot);\n\n    const getStartNode = rng => {\n      const sc = rng.startContainer, so = rng.startOffset;\n      if (isText$a(sc)) {\n        return so === 0 ? Optional.some(SugarElement.fromDom(sc)) : Optional.none();\n      } else {\n        return Optional.from(sc.childNodes[so]).map(SugarElement.fromDom);\n      }\n    };\n    const getEndNode = rng => {\n      const ec = rng.endContainer, eo = rng.endOffset;\n      if (isText$a(ec)) {\n        return eo === ec.data.length ? Optional.some(SugarElement.fromDom(ec)) : Optional.none();\n      } else {\n        return Optional.from(ec.childNodes[eo - 1]).map(SugarElement.fromDom);\n      }\n    };\n    const getFirstChildren = node => {\n      return firstChild(node).fold(constant([node]), child => {\n        return [node].concat(getFirstChildren(child));\n      });\n    };\n    const getLastChildren = node => {\n      return lastChild(node).fold(constant([node]), child => {\n        if (name(child) === 'br') {\n          return prevSibling(child).map(sibling => {\n            return [node].concat(getLastChildren(sibling));\n          }).getOr([]);\n        } else {\n          return [node].concat(getLastChildren(child));\n        }\n      });\n    };\n    const hasAllContentsSelected = (elm, rng) => {\n      return lift2(getStartNode(rng), getEndNode(rng), (startNode, endNode) => {\n        const start = find$2(getFirstChildren(elm), curry(eq, startNode));\n        const end = find$2(getLastChildren(elm), curry(eq, endNode));\n        return start.isSome() && end.isSome();\n      }).getOr(false);\n    };\n    const moveEndPoint = (dom, rng, node, start) => {\n      const root = node;\n      const walker = new DomTreeWalker(node, root);\n      const moveCaretBeforeOnEnterElementsMap = filter$4(dom.schema.getMoveCaretBeforeOnEnterElements(), (_, name) => !contains$2([\n        'td',\n        'th',\n        'table'\n      ], name.toLowerCase()));\n      let currentNode = node;\n      do {\n        if (isText$a(currentNode) && Tools.trim(currentNode.data).length !== 0) {\n          if (start) {\n            rng.setStart(currentNode, 0);\n          } else {\n            rng.setEnd(currentNode, currentNode.data.length);\n          }\n          return;\n        }\n        if (moveCaretBeforeOnEnterElementsMap[currentNode.nodeName]) {\n          if (start) {\n            rng.setStartBefore(currentNode);\n          } else {\n            if (currentNode.nodeName === 'BR') {\n              rng.setEndBefore(currentNode);\n            } else {\n              rng.setEndAfter(currentNode);\n            }\n          }\n          return;\n        }\n      } while (currentNode = start ? walker.next() : walker.prev());\n      if (root.nodeName === 'BODY') {\n        if (start) {\n          rng.setStart(root, 0);\n        } else {\n          rng.setEnd(root, root.childNodes.length);\n        }\n      }\n    };\n    const hasAnyRanges = editor => {\n      const sel = editor.selection.getSel();\n      return isNonNullable(sel) && sel.rangeCount > 0;\n    };\n    const runOnRanges = (editor, executor) => {\n      const fakeSelectionNodes = getCellsFromEditor(editor);\n      if (fakeSelectionNodes.length > 0) {\n        each$e(fakeSelectionNodes, elem => {\n          const node = elem.dom;\n          const fakeNodeRng = editor.dom.createRng();\n          fakeNodeRng.setStartBefore(node);\n          fakeNodeRng.setEndAfter(node);\n          executor(fakeNodeRng, true);\n        });\n      } else {\n        executor(editor.selection.getRng(), false);\n      }\n    };\n    const preserve = (selection, fillBookmark, executor) => {\n      const bookmark = getPersistentBookmark(selection, fillBookmark);\n      executor(bookmark);\n      selection.moveToBookmark(bookmark);\n    };\n\n    const isNode = node => isNumber(node === null || node === void 0 ? void 0 : node.nodeType);\n    const isElementNode$1 = node => isElement$6(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$2(node);\n    const isElementDirectlySelected = (dom, node) => {\n      if (isElementNode$1(node) && !/^(TD|TH)$/.test(node.nodeName)) {\n        const selectedAttr = dom.getAttrib(node, 'data-mce-selected');\n        const value = parseInt(selectedAttr, 10);\n        return !isNaN(value) && value > 0;\n      } else {\n        return false;\n      }\n    };\n    const isEditable$2 = elm => elm.isContentEditable === true;\n    const preserveSelection = (editor, action, shouldMoveStart) => {\n      const {selection, dom} = editor;\n      const selectedNodeBeforeAction = selection.getNode();\n      const isSelectedBeforeNodeNoneditable = isContentEditableFalse$b(selectedNodeBeforeAction);\n      preserve(selection, true, () => {\n        action();\n      });\n      const isBeforeNodeStillNoneditable = isSelectedBeforeNodeNoneditable && isContentEditableFalse$b(selectedNodeBeforeAction);\n      if (isBeforeNodeStillNoneditable && dom.isChildOf(selectedNodeBeforeAction, editor.getBody())) {\n        editor.selection.select(selectedNodeBeforeAction);\n      } else if (shouldMoveStart(selection.getStart())) {\n        moveStartToNearestText(dom, selection);\n      }\n    };\n    const moveStartToNearestText = (dom, selection) => {\n      var _a, _b;\n      const rng = selection.getRng();\n      const {startContainer, startOffset} = rng;\n      const selectedNode = selection.getNode();\n      if (isElementDirectlySelected(dom, selectedNode)) {\n        return;\n      }\n      if (isElement$6(startContainer)) {\n        const nodes = startContainer.childNodes;\n        const root = dom.getRoot();\n        let walker;\n        if (startOffset < nodes.length) {\n          const startNode = nodes[startOffset];\n          walker = new DomTreeWalker(startNode, (_a = dom.getParent(startNode, dom.isBlock)) !== null && _a !== void 0 ? _a : root);\n        } else {\n          const startNode = nodes[nodes.length - 1];\n          walker = new DomTreeWalker(startNode, (_b = dom.getParent(startNode, dom.isBlock)) !== null && _b !== void 0 ? _b : root);\n          walker.next(true);\n        }\n        for (let node = walker.current(); node; node = walker.next()) {\n          if (dom.getContentEditable(node) === 'false') {\n            return;\n          } else if (isText$a(node) && !isWhiteSpaceNode$1(node)) {\n            rng.setStart(node, 0);\n            selection.setRng(rng);\n            return;\n          }\n        }\n      }\n    };\n    const getNonWhiteSpaceSibling = (node, next, inc) => {\n      if (node) {\n        const nextName = next ? 'nextSibling' : 'previousSibling';\n        for (node = inc ? node : node[nextName]; node; node = node[nextName]) {\n          if (isElement$6(node) || !isWhiteSpaceNode$1(node)) {\n            return node;\n          }\n        }\n      }\n      return undefined;\n    };\n    const isTextBlock$1 = (schema, node) => !!schema.getTextBlockElements()[node.nodeName.toLowerCase()] || isTransparentBlock(schema, node);\n    const isValid = (ed, parent, child) => {\n      return ed.schema.isValidChild(parent, child);\n    };\n    const isWhiteSpaceNode$1 = (node, allowSpaces = false) => {\n      if (isNonNullable(node) && isText$a(node)) {\n        const data = allowSpaces ? node.data.replace(/ /g, '\\xA0') : node.data;\n        return isWhitespaceText(data);\n      } else {\n        return false;\n      }\n    };\n    const isEmptyTextNode$1 = node => {\n      return isNonNullable(node) && isText$a(node) && node.length === 0;\n    };\n    const isWrapNoneditableTarget = (editor, node) => {\n      const baseDataSelector = '[data-mce-cef-wrappable]';\n      const formatNoneditableSelector = getFormatNoneditableSelector(editor);\n      const selector = isEmpty$3(formatNoneditableSelector) ? baseDataSelector : `${ baseDataSelector },${ formatNoneditableSelector }`;\n      return is$1(SugarElement.fromDom(node), selector);\n    };\n    const isWrappableNoneditable = (editor, node) => {\n      const dom = editor.dom;\n      return isElementNode$1(node) && dom.getContentEditable(node) === 'false' && isWrapNoneditableTarget(editor, node) && dom.select('[contenteditable=\"true\"]', node).length === 0;\n    };\n    const replaceVars = (value, vars) => {\n      if (isFunction(value)) {\n        return value(vars);\n      } else if (isNonNullable(vars)) {\n        value = value.replace(/%(\\w+)/g, (str, name) => {\n          return vars[name] || str;\n        });\n      }\n      return value;\n    };\n    const isEq$5 = (str1, str2) => {\n      str1 = str1 || '';\n      str2 = str2 || '';\n      str1 = '' + (str1.nodeName || str1);\n      str2 = '' + (str2.nodeName || str2);\n      return str1.toLowerCase() === str2.toLowerCase();\n    };\n    const normalizeStyleValue = (value, name) => {\n      if (isNullable(value)) {\n        return null;\n      } else {\n        let strValue = String(value);\n        if (name === 'color' || name === 'backgroundColor') {\n          strValue = rgbaToHexString(strValue);\n        }\n        if (name === 'fontWeight' && value === 700) {\n          strValue = 'bold';\n        }\n        if (name === 'fontFamily') {\n          strValue = strValue.replace(/[\\'\\\"]/g, '').replace(/,\\s+/g, ',');\n        }\n        return strValue;\n      }\n    };\n    const getStyle = (dom, node, name) => {\n      const style = dom.getStyle(node, name);\n      return normalizeStyleValue(style, name);\n    };\n    const getTextDecoration = (dom, node) => {\n      let decoration;\n      dom.getParent(node, n => {\n        if (isElement$6(n)) {\n          decoration = dom.getStyle(n, 'text-decoration');\n          return !!decoration && decoration !== 'none';\n        } else {\n          return false;\n        }\n      });\n      return decoration;\n    };\n    const getParents$2 = (dom, node, selector) => {\n      return dom.getParents(node, selector, dom.getRoot());\n    };\n    const isFormatPredicate = (editor, formatName, predicate) => {\n      const formats = editor.formatter.get(formatName);\n      return isNonNullable(formats) && exists(formats, predicate);\n    };\n    const isVariableFormatName = (editor, formatName) => {\n      const hasVariableValues = format => {\n        const isVariableValue = val => isFunction(val) || val.length > 1 && val.charAt(0) === '%';\n        return exists([\n          'styles',\n          'attributes'\n        ], key => get$a(format, key).exists(field => {\n          const fieldValues = isArray$1(field) ? field : values(field);\n          return exists(fieldValues, isVariableValue);\n        }));\n      };\n      return isFormatPredicate(editor, formatName, hasVariableValues);\n    };\n    const areSimilarFormats = (editor, formatName, otherFormatName) => {\n      const validKeys = [\n        'inline',\n        'block',\n        'selector',\n        'attributes',\n        'styles',\n        'classes'\n      ];\n      const filterObj = format => filter$4(format, (_, key) => exists(validKeys, validKey => validKey === key));\n      return isFormatPredicate(editor, formatName, fmt1 => {\n        const filteredFmt1 = filterObj(fmt1);\n        return isFormatPredicate(editor, otherFormatName, fmt2 => {\n          const filteredFmt2 = filterObj(fmt2);\n          return equal$1(filteredFmt1, filteredFmt2);\n        });\n      });\n    };\n    const isBlockFormat = format => hasNonNullableKey(format, 'block');\n    const isWrappingBlockFormat = format => isBlockFormat(format) && format.wrapper === true;\n    const isNonWrappingBlockFormat = format => isBlockFormat(format) && format.wrapper !== true;\n    const isSelectorFormat = format => hasNonNullableKey(format, 'selector');\n    const isInlineFormat = format => hasNonNullableKey(format, 'inline');\n    const isMixedFormat = format => isSelectorFormat(format) && isInlineFormat(format) && is$2(get$a(format, 'mixed'), true);\n    const shouldExpandToSelector = format => isSelectorFormat(format) && format.expand !== false && !isInlineFormat(format);\n\n    const isBookmarkNode = isBookmarkNode$1;\n    const getParents$1 = getParents$2;\n    const isWhiteSpaceNode = isWhiteSpaceNode$1;\n    const isTextBlock = isTextBlock$1;\n    const isBogusBr = node => {\n      return isBr$6(node) && node.getAttribute('data-mce-bogus') && !node.nextSibling;\n    };\n    const findParentContentEditable = (dom, node) => {\n      let parent = node;\n      while (parent) {\n        if (isElement$6(parent) && dom.getContentEditable(parent)) {\n          return dom.getContentEditable(parent) === 'false' ? parent : node;\n        }\n        parent = parent.parentNode;\n      }\n      return node;\n    };\n    const walkText = (start, node, offset, predicate) => {\n      const str = node.data;\n      if (start) {\n        for (let i = offset; i > 0; i--) {\n          if (predicate(str.charAt(i - 1))) {\n            return i;\n          }\n        }\n      } else {\n        for (let i = offset; i < str.length; i++) {\n          if (predicate(str.charAt(i))) {\n            return i;\n          }\n        }\n      }\n      return -1;\n    };\n    const findSpace = (start, node, offset) => walkText(start, node, offset, c => isNbsp(c) || isWhiteSpace(c));\n    const findContent = (start, node, offset) => walkText(start, node, offset, isContent);\n    const findWordEndPoint = (dom, body, container, offset, start, includeTrailingSpaces) => {\n      let lastTextNode;\n      const rootNode = dom.getParent(container, dom.isBlock) || body;\n      const walk = (container, offset, pred) => {\n        const textSeeker = TextSeeker(dom);\n        const walker = start ? textSeeker.backwards : textSeeker.forwards;\n        return Optional.from(walker(container, offset, (text, textOffset) => {\n          if (isBookmarkNode(text.parentNode)) {\n            return -1;\n          } else {\n            lastTextNode = text;\n            return pred(start, text, textOffset);\n          }\n        }, rootNode));\n      };\n      const spaceResult = walk(container, offset, findSpace);\n      return spaceResult.bind(result => includeTrailingSpaces ? walk(result.container, result.offset + (start ? -1 : 0), findContent) : Optional.some(result)).orThunk(() => lastTextNode ? Optional.some({\n        container: lastTextNode,\n        offset: start ? 0 : lastTextNode.length\n      }) : Optional.none());\n    };\n    const findSelectorEndPoint = (dom, formatList, rng, container, siblingName) => {\n      const sibling = container[siblingName];\n      if (isText$a(container) && isEmpty$3(container.data) && sibling) {\n        container = sibling;\n      }\n      const parents = getParents$1(dom, container);\n      for (let i = 0; i < parents.length; i++) {\n        for (let y = 0; y < formatList.length; y++) {\n          const curFormat = formatList[y];\n          if (isNonNullable(curFormat.collapsed) && curFormat.collapsed !== rng.collapsed) {\n            continue;\n          }\n          if (isSelectorFormat(curFormat) && dom.is(parents[i], curFormat.selector)) {\n            return parents[i];\n          }\n        }\n      }\n      return container;\n    };\n    const findBlockEndPoint = (dom, formatList, container, siblingName) => {\n      var _a;\n      let node = container;\n      const root = dom.getRoot();\n      const format = formatList[0];\n      if (isBlockFormat(format)) {\n        node = format.wrapper ? null : dom.getParent(container, format.block, root);\n      }\n      if (!node) {\n        const scopeRoot = (_a = dom.getParent(container, 'LI,TD,TH')) !== null && _a !== void 0 ? _a : root;\n        node = dom.getParent(isText$a(container) ? container.parentNode : container, node => node !== root && isTextBlock(dom.schema, node), scopeRoot);\n      }\n      if (node && isBlockFormat(format) && format.wrapper) {\n        node = getParents$1(dom, node, 'ul,ol').reverse()[0] || node;\n      }\n      if (!node) {\n        node = container;\n        while (node && node[siblingName] && !dom.isBlock(node[siblingName])) {\n          node = node[siblingName];\n          if (isEq$5(node, 'br')) {\n            break;\n          }\n        }\n      }\n      return node || container;\n    };\n    const isAtBlockBoundary$1 = (dom, root, container, siblingName) => {\n      const parent = container.parentNode;\n      if (isNonNullable(container[siblingName])) {\n        return false;\n      } else if (parent === root || isNullable(parent) || dom.isBlock(parent)) {\n        return true;\n      } else {\n        return isAtBlockBoundary$1(dom, root, parent, siblingName);\n      }\n    };\n    const findParentContainer = (dom, formatList, container, offset, start) => {\n      let parent = container;\n      const siblingName = start ? 'previousSibling' : 'nextSibling';\n      const root = dom.getRoot();\n      if (isText$a(container) && !isWhiteSpaceNode(container)) {\n        if (start ? offset > 0 : offset < container.data.length) {\n          return container;\n        }\n      }\n      while (parent) {\n        if (!formatList[0].block_expand && dom.isBlock(parent)) {\n          return parent;\n        }\n        for (let sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {\n          const allowSpaces = isText$a(sibling) && !isAtBlockBoundary$1(dom, root, sibling, siblingName);\n          if (!isBookmarkNode(sibling) && !isBogusBr(sibling) && !isWhiteSpaceNode(sibling, allowSpaces)) {\n            return parent;\n          }\n        }\n        if (parent === root || parent.parentNode === root) {\n          container = parent;\n          break;\n        }\n        parent = parent.parentNode;\n      }\n      return container;\n    };\n    const isSelfOrParentBookmark = container => isBookmarkNode(container.parentNode) || isBookmarkNode(container);\n    const expandRng = (dom, rng, formatList, includeTrailingSpace = false) => {\n      let {startContainer, startOffset, endContainer, endOffset} = rng;\n      const format = formatList[0];\n      if (isElement$6(startContainer) && startContainer.hasChildNodes()) {\n        startContainer = getNode$1(startContainer, startOffset);\n        if (isText$a(startContainer)) {\n          startOffset = 0;\n        }\n      }\n      if (isElement$6(endContainer) && endContainer.hasChildNodes()) {\n        endContainer = getNode$1(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n        if (isText$a(endContainer)) {\n          endOffset = endContainer.data.length;\n        }\n      }\n      startContainer = findParentContentEditable(dom, startContainer);\n      endContainer = findParentContentEditable(dom, endContainer);\n      if (isSelfOrParentBookmark(startContainer)) {\n        startContainer = isBookmarkNode(startContainer) ? startContainer : startContainer.parentNode;\n        if (rng.collapsed) {\n          startContainer = startContainer.previousSibling || startContainer;\n        } else {\n          startContainer = startContainer.nextSibling || startContainer;\n        }\n        if (isText$a(startContainer)) {\n          startOffset = rng.collapsed ? startContainer.length : 0;\n        }\n      }\n      if (isSelfOrParentBookmark(endContainer)) {\n        endContainer = isBookmarkNode(endContainer) ? endContainer : endContainer.parentNode;\n        if (rng.collapsed) {\n          endContainer = endContainer.nextSibling || endContainer;\n        } else {\n          endContainer = endContainer.previousSibling || endContainer;\n        }\n        if (isText$a(endContainer)) {\n          endOffset = rng.collapsed ? 0 : endContainer.length;\n        }\n      }\n      if (rng.collapsed) {\n        const startPoint = findWordEndPoint(dom, dom.getRoot(), startContainer, startOffset, true, includeTrailingSpace);\n        startPoint.each(({container, offset}) => {\n          startContainer = container;\n          startOffset = offset;\n        });\n        const endPoint = findWordEndPoint(dom, dom.getRoot(), endContainer, endOffset, false, includeTrailingSpace);\n        endPoint.each(({container, offset}) => {\n          endContainer = container;\n          endOffset = offset;\n        });\n      }\n      if (isInlineFormat(format) || format.block_expand) {\n        if (!isInlineFormat(format) || (!isText$a(startContainer) || startOffset === 0)) {\n          startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true);\n        }\n        if (!isInlineFormat(format) || (!isText$a(endContainer) || endOffset === endContainer.data.length)) {\n          endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false);\n        }\n      }\n      if (shouldExpandToSelector(format)) {\n        startContainer = findSelectorEndPoint(dom, formatList, rng, startContainer, 'previousSibling');\n        endContainer = findSelectorEndPoint(dom, formatList, rng, endContainer, 'nextSibling');\n      }\n      if (isBlockFormat(format) || isSelectorFormat(format)) {\n        startContainer = findBlockEndPoint(dom, formatList, startContainer, 'previousSibling');\n        endContainer = findBlockEndPoint(dom, formatList, endContainer, 'nextSibling');\n        if (isBlockFormat(format)) {\n          if (!dom.isBlock(startContainer)) {\n            startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true);\n          }\n          if (!dom.isBlock(endContainer)) {\n            endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false);\n          }\n        }\n      }\n      if (isElement$6(startContainer) && startContainer.parentNode) {\n        startOffset = dom.nodeIndex(startContainer);\n        startContainer = startContainer.parentNode;\n      }\n      if (isElement$6(endContainer) && endContainer.parentNode) {\n        endOffset = dom.nodeIndex(endContainer) + 1;\n        endContainer = endContainer.parentNode;\n      }\n      return {\n        startContainer,\n        startOffset,\n        endContainer,\n        endOffset\n      };\n    };\n\n    const walk$3 = (dom, rng, callback) => {\n      var _a;\n      const startOffset = rng.startOffset;\n      const startContainer = getNode$1(rng.startContainer, startOffset);\n      const endOffset = rng.endOffset;\n      const endContainer = getNode$1(rng.endContainer, endOffset - 1);\n      const exclude = nodes => {\n        const firstNode = nodes[0];\n        if (isText$a(firstNode) && firstNode === startContainer && startOffset >= firstNode.data.length) {\n          nodes.splice(0, 1);\n        }\n        const lastNode = nodes[nodes.length - 1];\n        if (endOffset === 0 && nodes.length > 0 && lastNode === endContainer && isText$a(lastNode)) {\n          nodes.splice(nodes.length - 1, 1);\n        }\n        return nodes;\n      };\n      const collectSiblings = (node, name, endNode) => {\n        const siblings = [];\n        for (; node && node !== endNode; node = node[name]) {\n          siblings.push(node);\n        }\n        return siblings;\n      };\n      const findEndPoint = (node, root) => dom.getParent(node, node => node.parentNode === root, root);\n      const walkBoundary = (startNode, endNode, next) => {\n        const siblingName = next ? 'nextSibling' : 'previousSibling';\n        for (let node = startNode, parent = node.parentNode; node && node !== endNode; node = parent) {\n          parent = node.parentNode;\n          const siblings = collectSiblings(node === startNode ? node : node[siblingName], siblingName);\n          if (siblings.length) {\n            if (!next) {\n              siblings.reverse();\n            }\n            callback(exclude(siblings));\n          }\n        }\n      };\n      if (startContainer === endContainer) {\n        return callback(exclude([startContainer]));\n      }\n      const ancestor = (_a = dom.findCommonAncestor(startContainer, endContainer)) !== null && _a !== void 0 ? _a : dom.getRoot();\n      if (dom.isChildOf(startContainer, endContainer)) {\n        return walkBoundary(startContainer, ancestor, true);\n      }\n      if (dom.isChildOf(endContainer, startContainer)) {\n        return walkBoundary(endContainer, ancestor);\n      }\n      const startPoint = findEndPoint(startContainer, ancestor) || startContainer;\n      const endPoint = findEndPoint(endContainer, ancestor) || endContainer;\n      walkBoundary(startContainer, startPoint, true);\n      const siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint);\n      if (siblings.length) {\n        callback(exclude(siblings));\n      }\n      walkBoundary(endContainer, endPoint);\n    };\n\n    const validBlocks = [\n      'pre[class*=language-][contenteditable=\"false\"]',\n      'figure.image',\n      'div[data-ephox-embed-iri]',\n      'div.tiny-pageembed',\n      'div.mce-toc',\n      'div[data-mce-toc]'\n    ];\n    const isZeroWidth = elem => isText$b(elem) && get$3(elem) === ZWSP$1;\n    const context = (editor, elem, wrapName, nodeName) => parent(elem).fold(() => 'skipping', parent => {\n      if (nodeName === 'br' || isZeroWidth(elem)) {\n        return 'valid';\n      } else if (isAnnotation(elem)) {\n        return 'existing';\n      } else if (isCaretNode(elem.dom)) {\n        return 'caret';\n      } else if (exists(validBlocks, selector => is$1(elem, selector))) {\n        return 'valid-block';\n      } else if (!isValid(editor, wrapName, nodeName) || !isValid(editor, name(parent), wrapName)) {\n        return 'invalid-child';\n      } else {\n        return 'valid';\n      }\n    });\n\n    const applyWordGrab = (editor, rng) => {\n      const r = expandRng(editor.dom, rng, [{ inline: 'span' }]);\n      rng.setStart(r.startContainer, r.startOffset);\n      rng.setEnd(r.endContainer, r.endOffset);\n      editor.selection.setRng(rng);\n    };\n    const applyAnnotation = (elem, masterUId, data, annotationName, decorate, directAnnotation) => {\n      const {uid = masterUId, ...otherData} = data;\n      add$2(elem, annotation());\n      set$3(elem, `${ dataAnnotationId() }`, uid);\n      set$3(elem, `${ dataAnnotation() }`, annotationName);\n      const {attributes = {}, classes = []} = decorate(uid, otherData);\n      setAll$1(elem, attributes);\n      add(elem, classes);\n      if (directAnnotation) {\n        if (classes.length > 0) {\n          set$3(elem, `${ dataAnnotationClasses() }`, classes.join(','));\n        }\n        const attributeNames = keys(attributes);\n        if (attributeNames.length > 0) {\n          set$3(elem, `${ dataAnnotationAttributes() }`, attributeNames.join(','));\n        }\n      }\n    };\n    const removeDirectAnnotation = elem => {\n      remove$7(elem, annotation());\n      remove$a(elem, `${ dataAnnotationId() }`);\n      remove$a(elem, `${ dataAnnotation() }`);\n      remove$a(elem, `${ dataAnnotationActive() }`);\n      const customAttrNames = getOpt(elem, `${ dataAnnotationAttributes() }`).map(names => names.split(',')).getOr([]);\n      const customClasses = getOpt(elem, `${ dataAnnotationClasses() }`).map(names => names.split(',')).getOr([]);\n      each$e(customAttrNames, name => remove$a(elem, name));\n      remove$4(elem, customClasses);\n      remove$a(elem, `${ dataAnnotationClasses() }`);\n      remove$a(elem, `${ dataAnnotationAttributes() }`);\n    };\n    const makeAnnotation = (eDoc, uid, data, annotationName, decorate) => {\n      const master = SugarElement.fromTag('span', eDoc);\n      applyAnnotation(master, uid, data, annotationName, decorate, false);\n      return master;\n    };\n    const annotate = (editor, rng, uid, annotationName, decorate, data) => {\n      const newWrappers = [];\n      const master = makeAnnotation(editor.getDoc(), uid, data, annotationName, decorate);\n      const wrapper = value$2();\n      const finishWrapper = () => {\n        wrapper.clear();\n      };\n      const getOrOpenWrapper = () => wrapper.get().getOrThunk(() => {\n        const nu = shallow$1(master);\n        newWrappers.push(nu);\n        wrapper.set(nu);\n        return nu;\n      });\n      const processElements = elems => {\n        each$e(elems, processElement);\n      };\n      const processElement = elem => {\n        const ctx = context(editor, elem, 'span', name(elem));\n        switch (ctx) {\n        case 'invalid-child': {\n            finishWrapper();\n            const children = children$1(elem);\n            processElements(children);\n            finishWrapper();\n            break;\n          }\n        case 'valid-block': {\n            finishWrapper();\n            applyAnnotation(elem, uid, data, annotationName, decorate, true);\n            break;\n          }\n        case 'valid': {\n            const w = getOrOpenWrapper();\n            wrap$2(elem, w);\n            break;\n          }\n        }\n      };\n      const processNodes = nodes => {\n        const elems = map$3(nodes, SugarElement.fromDom);\n        processElements(elems);\n      };\n      walk$3(editor.dom, rng, nodes => {\n        finishWrapper();\n        processNodes(nodes);\n      });\n      return newWrappers;\n    };\n    const annotateWithBookmark = (editor, name, settings, data) => {\n      editor.undoManager.transact(() => {\n        const selection = editor.selection;\n        const initialRng = selection.getRng();\n        const hasFakeSelection = getCellsFromEditor(editor).length > 0;\n        const masterUid = generate$1('mce-annotation');\n        if (initialRng.collapsed && !hasFakeSelection) {\n          applyWordGrab(editor, initialRng);\n        }\n        if (selection.getRng().collapsed && !hasFakeSelection) {\n          const wrapper = makeAnnotation(editor.getDoc(), masterUid, data, name, settings.decorate);\n          set$1(wrapper, nbsp);\n          selection.getRng().insertNode(wrapper.dom);\n          selection.select(wrapper.dom);\n        } else {\n          preserve(selection, false, () => {\n            runOnRanges(editor, selectionRng => {\n              annotate(editor, selectionRng, masterUid, name, settings.decorate, data);\n            });\n          });\n        }\n      });\n    };\n\n    const Annotator = editor => {\n      const registry = create$c();\n      setup$w(editor, registry);\n      const changes = setup$x(editor, registry);\n      const isSpan = isTag('span');\n      const removeAnnotations = elements => {\n        each$e(elements, element => {\n          if (isSpan(element)) {\n            unwrap(element);\n          } else {\n            removeDirectAnnotation(element);\n          }\n        });\n      };\n      return {\n        register: (name, settings) => {\n          registry.register(name, settings);\n        },\n        annotate: (name, data) => {\n          registry.lookup(name).each(settings => {\n            annotateWithBookmark(editor, name, settings, data);\n          });\n        },\n        annotationChanged: (name, callback) => {\n          changes.addListener(name, callback);\n        },\n        remove: name => {\n          identify(editor, Optional.some(name)).each(({elements}) => {\n            const bookmark = editor.selection.getBookmark();\n            removeAnnotations(elements);\n            editor.selection.moveToBookmark(bookmark);\n          });\n        },\n        removeAll: name => {\n          const bookmark = editor.selection.getBookmark();\n          each$d(findAll(editor, name), (elements, _) => {\n            removeAnnotations(elements);\n          });\n          editor.selection.moveToBookmark(bookmark);\n        },\n        getAll: name => {\n          const directory = findAll(editor, name);\n          return map$2(directory, elems => map$3(elems, elem => elem.dom));\n        }\n      };\n    };\n\n    const BookmarkManager = selection => {\n      return {\n        getBookmark: curry(getBookmark$1, selection),\n        moveToBookmark: curry(moveToBookmark, selection)\n      };\n    };\n    BookmarkManager.isBookmarkNode = isBookmarkNode$1;\n\n    const isXYWithinRange = (clientX, clientY, range) => {\n      if (range.collapsed) {\n        return false;\n      } else {\n        return exists(range.getClientRects(), rect => containsXY(rect, clientX, clientY));\n      }\n    };\n\n    const firePreProcess = (editor, args) => editor.dispatch('PreProcess', args);\n    const firePostProcess = (editor, args) => editor.dispatch('PostProcess', args);\n    const fireRemove = editor => {\n      editor.dispatch('remove');\n    };\n    const fireDetach = editor => {\n      editor.dispatch('detach');\n    };\n    const fireSwitchMode = (editor, mode) => {\n      editor.dispatch('SwitchMode', { mode });\n    };\n    const fireObjectResizeStart = (editor, target, width, height, origin) => {\n      editor.dispatch('ObjectResizeStart', {\n        target,\n        width,\n        height,\n        origin\n      });\n    };\n    const fireObjectResized = (editor, target, width, height, origin) => {\n      editor.dispatch('ObjectResized', {\n        target,\n        width,\n        height,\n        origin\n      });\n    };\n    const firePreInit = editor => {\n      editor.dispatch('PreInit');\n    };\n    const firePostRender = editor => {\n      editor.dispatch('PostRender');\n    };\n    const fireInit = editor => {\n      editor.dispatch('Init');\n    };\n    const firePlaceholderToggle = (editor, state) => {\n      editor.dispatch('PlaceholderToggle', { state });\n    };\n    const fireError = (editor, errorType, error) => {\n      editor.dispatch(errorType, error);\n    };\n    const fireFormatApply = (editor, format, node, vars) => {\n      editor.dispatch('FormatApply', {\n        format,\n        node,\n        vars\n      });\n    };\n    const fireFormatRemove = (editor, format, node, vars) => {\n      editor.dispatch('FormatRemove', {\n        format,\n        node,\n        vars\n      });\n    };\n    const fireBeforeSetContent = (editor, args) => editor.dispatch('BeforeSetContent', args);\n    const fireSetContent = (editor, args) => editor.dispatch('SetContent', args);\n    const fireBeforeGetContent = (editor, args) => editor.dispatch('BeforeGetContent', args);\n    const fireGetContent = (editor, args) => editor.dispatch('GetContent', args);\n    const fireAutocompleterStart = (editor, args) => {\n      editor.dispatch('AutocompleterStart', args);\n    };\n    const fireAutocompleterUpdate = (editor, args) => {\n      editor.dispatch('AutocompleterUpdate', args);\n    };\n    const fireAutocompleterEnd = editor => {\n      editor.dispatch('AutocompleterEnd');\n    };\n    const firePastePreProcess = (editor, html, internal) => editor.dispatch('PastePreProcess', {\n      content: html,\n      internal\n    });\n    const firePastePostProcess = (editor, node, internal) => editor.dispatch('PastePostProcess', {\n      node,\n      internal\n    });\n    const firePastePlainTextToggle = (editor, state) => editor.dispatch('PastePlainTextToggle', { state });\n    const fireEditableRootStateChange = (editor, state) => editor.dispatch('EditableRootStateChange', { state });\n\n    const VK = {\n      BACKSPACE: 8,\n      DELETE: 46,\n      DOWN: 40,\n      ENTER: 13,\n      ESC: 27,\n      LEFT: 37,\n      RIGHT: 39,\n      SPACEBAR: 32,\n      TAB: 9,\n      UP: 38,\n      PAGE_UP: 33,\n      PAGE_DOWN: 34,\n      END: 35,\n      HOME: 36,\n      modifierPressed: e => {\n        return e.shiftKey || e.ctrlKey || e.altKey || VK.metaKeyPressed(e);\n      },\n      metaKeyPressed: e => {\n        return Env.os.isMacOS() || Env.os.isiOS() ? e.metaKey : e.ctrlKey && !e.altKey;\n      }\n    };\n\n    const elementSelectionAttr = 'data-mce-selected';\n    const controlElmSelector = 'table,img,figure.image,hr,video,span.mce-preview-object,details';\n    const abs = Math.abs;\n    const round$1 = Math.round;\n    const resizeHandles = {\n      nw: [\n        0,\n        0,\n        -1,\n        -1\n      ],\n      ne: [\n        1,\n        0,\n        1,\n        -1\n      ],\n      se: [\n        1,\n        1,\n        1,\n        1\n      ],\n      sw: [\n        0,\n        1,\n        -1,\n        1\n      ]\n    };\n    const isTouchEvent = evt => evt.type === 'longpress' || evt.type.indexOf('touch') === 0;\n    const ControlSelection = (selection, editor) => {\n      const dom = editor.dom;\n      const editableDoc = editor.getDoc();\n      const rootDocument = document;\n      const rootElement = editor.getBody();\n      let selectedElm, selectedElmGhost, resizeHelper, selectedHandle, resizeBackdrop;\n      let startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted;\n      let width;\n      let height;\n      let startScrollWidth;\n      let startScrollHeight;\n      const isImage = elm => isNonNullable(elm) && (isImg(elm) || dom.is(elm, 'figure.image'));\n      const isMedia = elm => isMedia$2(elm) || dom.hasClass(elm, 'mce-preview-object');\n      const isEventOnImageOutsideRange = (evt, range) => {\n        if (isTouchEvent(evt)) {\n          const touch = evt.touches[0];\n          return isImage(evt.target) && !isXYWithinRange(touch.clientX, touch.clientY, range);\n        } else {\n          return isImage(evt.target) && !isXYWithinRange(evt.clientX, evt.clientY, range);\n        }\n      };\n      const contextMenuSelectImage = evt => {\n        const target = evt.target;\n        if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n          editor.selection.select(target);\n        }\n      };\n      const getResizeTargets = elm => {\n        if (dom.hasClass(elm, 'mce-preview-object') && isNonNullable(elm.firstElementChild)) {\n          return [\n            elm,\n            elm.firstElementChild\n          ];\n        } else if (dom.is(elm, 'figure.image')) {\n          return [elm.querySelector('img')];\n        } else {\n          return [elm];\n        }\n      };\n      const isResizable = elm => {\n        const selector = getObjectResizing(editor);\n        if (!selector) {\n          return false;\n        }\n        if (elm.getAttribute('data-mce-resize') === 'false') {\n          return false;\n        }\n        if (elm === editor.getBody()) {\n          return false;\n        }\n        if (dom.hasClass(elm, 'mce-preview-object') && isNonNullable(elm.firstElementChild)) {\n          return is$1(SugarElement.fromDom(elm.firstElementChild), selector);\n        } else {\n          return is$1(SugarElement.fromDom(elm), selector);\n        }\n      };\n      const createGhostElement = elm => {\n        if (isMedia(elm)) {\n          return dom.create('img', { src: Env.transparentSrc });\n        } else {\n          return elm.cloneNode(true);\n        }\n      };\n      const setSizeProp = (element, name, value) => {\n        if (isNonNullable(value)) {\n          const targets = getResizeTargets(element);\n          each$e(targets, target => {\n            if (target.style[name] || !editor.schema.isValid(target.nodeName.toLowerCase(), name)) {\n              dom.setStyle(target, name, value);\n            } else {\n              dom.setAttrib(target, name, '' + value);\n            }\n          });\n        }\n      };\n      const setGhostElmSize = (ghostElm, width, height) => {\n        setSizeProp(ghostElm, 'width', width);\n        setSizeProp(ghostElm, 'height', height);\n      };\n      const resizeGhostElement = e => {\n        let deltaX, deltaY, proportional;\n        let resizeHelperX, resizeHelperY;\n        deltaX = e.screenX - startX;\n        deltaY = e.screenY - startY;\n        width = deltaX * selectedHandle[2] + startW;\n        height = deltaY * selectedHandle[3] + startH;\n        width = width < 5 ? 5 : width;\n        height = height < 5 ? 5 : height;\n        if ((isImage(selectedElm) || isMedia(selectedElm)) && getResizeImgProportional(editor) !== false) {\n          proportional = !VK.modifierPressed(e);\n        } else {\n          proportional = VK.modifierPressed(e);\n        }\n        if (proportional) {\n          if (abs(deltaX) > abs(deltaY)) {\n            height = round$1(width * ratio);\n            width = round$1(height / ratio);\n          } else {\n            width = round$1(height / ratio);\n            height = round$1(width * ratio);\n          }\n        }\n        setGhostElmSize(selectedElmGhost, width, height);\n        resizeHelperX = selectedHandle.startPos.x + deltaX;\n        resizeHelperY = selectedHandle.startPos.y + deltaY;\n        resizeHelperX = resizeHelperX > 0 ? resizeHelperX : 0;\n        resizeHelperY = resizeHelperY > 0 ? resizeHelperY : 0;\n        dom.setStyles(resizeHelper, {\n          left: resizeHelperX,\n          top: resizeHelperY,\n          display: 'block'\n        });\n        resizeHelper.innerHTML = width + ' &times; ' + height;\n        if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) {\n          dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width));\n        }\n        if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) {\n          dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height));\n        }\n        deltaX = rootElement.scrollWidth - startScrollWidth;\n        deltaY = rootElement.scrollHeight - startScrollHeight;\n        if (deltaX + deltaY !== 0) {\n          dom.setStyles(resizeHelper, {\n            left: resizeHelperX - deltaX,\n            top: resizeHelperY - deltaY\n          });\n        }\n        if (!resizeStarted) {\n          fireObjectResizeStart(editor, selectedElm, startW, startH, 'corner-' + selectedHandle.name);\n          resizeStarted = true;\n        }\n      };\n      const endGhostResize = () => {\n        const wasResizeStarted = resizeStarted;\n        resizeStarted = false;\n        if (wasResizeStarted) {\n          setSizeProp(selectedElm, 'width', width);\n          setSizeProp(selectedElm, 'height', height);\n        }\n        dom.unbind(editableDoc, 'mousemove', resizeGhostElement);\n        dom.unbind(editableDoc, 'mouseup', endGhostResize);\n        if (rootDocument !== editableDoc) {\n          dom.unbind(rootDocument, 'mousemove', resizeGhostElement);\n          dom.unbind(rootDocument, 'mouseup', endGhostResize);\n        }\n        dom.remove(selectedElmGhost);\n        dom.remove(resizeHelper);\n        dom.remove(resizeBackdrop);\n        showResizeRect(selectedElm);\n        if (wasResizeStarted) {\n          fireObjectResized(editor, selectedElm, width, height, 'corner-' + selectedHandle.name);\n          dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));\n        }\n        editor.nodeChanged();\n      };\n      const showResizeRect = targetElm => {\n        unbindResizeHandleEvents();\n        const position = dom.getPos(targetElm, rootElement);\n        const selectedElmX = position.x;\n        const selectedElmY = position.y;\n        const rect = targetElm.getBoundingClientRect();\n        const targetWidth = rect.width || rect.right - rect.left;\n        const targetHeight = rect.height || rect.bottom - rect.top;\n        if (selectedElm !== targetElm) {\n          hideResizeRect();\n          selectedElm = targetElm;\n          width = height = 0;\n        }\n        const e = editor.dispatch('ObjectSelected', { target: targetElm });\n        if (isResizable(targetElm) && !e.isDefaultPrevented()) {\n          each$d(resizeHandles, (handle, name) => {\n            const startDrag = e => {\n              const target = getResizeTargets(selectedElm)[0];\n              startX = e.screenX;\n              startY = e.screenY;\n              startW = target.clientWidth;\n              startH = target.clientHeight;\n              ratio = startH / startW;\n              selectedHandle = handle;\n              selectedHandle.name = name;\n              selectedHandle.startPos = {\n                x: targetWidth * handle[0] + selectedElmX,\n                y: targetHeight * handle[1] + selectedElmY\n              };\n              startScrollWidth = rootElement.scrollWidth;\n              startScrollHeight = rootElement.scrollHeight;\n              resizeBackdrop = dom.add(rootElement, 'div', {\n                'class': 'mce-resize-backdrop',\n                'data-mce-bogus': 'all'\n              });\n              dom.setStyles(resizeBackdrop, {\n                position: 'fixed',\n                left: '0',\n                top: '0',\n                width: '100%',\n                height: '100%'\n              });\n              selectedElmGhost = createGhostElement(selectedElm);\n              dom.addClass(selectedElmGhost, 'mce-clonedresizable');\n              dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');\n              selectedElmGhost.contentEditable = 'false';\n              dom.setStyles(selectedElmGhost, {\n                left: selectedElmX,\n                top: selectedElmY,\n                margin: 0\n              });\n              setGhostElmSize(selectedElmGhost, targetWidth, targetHeight);\n              selectedElmGhost.removeAttribute(elementSelectionAttr);\n              rootElement.appendChild(selectedElmGhost);\n              dom.bind(editableDoc, 'mousemove', resizeGhostElement);\n              dom.bind(editableDoc, 'mouseup', endGhostResize);\n              if (rootDocument !== editableDoc) {\n                dom.bind(rootDocument, 'mousemove', resizeGhostElement);\n                dom.bind(rootDocument, 'mouseup', endGhostResize);\n              }\n              resizeHelper = dom.add(rootElement, 'div', {\n                'class': 'mce-resize-helper',\n                'data-mce-bogus': 'all'\n              }, startW + ' &times; ' + startH);\n            };\n            let handleElm = dom.get('mceResizeHandle' + name);\n            if (handleElm) {\n              dom.remove(handleElm);\n            }\n            handleElm = dom.add(rootElement, 'div', {\n              'id': 'mceResizeHandle' + name,\n              'data-mce-bogus': 'all',\n              'class': 'mce-resizehandle',\n              'unselectable': true,\n              'style': 'cursor:' + name + '-resize; margin:0; padding:0'\n            });\n            dom.bind(handleElm, 'mousedown', e => {\n              e.stopImmediatePropagation();\n              e.preventDefault();\n              startDrag(e);\n            });\n            handle.elm = handleElm;\n            dom.setStyles(handleElm, {\n              left: targetWidth * handle[0] + selectedElmX - handleElm.offsetWidth / 2,\n              top: targetHeight * handle[1] + selectedElmY - handleElm.offsetHeight / 2\n            });\n          });\n        } else {\n          hideResizeRect(false);\n        }\n      };\n      const throttledShowResizeRect = first$1(showResizeRect, 0);\n      const hideResizeRect = (removeSelected = true) => {\n        throttledShowResizeRect.cancel();\n        unbindResizeHandleEvents();\n        if (selectedElm && removeSelected) {\n          selectedElm.removeAttribute(elementSelectionAttr);\n        }\n        each$d(resizeHandles, (value, name) => {\n          const handleElm = dom.get('mceResizeHandle' + name);\n          if (handleElm) {\n            dom.unbind(handleElm);\n            dom.remove(handleElm);\n          }\n        });\n      };\n      const isChildOrEqual = (node, parent) => dom.isChildOf(node, parent);\n      const updateResizeRect = e => {\n        if (resizeStarted || editor.removed || editor.composing) {\n          return;\n        }\n        const targetElm = e.type === 'mousedown' ? e.target : selection.getNode();\n        const controlElm = closest$3(SugarElement.fromDom(targetElm), controlElmSelector).map(e => e.dom).filter(e => dom.isEditable(e.parentElement)).getOrUndefined();\n        const selectedValue = isNonNullable(controlElm) ? dom.getAttrib(controlElm, elementSelectionAttr, '1') : '1';\n        each$e(dom.select(`img[${ elementSelectionAttr }],hr[${ elementSelectionAttr }]`), img => {\n          img.removeAttribute(elementSelectionAttr);\n        });\n        if (isNonNullable(controlElm) && isChildOrEqual(controlElm, rootElement) && editor.hasFocus()) {\n          disableGeckoResize();\n          const startElm = selection.getStart(true);\n          if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {\n            dom.setAttrib(controlElm, elementSelectionAttr, selectedValue);\n            throttledShowResizeRect.throttle(controlElm);\n            return;\n          }\n        }\n        hideResizeRect();\n      };\n      const unbindResizeHandleEvents = () => {\n        each$d(resizeHandles, handle => {\n          if (handle.elm) {\n            dom.unbind(handle.elm);\n            delete handle.elm;\n          }\n        });\n      };\n      const disableGeckoResize = () => {\n        try {\n          editor.getDoc().execCommand('enableObjectResizing', false, 'false');\n        } catch (ex) {\n        }\n      };\n      editor.on('init', () => {\n        disableGeckoResize();\n        editor.on('NodeChange ResizeEditor ResizeWindow ResizeContent drop', updateResizeRect);\n        editor.on('keyup compositionend', e => {\n          if (selectedElm && selectedElm.nodeName === 'TABLE') {\n            updateResizeRect(e);\n          }\n        });\n        editor.on('hide blur', hideResizeRect);\n        editor.on('contextmenu longpress', contextMenuSelectImage, true);\n      });\n      editor.on('remove', unbindResizeHandleEvents);\n      const destroy = () => {\n        throttledShowResizeRect.cancel();\n        selectedElm = selectedElmGhost = resizeBackdrop = null;\n      };\n      return {\n        isResizable,\n        showResizeRect,\n        hideResizeRect,\n        updateResizeRect,\n        destroy\n      };\n    };\n\n    const setStart = (rng, situ) => {\n      situ.fold(e => {\n        rng.setStartBefore(e.dom);\n      }, (e, o) => {\n        rng.setStart(e.dom, o);\n      }, e => {\n        rng.setStartAfter(e.dom);\n      });\n    };\n    const setFinish = (rng, situ) => {\n      situ.fold(e => {\n        rng.setEndBefore(e.dom);\n      }, (e, o) => {\n        rng.setEnd(e.dom, o);\n      }, e => {\n        rng.setEndAfter(e.dom);\n      });\n    };\n    const relativeToNative = (win, startSitu, finishSitu) => {\n      const range = win.document.createRange();\n      setStart(range, startSitu);\n      setFinish(range, finishSitu);\n      return range;\n    };\n    const exactToNative = (win, start, soffset, finish, foffset) => {\n      const rng = win.document.createRange();\n      rng.setStart(start.dom, soffset);\n      rng.setEnd(finish.dom, foffset);\n      return rng;\n    };\n\n    const adt$3 = Adt.generate([\n      {\n        ltr: [\n          'start',\n          'soffset',\n          'finish',\n          'foffset'\n        ]\n      },\n      {\n        rtl: [\n          'start',\n          'soffset',\n          'finish',\n          'foffset'\n        ]\n      }\n    ]);\n    const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n    const getRanges = (win, selection) => selection.match({\n      domRange: rng => {\n        return {\n          ltr: constant(rng),\n          rtl: Optional.none\n        };\n      },\n      relative: (startSitu, finishSitu) => {\n        return {\n          ltr: cached(() => relativeToNative(win, startSitu, finishSitu)),\n          rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu)))\n        };\n      },\n      exact: (start, soffset, finish, foffset) => {\n        return {\n          ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)),\n          rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset)))\n        };\n      }\n    });\n    const doDiagnose = (win, ranges) => {\n      const rng = ranges.ltr();\n      if (rng.collapsed) {\n        const reversed = ranges.rtl().filter(rev => rev.collapsed === false);\n        return reversed.map(rev => adt$3.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$3.ltr, rng));\n      } else {\n        return fromRange(win, adt$3.ltr, rng);\n      }\n    };\n    const diagnose = (win, selection) => {\n      const ranges = getRanges(win, selection);\n      return doDiagnose(win, ranges);\n    };\n    adt$3.ltr;\n    adt$3.rtl;\n\n    const create$a = (start, soffset, finish, foffset) => ({\n      start,\n      soffset,\n      finish,\n      foffset\n    });\n    const SimRange = { create: create$a };\n\n    const caretPositionFromPoint = (doc, x, y) => {\n      var _a, _b;\n      return Optional.from((_b = (_a = doc.dom).caretPositionFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y)).bind(pos => {\n        if (pos.offsetNode === null) {\n          return Optional.none();\n        }\n        const r = doc.dom.createRange();\n        r.setStart(pos.offsetNode, pos.offset);\n        r.collapse();\n        return Optional.some(r);\n      });\n    };\n    const caretRangeFromPoint = (doc, x, y) => {\n      var _a, _b;\n      return Optional.from((_b = (_a = doc.dom).caretRangeFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y));\n    };\n    const availableSearch = (() => {\n      if (document.caretPositionFromPoint) {\n        return caretPositionFromPoint;\n      } else if (document.caretRangeFromPoint) {\n        return caretRangeFromPoint;\n      } else {\n        return Optional.none;\n      }\n    })();\n    const fromPoint$1 = (win, x, y) => {\n      const doc = SugarElement.fromDom(win.document);\n      return availableSearch(doc, x, y).map(rng => SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n    };\n\n    const adt$2 = Adt.generate([\n      { before: ['element'] },\n      {\n        on: [\n          'element',\n          'offset'\n        ]\n      },\n      { after: ['element'] }\n    ]);\n    const cata = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n    const getStart$2 = situ => situ.fold(identity, identity, identity);\n    const before$1 = adt$2.before;\n    const on = adt$2.on;\n    const after$1 = adt$2.after;\n    const Situ = {\n      before: before$1,\n      on,\n      after: after$1,\n      cata,\n      getStart: getStart$2\n    };\n\n    const adt$1 = Adt.generate([\n      { domRange: ['rng'] },\n      {\n        relative: [\n          'startSitu',\n          'finishSitu'\n        ]\n      },\n      {\n        exact: [\n          'start',\n          'soffset',\n          'finish',\n          'foffset'\n        ]\n      }\n    ]);\n    const exactFromRange = simRange => adt$1.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n    const getStart$1 = selection => selection.match({\n      domRange: rng => SugarElement.fromDom(rng.startContainer),\n      relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n      exact: (start, _soffset, _finish, _foffset) => start\n    });\n    const domRange = adt$1.domRange;\n    const relative = adt$1.relative;\n    const exact = adt$1.exact;\n    const getWin = selection => {\n      const start = getStart$1(selection);\n      return defaultView(start);\n    };\n    const range = SimRange.create;\n    const SimSelection = {\n      domRange,\n      relative,\n      exact,\n      exactFromRange,\n      getWin,\n      range\n    };\n\n    const beforeSpecial = (element, offset) => {\n      const name$1 = name(element);\n      if ('input' === name$1) {\n        return Situ.after(element);\n      } else if (!contains$2([\n          'br',\n          'img'\n        ], name$1)) {\n        return Situ.on(element, offset);\n      } else {\n        return offset === 0 ? Situ.before(element) : Situ.after(element);\n      }\n    };\n    const preprocessRelative = (startSitu, finishSitu) => {\n      const start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n      const finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n      return SimSelection.relative(start, finish);\n    };\n    const preprocessExact = (start, soffset, finish, foffset) => {\n      const startSitu = beforeSpecial(start, soffset);\n      const finishSitu = beforeSpecial(finish, foffset);\n      return SimSelection.relative(startSitu, finishSitu);\n    };\n    const preprocess = selection => selection.match({\n      domRange: rng => {\n        const start = SugarElement.fromDom(rng.startContainer);\n        const finish = SugarElement.fromDom(rng.endContainer);\n        return preprocessExact(start, rng.startOffset, finish, rng.endOffset);\n      },\n      relative: preprocessRelative,\n      exact: preprocessExact\n    });\n\n    const fromElements = (elements, scope) => {\n      const doc = scope || document;\n      const fragment = doc.createDocumentFragment();\n      each$e(elements, element => {\n        fragment.appendChild(element.dom);\n      });\n      return SugarElement.fromDom(fragment);\n    };\n\n    const toNative = selection => {\n      const win = SimSelection.getWin(selection).dom;\n      const getDomRange = (start, soffset, finish, foffset) => exactToNative(win, start, soffset, finish, foffset);\n      const filtered = preprocess(selection);\n      return diagnose(win, filtered).match({\n        ltr: getDomRange,\n        rtl: getDomRange\n      });\n    };\n    const getAtPoint = (win, x, y) => fromPoint$1(win, x, y);\n\n    const fromPoint = (clientX, clientY, doc) => {\n      const win = defaultView(SugarElement.fromDom(doc));\n      return getAtPoint(win.dom, clientX, clientY).map(simRange => {\n        const rng = doc.createRange();\n        rng.setStart(simRange.start.dom, simRange.soffset);\n        rng.setEnd(simRange.finish.dom, simRange.foffset);\n        return rng;\n      }).getOrUndefined();\n    };\n\n    const isEq$4 = (rng1, rng2) => {\n      return isNonNullable(rng1) && isNonNullable(rng2) && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);\n    };\n\n    const findParent = (node, rootNode, predicate) => {\n      let currentNode = node;\n      while (currentNode && currentNode !== rootNode) {\n        if (predicate(currentNode)) {\n          return currentNode;\n        }\n        currentNode = currentNode.parentNode;\n      }\n      return null;\n    };\n    const hasParent$1 = (node, rootNode, predicate) => findParent(node, rootNode, predicate) !== null;\n    const hasParentWithName = (node, rootNode, name) => hasParent$1(node, rootNode, node => node.nodeName === name);\n    const isCeFalseCaretContainer = (node, rootNode) => isCaretContainer$2(node) && !hasParent$1(node, rootNode, isCaretNode);\n    const hasBrBeforeAfter = (dom, node, left) => {\n      const parentNode = node.parentNode;\n      if (parentNode) {\n        const walker = new DomTreeWalker(node, dom.getParent(parentNode, dom.isBlock) || dom.getRoot());\n        let currentNode;\n        while (currentNode = walker[left ? 'prev' : 'next']()) {\n          if (isBr$6(currentNode)) {\n            return true;\n          }\n        }\n      }\n      return false;\n    };\n    const isPrevNode = (node, name) => {\n      var _a;\n      return ((_a = node.previousSibling) === null || _a === void 0 ? void 0 : _a.nodeName) === name;\n    };\n    const hasContentEditableFalseParent = (root, node) => {\n      let currentNode = node;\n      while (currentNode && currentNode !== root) {\n        if (isContentEditableFalse$b(currentNode)) {\n          return true;\n        }\n        currentNode = currentNode.parentNode;\n      }\n      return false;\n    };\n    const findTextNodeRelative = (dom, isAfterNode, collapsed, left, startNode) => {\n      const body = dom.getRoot();\n      const nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n      const parentNode = startNode.parentNode;\n      let lastInlineElement;\n      let node;\n      if (!parentNode) {\n        return Optional.none();\n      }\n      const parentBlockContainer = dom.getParent(parentNode, dom.isBlock) || body;\n      if (left && isBr$6(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {\n        return Optional.some(CaretPosition(parentNode, dom.nodeIndex(startNode)));\n      }\n      const walker = new DomTreeWalker(startNode, parentBlockContainer);\n      while (node = walker[left ? 'prev' : 'next']()) {\n        if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) {\n          return Optional.none();\n        }\n        if (isText$a(node) && node.data.length > 0) {\n          if (!hasParentWithName(node, body, 'A')) {\n            return Optional.some(CaretPosition(node, left ? node.data.length : 0));\n          }\n          return Optional.none();\n        }\n        if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n          return Optional.none();\n        }\n        lastInlineElement = node;\n      }\n      if (isComment(lastInlineElement)) {\n        return Optional.none();\n      }\n      if (collapsed && lastInlineElement) {\n        return Optional.some(CaretPosition(lastInlineElement, 0));\n      }\n      return Optional.none();\n    };\n    const normalizeEndPoint = (dom, collapsed, start, rng) => {\n      const body = dom.getRoot();\n      let node;\n      let normalized = false;\n      let container = start ? rng.startContainer : rng.endContainer;\n      let offset = start ? rng.startOffset : rng.endOffset;\n      const isAfterNode = isElement$6(container) && offset === container.childNodes.length;\n      const nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n      let directionLeft = start;\n      if (isCaretContainer$2(container)) {\n        return Optional.none();\n      }\n      if (isElement$6(container) && offset > container.childNodes.length - 1) {\n        directionLeft = false;\n      }\n      if (isDocument$1(container)) {\n        container = body;\n        offset = 0;\n      }\n      if (container === body) {\n        if (directionLeft) {\n          node = container.childNodes[offset > 0 ? offset - 1 : 0];\n          if (node) {\n            if (isCaretContainer$2(node)) {\n              return Optional.none();\n            }\n            if (nonEmptyElementsMap[node.nodeName] || isTable$2(node)) {\n              return Optional.none();\n            }\n          }\n        }\n        if (container.hasChildNodes()) {\n          offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1);\n          container = container.childNodes[offset];\n          offset = isText$a(container) && isAfterNode ? container.data.length : 0;\n          if (!collapsed && container === body.lastChild && isTable$2(container)) {\n            return Optional.none();\n          }\n          if (hasContentEditableFalseParent(body, container) || isCaretContainer$2(container)) {\n            return Optional.none();\n          }\n          if (container.hasChildNodes() && !isTable$2(container)) {\n            node = container;\n            const walker = new DomTreeWalker(container, body);\n            do {\n              if (isContentEditableFalse$b(node) || isCaretContainer$2(node)) {\n                normalized = false;\n                break;\n              }\n              if (isText$a(node) && node.data.length > 0) {\n                offset = directionLeft ? 0 : node.data.length;\n                container = node;\n                normalized = true;\n                break;\n              }\n              if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCellOrCaption(node)) {\n                offset = dom.nodeIndex(node);\n                container = node.parentNode;\n                if (!directionLeft) {\n                  offset++;\n                }\n                normalized = true;\n                break;\n              }\n            } while (node = directionLeft ? walker.next() : walker.prev());\n          }\n        }\n      }\n      if (collapsed) {\n        if (isText$a(container) && offset === 0) {\n          findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(pos => {\n            container = pos.container();\n            offset = pos.offset();\n            normalized = true;\n          });\n        }\n        if (isElement$6(container)) {\n          node = container.childNodes[offset];\n          if (!node) {\n            node = container.childNodes[offset - 1];\n          }\n          if (node && isBr$6(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) {\n            findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(pos => {\n              container = pos.container();\n              offset = pos.offset();\n              normalized = true;\n            });\n          }\n        }\n      }\n      if (directionLeft && !collapsed && isText$a(container) && offset === container.data.length) {\n        findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(pos => {\n          container = pos.container();\n          offset = pos.offset();\n          normalized = true;\n        });\n      }\n      return normalized && container ? Optional.some(CaretPosition(container, offset)) : Optional.none();\n    };\n    const normalize$2 = (dom, rng) => {\n      const collapsed = rng.collapsed, normRng = rng.cloneRange();\n      const startPos = CaretPosition.fromRangeStart(rng);\n      normalizeEndPoint(dom, collapsed, true, normRng).each(pos => {\n        if (!collapsed || !CaretPosition.isAbove(startPos, pos)) {\n          normRng.setStart(pos.container(), pos.offset());\n        }\n      });\n      if (!collapsed) {\n        normalizeEndPoint(dom, collapsed, false, normRng).each(pos => {\n          normRng.setEnd(pos.container(), pos.offset());\n        });\n      }\n      if (collapsed) {\n        normRng.collapse(true);\n      }\n      return isEq$4(rng, normRng) ? Optional.none() : Optional.some(normRng);\n    };\n\n    const splitText = (node, offset) => {\n      return node.splitText(offset);\n    };\n    const split = rng => {\n      let startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n      if (startContainer === endContainer && isText$a(startContainer)) {\n        if (startOffset > 0 && startOffset < startContainer.data.length) {\n          endContainer = splitText(startContainer, startOffset);\n          startContainer = endContainer.previousSibling;\n          if (endOffset > startOffset) {\n            endOffset = endOffset - startOffset;\n            const newContainer = splitText(endContainer, endOffset).previousSibling;\n            startContainer = endContainer = newContainer;\n            endOffset = newContainer.data.length;\n            startOffset = 0;\n          } else {\n            endOffset = 0;\n          }\n        }\n      } else {\n        if (isText$a(startContainer) && startOffset > 0 && startOffset < startContainer.data.length) {\n          startContainer = splitText(startContainer, startOffset);\n          startOffset = 0;\n        }\n        if (isText$a(endContainer) && endOffset > 0 && endOffset < endContainer.data.length) {\n          const newContainer = splitText(endContainer, endOffset).previousSibling;\n          endContainer = newContainer;\n          endOffset = newContainer.data.length;\n        }\n      }\n      return {\n        startContainer,\n        startOffset,\n        endContainer,\n        endOffset\n      };\n    };\n\n    const RangeUtils = dom => {\n      const walk = (rng, callback) => {\n        return walk$3(dom, rng, callback);\n      };\n      const split$1 = split;\n      const normalize = rng => {\n        return normalize$2(dom, rng).fold(never, normalizedRng => {\n          rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);\n          rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);\n          return true;\n        });\n      };\n      const expand = (rng, options = { type: 'word' }) => {\n        if (options.type === 'word') {\n          const rangeLike = expandRng(dom, rng, [{ inline: 'span' }]);\n          const newRange = dom.createRng();\n          newRange.setStart(rangeLike.startContainer, rangeLike.startOffset);\n          newRange.setEnd(rangeLike.endContainer, rangeLike.endOffset);\n          return newRange;\n        }\n        return rng;\n      };\n      return {\n        walk,\n        split: split$1,\n        expand,\n        normalize\n      };\n    };\n    RangeUtils.compareRanges = isEq$4;\n    RangeUtils.getCaretRangeFromPoint = fromPoint;\n    RangeUtils.getSelectedNode = getSelectedNode;\n    RangeUtils.getNode = getNode$1;\n\n    const Dimension = (name, getOffset) => {\n      const set = (element, h) => {\n        if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n          throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n        }\n        const dom = element.dom;\n        if (isSupported(dom)) {\n          dom.style[name] = h + 'px';\n        }\n      };\n      const get = element => {\n        const r = getOffset(element);\n        if (r <= 0 || r === null) {\n          const css = get$7(element, name);\n          return parseFloat(css) || 0;\n        }\n        return r;\n      };\n      const getOuter = get;\n      const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n        const val = get$7(element, property);\n        const value = val === undefined ? 0 : parseInt(val, 10);\n        return isNaN(value) ? acc : acc + value;\n      }, 0);\n      const max = (element, value, properties) => {\n        const cumulativeInclusions = aggregate(element, properties);\n        const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n        return absoluteMax;\n      };\n      return {\n        set,\n        get,\n        getOuter,\n        aggregate,\n        max\n      };\n    };\n\n    const api = Dimension('height', element => {\n      const dom = element.dom;\n      return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n    });\n    const get$2 = element => api.get(element);\n\n    const getDocument = () => SugarElement.fromDom(document);\n\n    const walkUp = (navigation, doc) => {\n      const frame = navigation.view(doc);\n      return frame.fold(constant([]), f => {\n        const parent = navigation.owner(f);\n        const rest = walkUp(navigation, parent);\n        return [f].concat(rest);\n      });\n    };\n    const pathTo = (element, navigation) => {\n      const d = navigation.owner(element);\n      return walkUp(navigation, d);\n    };\n\n    const view = doc => {\n      var _a;\n      const element = doc.dom === document ? Optional.none() : Optional.from((_a = doc.dom.defaultView) === null || _a === void 0 ? void 0 : _a.frameElement);\n      return element.map(SugarElement.fromDom);\n    };\n    const owner = element => documentOrOwner(element);\n\n    var Navigation = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        view: view,\n        owner: owner\n    });\n\n    const find = element => {\n      const doc = getDocument();\n      const scroll = get$5(doc);\n      const frames = pathTo(element, Navigation);\n      const offset = viewport(element);\n      const r = foldr(frames, (b, a) => {\n        const loc = viewport(a);\n        return {\n          left: b.left + loc.left,\n          top: b.top + loc.top\n        };\n      }, {\n        left: 0,\n        top: 0\n      });\n      return SugarPosition(r.left + offset.left + scroll.left, r.top + offset.top + scroll.top);\n    };\n\n    const excludeFromDescend = element => name(element) === 'textarea';\n    const fireScrollIntoViewEvent = (editor, data) => {\n      const scrollEvent = editor.dispatch('ScrollIntoView', data);\n      return scrollEvent.isDefaultPrevented();\n    };\n    const fireAfterScrollIntoViewEvent = (editor, data) => {\n      editor.dispatch('AfterScrollIntoView', data);\n    };\n    const descend = (element, offset) => {\n      const children = children$1(element);\n      if (children.length === 0 || excludeFromDescend(element)) {\n        return {\n          element,\n          offset\n        };\n      } else if (offset < children.length && !excludeFromDescend(children[offset])) {\n        return {\n          element: children[offset],\n          offset: 0\n        };\n      } else {\n        const last = children[children.length - 1];\n        if (excludeFromDescend(last)) {\n          return {\n            element,\n            offset\n          };\n        } else {\n          if (name(last) === 'img') {\n            return {\n              element: last,\n              offset: 1\n            };\n          } else if (isText$b(last)) {\n            return {\n              element: last,\n              offset: get$3(last).length\n            };\n          } else {\n            return {\n              element: last,\n              offset: children$1(last).length\n            };\n          }\n        }\n      }\n    };\n    const markerInfo = (element, cleanupFun) => {\n      const pos = absolute(element);\n      const height = get$2(element);\n      return {\n        element,\n        bottom: pos.top + height,\n        height,\n        pos,\n        cleanup: cleanupFun\n      };\n    };\n    const createMarker$1 = (element, offset) => {\n      const startPoint = descend(element, offset);\n      const span = SugarElement.fromHtml('<span data-mce-bogus=\"all\" style=\"display: inline-block;\">' + ZWSP$1 + '</span>');\n      before$3(startPoint.element, span);\n      return markerInfo(span, () => remove$5(span));\n    };\n    const elementMarker = element => markerInfo(SugarElement.fromDom(element), noop);\n    const withMarker = (editor, f, rng, alignToTop) => {\n      preserveWith(editor, (_s, _e) => applyWithMarker(editor, f, rng, alignToTop), rng);\n    };\n    const withScrollEvents = (editor, doc, f, marker, alignToTop) => {\n      const data = {\n        elm: marker.element.dom,\n        alignToTop\n      };\n      if (fireScrollIntoViewEvent(editor, data)) {\n        return;\n      }\n      const scrollTop = get$5(doc).top;\n      f(doc, scrollTop, marker, alignToTop);\n      fireAfterScrollIntoViewEvent(editor, data);\n    };\n    const applyWithMarker = (editor, f, rng, alignToTop) => {\n      const body = SugarElement.fromDom(editor.getBody());\n      const doc = SugarElement.fromDom(editor.getDoc());\n      reflow(body);\n      const marker = createMarker$1(SugarElement.fromDom(rng.startContainer), rng.startOffset);\n      withScrollEvents(editor, doc, f, marker, alignToTop);\n      marker.cleanup();\n    };\n    const withElement = (editor, element, f, alignToTop) => {\n      const doc = SugarElement.fromDom(editor.getDoc());\n      withScrollEvents(editor, doc, f, elementMarker(element), alignToTop);\n    };\n    const preserveWith = (editor, f, rng) => {\n      const startElement = rng.startContainer;\n      const startOffset = rng.startOffset;\n      const endElement = rng.endContainer;\n      const endOffset = rng.endOffset;\n      f(SugarElement.fromDom(startElement), SugarElement.fromDom(endElement));\n      const newRng = editor.dom.createRng();\n      newRng.setStart(startElement, startOffset);\n      newRng.setEnd(endElement, endOffset);\n      editor.selection.setRng(rng);\n    };\n    const scrollToMarker = (marker, alignToTop) => marker.element.dom.scrollIntoView({ block: alignToTop ? 'start' : 'end' });\n    const intoWindowIfNeeded = (scrollTop, viewHeight, marker, alignToTop) => {\n      const viewportBottom = viewHeight + scrollTop;\n      const markerTop = marker.pos.top;\n      const markerBottom = marker.bottom;\n      const largerThanViewport = markerBottom - markerTop >= viewHeight;\n      if (markerTop < scrollTop) {\n        scrollToMarker(marker, alignToTop !== false);\n      } else if (markerTop > viewportBottom) {\n        const align = largerThanViewport ? alignToTop !== false : alignToTop === true;\n        scrollToMarker(marker, align);\n      } else if (markerBottom > viewportBottom && !largerThanViewport) {\n        scrollToMarker(marker, alignToTop === true);\n      }\n    };\n    const intoWindow = (doc, scrollTop, marker, alignToTop) => {\n      const viewHeight = defaultView(doc).dom.innerHeight;\n      intoWindowIfNeeded(scrollTop, viewHeight, marker, alignToTop);\n    };\n    const intoFrame = (doc, scrollTop, marker, alignToTop) => {\n      const frameViewHeight = defaultView(doc).dom.innerHeight;\n      intoWindowIfNeeded(scrollTop, frameViewHeight, marker, alignToTop);\n      const op = find(marker.element);\n      const viewportBounds = getBounds(window);\n      if (op.top < viewportBounds.y) {\n        intoView(marker.element, alignToTop !== false);\n      } else if (op.top > viewportBounds.bottom) {\n        intoView(marker.element, alignToTop === true);\n      }\n    };\n    const rangeIntoWindow = (editor, rng, alignToTop) => withMarker(editor, intoWindow, rng, alignToTop);\n    const elementIntoWindow = (editor, element, alignToTop) => withElement(editor, element, intoWindow, alignToTop);\n    const rangeIntoFrame = (editor, rng, alignToTop) => withMarker(editor, intoFrame, rng, alignToTop);\n    const elementIntoFrame = (editor, element, alignToTop) => withElement(editor, element, intoFrame, alignToTop);\n    const scrollElementIntoView = (editor, element, alignToTop) => {\n      const scroller = editor.inline ? elementIntoWindow : elementIntoFrame;\n      scroller(editor, element, alignToTop);\n    };\n    const scrollRangeIntoView = (editor, rng, alignToTop) => {\n      const scroller = editor.inline ? rangeIntoWindow : rangeIntoFrame;\n      scroller(editor, rng, alignToTop);\n    };\n\n    const focus$1 = element => element.dom.focus();\n    const hasFocus$1 = element => {\n      const root = getRootNode(element).dom;\n      return element.dom === root.activeElement;\n    };\n    const active$1 = (root = getDocument()) => Optional.from(root.dom.activeElement).map(SugarElement.fromDom);\n    const search = element => active$1(getRootNode(element)).filter(e => element.dom.contains(e.dom));\n\n    const clamp$1 = (offset, element) => {\n      const max = isText$b(element) ? get$3(element).length : children$1(element).length + 1;\n      if (offset > max) {\n        return max;\n      } else if (offset < 0) {\n        return 0;\n      }\n      return offset;\n    };\n    const normalizeRng = rng => SimSelection.range(rng.start, clamp$1(rng.soffset, rng.start), rng.finish, clamp$1(rng.foffset, rng.finish));\n    const isOrContains = (root, elm) => !isRestrictedNode(elm.dom) && (contains(root, elm) || eq(root, elm));\n    const isRngInRoot = root => rng => isOrContains(root, rng.start) && isOrContains(root, rng.finish);\n    const shouldStore = editor => editor.inline || Env.browser.isFirefox();\n    const nativeRangeToSelectionRange = r => SimSelection.range(SugarElement.fromDom(r.startContainer), r.startOffset, SugarElement.fromDom(r.endContainer), r.endOffset);\n    const readRange = win => {\n      const selection = win.getSelection();\n      const rng = !selection || selection.rangeCount === 0 ? Optional.none() : Optional.from(selection.getRangeAt(0));\n      return rng.map(nativeRangeToSelectionRange);\n    };\n    const getBookmark = root => {\n      const win = defaultView(root);\n      return readRange(win.dom).filter(isRngInRoot(root));\n    };\n    const validate = (root, bookmark) => Optional.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng);\n    const bookmarkToNativeRng = bookmark => {\n      const rng = document.createRange();\n      try {\n        rng.setStart(bookmark.start.dom, bookmark.soffset);\n        rng.setEnd(bookmark.finish.dom, bookmark.foffset);\n        return Optional.some(rng);\n      } catch (_) {\n        return Optional.none();\n      }\n    };\n    const store = editor => {\n      const newBookmark = shouldStore(editor) ? getBookmark(SugarElement.fromDom(editor.getBody())) : Optional.none();\n      editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n    };\n    const getRng = editor => {\n      const bookmark = editor.bookmark ? editor.bookmark : Optional.none();\n      return bookmark.bind(x => validate(SugarElement.fromDom(editor.getBody()), x)).bind(bookmarkToNativeRng);\n    };\n    const restore = editor => {\n      getRng(editor).each(rng => editor.selection.setRng(rng));\n    };\n\n    const isEditorUIElement$1 = elm => {\n      const className = elm.className.toString();\n      return className.indexOf('tox-') !== -1 || className.indexOf('mce-') !== -1;\n    };\n    const FocusManager = { isEditorUIElement: isEditorUIElement$1 };\n\n    const wrappedSetTimeout = (callback, time) => {\n      if (!isNumber(time)) {\n        time = 0;\n      }\n      return setTimeout(callback, time);\n    };\n    const wrappedSetInterval = (callback, time) => {\n      if (!isNumber(time)) {\n        time = 0;\n      }\n      return setInterval(callback, time);\n    };\n    const Delay = {\n      setEditorTimeout: (editor, callback, time) => {\n        return wrappedSetTimeout(() => {\n          if (!editor.removed) {\n            callback();\n          }\n        }, time);\n      },\n      setEditorInterval: (editor, callback, time) => {\n        const timer = wrappedSetInterval(() => {\n          if (!editor.removed) {\n            callback();\n          } else {\n            clearInterval(timer);\n          }\n        }, time);\n        return timer;\n      }\n    };\n\n    const isManualNodeChange = e => {\n      return e.type === 'nodechange' && e.selectionChange;\n    };\n    const registerPageMouseUp = (editor, throttledStore) => {\n      const mouseUpPage = () => {\n        throttledStore.throttle();\n      };\n      DOMUtils.DOM.bind(document, 'mouseup', mouseUpPage);\n      editor.on('remove', () => {\n        DOMUtils.DOM.unbind(document, 'mouseup', mouseUpPage);\n      });\n    };\n    const registerMouseUp = (editor, throttledStore) => {\n      editor.on('mouseup touchend', _e => {\n        throttledStore.throttle();\n      });\n    };\n    const registerEditorEvents = (editor, throttledStore) => {\n      registerMouseUp(editor, throttledStore);\n      editor.on('keyup NodeChange AfterSetSelectionRange', e => {\n        if (!isManualNodeChange(e)) {\n          store(editor);\n        }\n      });\n    };\n    const register$6 = editor => {\n      const throttledStore = first$1(() => {\n        store(editor);\n      }, 0);\n      editor.on('init', () => {\n        if (editor.inline) {\n          registerPageMouseUp(editor, throttledStore);\n        }\n        registerEditorEvents(editor, throttledStore);\n      });\n      editor.on('remove', () => {\n        throttledStore.cancel();\n      });\n    };\n\n    let documentFocusInHandler;\n    const DOM$9 = DOMUtils.DOM;\n    const isEditorUIElement = elm => {\n      return isElement$6(elm) && FocusManager.isEditorUIElement(elm);\n    };\n    const isEditorContentAreaElement = elm => {\n      const classList = elm.classList;\n      if (classList !== undefined) {\n        return classList.contains('tox-edit-area') || classList.contains('tox-edit-area__iframe') || classList.contains('mce-content-body');\n      } else {\n        return false;\n      }\n    };\n    const isUIElement = (editor, elm) => {\n      const customSelector = getCustomUiSelector(editor);\n      const parent = DOM$9.getParent(elm, elm => {\n        return isEditorUIElement(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);\n      });\n      return parent !== null;\n    };\n    const getActiveElement = editor => {\n      try {\n        const root = getRootNode(SugarElement.fromDom(editor.getElement()));\n        return active$1(root).fold(() => document.body, x => x.dom);\n      } catch (ex) {\n        return document.body;\n      }\n    };\n    const registerEvents$1 = (editorManager, e) => {\n      const editor = e.editor;\n      register$6(editor);\n      const toggleContentAreaOnFocus = (editor, fn) => {\n        if (shouldHighlightOnFocus(editor) && editor.inline !== true) {\n          const contentArea = SugarElement.fromDom(editor.getContainer());\n          fn(contentArea, 'tox-edit-focus');\n        }\n      };\n      editor.on('focusin', () => {\n        const focusedEditor = editorManager.focusedEditor;\n        if (isEditorContentAreaElement(getActiveElement(editor))) {\n          toggleContentAreaOnFocus(editor, add$2);\n        }\n        if (focusedEditor !== editor) {\n          if (focusedEditor) {\n            focusedEditor.dispatch('blur', { focusedEditor: editor });\n          }\n          editorManager.setActive(editor);\n          editorManager.focusedEditor = editor;\n          editor.dispatch('focus', { blurredEditor: focusedEditor });\n          editor.focus(true);\n        }\n      });\n      editor.on('focusout', () => {\n        Delay.setEditorTimeout(editor, () => {\n          const focusedEditor = editorManager.focusedEditor;\n          if (!isEditorContentAreaElement(getActiveElement(editor)) || focusedEditor !== editor) {\n            toggleContentAreaOnFocus(editor, remove$7);\n          }\n          if (!isUIElement(editor, getActiveElement(editor)) && focusedEditor === editor) {\n            editor.dispatch('blur', { focusedEditor: null });\n            editorManager.focusedEditor = null;\n          }\n        });\n      });\n      if (!documentFocusInHandler) {\n        documentFocusInHandler = e => {\n          const activeEditor = editorManager.activeEditor;\n          if (activeEditor) {\n            getOriginalEventTarget(e).each(target => {\n              const elem = target;\n              if (elem.ownerDocument === document) {\n                if (elem !== document.body && !isUIElement(activeEditor, elem) && editorManager.focusedEditor === activeEditor) {\n                  activeEditor.dispatch('blur', { focusedEditor: null });\n                  editorManager.focusedEditor = null;\n                }\n              }\n            });\n          }\n        };\n        DOM$9.bind(document, 'focusin', documentFocusInHandler);\n      }\n    };\n    const unregisterDocumentEvents = (editorManager, e) => {\n      if (editorManager.focusedEditor === e.editor) {\n        editorManager.focusedEditor = null;\n      }\n      if (!editorManager.activeEditor && documentFocusInHandler) {\n        DOM$9.unbind(document, 'focusin', documentFocusInHandler);\n        documentFocusInHandler = null;\n      }\n    };\n    const setup$v = editorManager => {\n      editorManager.on('AddEditor', curry(registerEvents$1, editorManager));\n      editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));\n    };\n\n    const getContentEditableHost = (editor, node) => editor.dom.getParent(node, node => editor.dom.getContentEditable(node) === 'true');\n    const getCollapsedNode = rng => rng.collapsed ? Optional.from(getNode$1(rng.startContainer, rng.startOffset)).map(SugarElement.fromDom) : Optional.none();\n    const getFocusInElement = (root, rng) => getCollapsedNode(rng).bind(node => {\n      if (isTableSection(node)) {\n        return Optional.some(node);\n      } else if (!contains(root, node)) {\n        return Optional.some(root);\n      } else {\n        return Optional.none();\n      }\n    });\n    const normalizeSelection = (editor, rng) => {\n      getFocusInElement(SugarElement.fromDom(editor.getBody()), rng).bind(elm => {\n        return firstPositionIn(elm.dom);\n      }).fold(() => {\n        editor.selection.normalize();\n      }, caretPos => editor.selection.setRng(caretPos.toRange()));\n    };\n    const focusBody = body => {\n      if (body.setActive) {\n        try {\n          body.setActive();\n        } catch (ex) {\n          body.focus();\n        }\n      } else {\n        body.focus();\n      }\n    };\n    const hasElementFocus = elm => hasFocus$1(elm) || search(elm).isSome();\n    const hasIframeFocus = editor => isNonNullable(editor.iframeElement) && hasFocus$1(SugarElement.fromDom(editor.iframeElement));\n    const hasInlineFocus = editor => {\n      const rawBody = editor.getBody();\n      return rawBody && hasElementFocus(SugarElement.fromDom(rawBody));\n    };\n    const hasUiFocus = editor => {\n      const dos = getRootNode(SugarElement.fromDom(editor.getElement()));\n      return active$1(dos).filter(elem => !isEditorContentAreaElement(elem.dom) && isUIElement(editor, elem.dom)).isSome();\n    };\n    const hasFocus = editor => editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n    const hasEditorOrUiFocus = editor => hasFocus(editor) || hasUiFocus(editor);\n    const focusEditor = editor => {\n      const selection = editor.selection;\n      const body = editor.getBody();\n      let rng = selection.getRng();\n      editor.quirks.refreshContentEditable();\n      if (isNonNullable(editor.bookmark) && !hasFocus(editor)) {\n        getRng(editor).each(bookmarkRng => {\n          editor.selection.setRng(bookmarkRng);\n          rng = bookmarkRng;\n        });\n      }\n      const contentEditableHost = getContentEditableHost(editor, selection.getNode());\n      if (contentEditableHost && editor.dom.isChildOf(contentEditableHost, body)) {\n        focusBody(contentEditableHost);\n        normalizeSelection(editor, rng);\n        activateEditor(editor);\n        return;\n      }\n      if (!editor.inline) {\n        if (!Env.browser.isOpera()) {\n          focusBody(body);\n        }\n        editor.getWin().focus();\n      }\n      if (Env.browser.isFirefox() || editor.inline) {\n        focusBody(body);\n        normalizeSelection(editor, rng);\n      }\n      activateEditor(editor);\n    };\n    const activateEditor = editor => editor.editorManager.setActive(editor);\n    const focus = (editor, skipFocus) => {\n      if (editor.removed) {\n        return;\n      }\n      if (skipFocus) {\n        activateEditor(editor);\n      } else {\n        focusEditor(editor);\n      }\n    };\n\n    const getEndpointElement = (root, rng, start, real, resolve) => {\n      const container = start ? rng.startContainer : rng.endContainer;\n      const offset = start ? rng.startOffset : rng.endOffset;\n      return Optional.from(container).map(SugarElement.fromDom).map(elm => !real || !rng.collapsed ? child$1(elm, resolve(elm, offset)).getOr(elm) : elm).bind(elm => isElement$7(elm) ? Optional.some(elm) : parent(elm).filter(isElement$7)).map(elm => elm.dom).getOr(root);\n    };\n    const getStart = (root, rng, real = false) => getEndpointElement(root, rng, true, real, (elm, offset) => Math.min(childNodesCount(elm), offset));\n    const getEnd$1 = (root, rng, real = false) => getEndpointElement(root, rng, false, real, (elm, offset) => offset > 0 ? offset - 1 : offset);\n    const skipEmptyTextNodes = (node, forwards) => {\n      const orig = node;\n      while (node && isText$a(node) && node.length === 0) {\n        node = forwards ? node.nextSibling : node.previousSibling;\n      }\n      return node || orig;\n    };\n    const getNode = (root, rng) => {\n      if (!rng) {\n        return root;\n      }\n      let startContainer = rng.startContainer;\n      let endContainer = rng.endContainer;\n      const startOffset = rng.startOffset;\n      const endOffset = rng.endOffset;\n      let node = rng.commonAncestorContainer;\n      if (!rng.collapsed) {\n        if (startContainer === endContainer) {\n          if (endOffset - startOffset < 2) {\n            if (startContainer.hasChildNodes()) {\n              node = startContainer.childNodes[startOffset];\n            }\n          }\n        }\n        if (isText$a(startContainer) && isText$a(endContainer)) {\n          if (startContainer.length === startOffset) {\n            startContainer = skipEmptyTextNodes(startContainer.nextSibling, true);\n          } else {\n            startContainer = startContainer.parentNode;\n          }\n          if (endOffset === 0) {\n            endContainer = skipEmptyTextNodes(endContainer.previousSibling, false);\n          } else {\n            endContainer = endContainer.parentNode;\n          }\n          if (startContainer && startContainer === endContainer) {\n            node = startContainer;\n          }\n        }\n      }\n      const elm = isText$a(node) ? node.parentNode : node;\n      return isElement$6(elm) ? elm : root;\n    };\n    const getSelectedBlocks = (dom, rng, startElm, endElm) => {\n      const selectedBlocks = [];\n      const root = dom.getRoot();\n      const start = dom.getParent(startElm || getStart(root, rng, rng.collapsed), dom.isBlock);\n      const end = dom.getParent(endElm || getEnd$1(root, rng, rng.collapsed), dom.isBlock);\n      if (start && start !== root) {\n        selectedBlocks.push(start);\n      }\n      if (start && end && start !== end) {\n        let node;\n        const walker = new DomTreeWalker(start, root);\n        while ((node = walker.next()) && node !== end) {\n          if (dom.isBlock(node)) {\n            selectedBlocks.push(node);\n          }\n        }\n      }\n      if (end && start !== end && end !== root) {\n        selectedBlocks.push(end);\n      }\n      return selectedBlocks;\n    };\n    const select = (dom, node, content) => Optional.from(node).bind(node => Optional.from(node.parentNode).map(parent => {\n      const idx = dom.nodeIndex(node);\n      const rng = dom.createRng();\n      rng.setStart(parent, idx);\n      rng.setEnd(parent, idx + 1);\n      if (content) {\n        moveEndPoint(dom, rng, node, true);\n        moveEndPoint(dom, rng, node, false);\n      }\n      return rng;\n    }));\n\n    const processRanges = (editor, ranges) => map$3(ranges, range => {\n      const evt = editor.dispatch('GetSelectionRange', { range });\n      return evt.range !== range ? evt.range : range;\n    });\n\n    const getEnd = element => name(element) === 'img' ? 1 : getOption(element).fold(() => children$1(element).length, v => v.length);\n    const isTextNodeWithCursorPosition = el => getOption(el).filter(text => text.trim().length !== 0 || text.indexOf(nbsp) > -1).isSome();\n    const isContentEditableFalse$5 = elem => isHTMLElement(elem) && get$9(elem, 'contenteditable') === 'false';\n    const elementsWithCursorPosition = [\n      'img',\n      'br'\n    ];\n    const isCursorPosition = elem => {\n      const hasCursorPosition = isTextNodeWithCursorPosition(elem);\n      return hasCursorPosition || contains$2(elementsWithCursorPosition, name(elem)) || isContentEditableFalse$5(elem);\n    };\n\n    const first = element => descendant$1(element, isCursorPosition);\n    const last = element => descendantRtl(element, isCursorPosition);\n    const descendantRtl = (scope, predicate) => {\n      const descend = element => {\n        const children = children$1(element);\n        for (let i = children.length - 1; i >= 0; i--) {\n          const child = children[i];\n          if (predicate(child)) {\n            return Optional.some(child);\n          }\n          const res = descend(child);\n          if (res.isSome()) {\n            return res;\n          }\n        }\n        return Optional.none();\n      };\n      return descend(scope);\n    };\n\n    const autocompleteSelector = '[data-mce-autocompleter]';\n    const create$9 = (editor, range) => {\n      if (findIn(SugarElement.fromDom(editor.getBody())).isNone()) {\n        const wrapper = SugarElement.fromHtml('<span data-mce-autocompleter=\"1\" data-mce-bogus=\"1\"></span>', editor.getDoc());\n        append$1(wrapper, SugarElement.fromDom(range.extractContents()));\n        range.insertNode(wrapper.dom);\n        parent(wrapper).each(elm => elm.dom.normalize());\n        last(wrapper).map(last => {\n          editor.selection.setCursorLocation(last.dom, getEnd(last));\n        });\n      }\n    };\n    const detect$1 = elm => closest$3(elm, autocompleteSelector);\n    const findIn = elm => descendant(elm, autocompleteSelector);\n    const remove$2 = (editor, elm) => findIn(elm).each(wrapper => {\n      const bookmark = editor.selection.getBookmark();\n      unwrap(wrapper);\n      editor.selection.moveToBookmark(bookmark);\n    });\n\n    const typeLookup = {\n      '#text': 3,\n      '#comment': 8,\n      '#cdata': 4,\n      '#pi': 7,\n      '#doctype': 10,\n      '#document-fragment': 11\n    };\n    const walk$2 = (node, root, prev) => {\n      const startName = prev ? 'lastChild' : 'firstChild';\n      const siblingName = prev ? 'prev' : 'next';\n      if (node[startName]) {\n        return node[startName];\n      }\n      if (node !== root) {\n        let sibling = node[siblingName];\n        if (sibling) {\n          return sibling;\n        }\n        for (let parent = node.parent; parent && parent !== root; parent = parent.parent) {\n          sibling = parent[siblingName];\n          if (sibling) {\n            return sibling;\n          }\n        }\n      }\n      return undefined;\n    };\n    const isEmptyTextNode = node => {\n      var _a;\n      const text = (_a = node.value) !== null && _a !== void 0 ? _a : '';\n      if (!isWhitespaceText(text)) {\n        return false;\n      }\n      const parentNode = node.parent;\n      if (parentNode && (parentNode.name !== 'span' || parentNode.attr('style')) && /^[ ]+$/.test(text)) {\n        return false;\n      }\n      return true;\n    };\n    const isNonEmptyElement = node => {\n      const isNamedAnchor = node.name === 'a' && !node.attr('href') && node.attr('id');\n      return node.attr('name') || node.attr('id') && !node.firstChild || node.attr('data-mce-bookmark') || isNamedAnchor;\n    };\n    class AstNode {\n      static create(name, attrs) {\n        const node = new AstNode(name, typeLookup[name] || 1);\n        if (attrs) {\n          each$d(attrs, (value, attrName) => {\n            node.attr(attrName, value);\n          });\n        }\n        return node;\n      }\n      constructor(name, type) {\n        this.name = name;\n        this.type = type;\n        if (type === 1) {\n          this.attributes = [];\n          this.attributes.map = {};\n        }\n      }\n      replace(node) {\n        const self = this;\n        if (node.parent) {\n          node.remove();\n        }\n        self.insert(node, self);\n        self.remove();\n        return self;\n      }\n      attr(name, value) {\n        const self = this;\n        if (!isString(name)) {\n          if (isNonNullable(name)) {\n            each$d(name, (value, key) => {\n              self.attr(key, value);\n            });\n          }\n          return self;\n        }\n        const attrs = self.attributes;\n        if (attrs) {\n          if (value !== undefined) {\n            if (value === null) {\n              if (name in attrs.map) {\n                delete attrs.map[name];\n                let i = attrs.length;\n                while (i--) {\n                  if (attrs[i].name === name) {\n                    attrs.splice(i, 1);\n                    return self;\n                  }\n                }\n              }\n              return self;\n            }\n            if (name in attrs.map) {\n              let i = attrs.length;\n              while (i--) {\n                if (attrs[i].name === name) {\n                  attrs[i].value = value;\n                  break;\n                }\n              }\n            } else {\n              attrs.push({\n                name,\n                value\n              });\n            }\n            attrs.map[name] = value;\n            return self;\n          }\n          return attrs.map[name];\n        }\n        return undefined;\n      }\n      clone() {\n        const self = this;\n        const clone = new AstNode(self.name, self.type);\n        const selfAttrs = self.attributes;\n        if (selfAttrs) {\n          const cloneAttrs = [];\n          cloneAttrs.map = {};\n          for (let i = 0, l = selfAttrs.length; i < l; i++) {\n            const selfAttr = selfAttrs[i];\n            if (selfAttr.name !== 'id') {\n              cloneAttrs[cloneAttrs.length] = {\n                name: selfAttr.name,\n                value: selfAttr.value\n              };\n              cloneAttrs.map[selfAttr.name] = selfAttr.value;\n            }\n          }\n          clone.attributes = cloneAttrs;\n        }\n        clone.value = self.value;\n        return clone;\n      }\n      wrap(wrapper) {\n        const self = this;\n        if (self.parent) {\n          self.parent.insert(wrapper, self);\n          wrapper.append(self);\n        }\n        return self;\n      }\n      unwrap() {\n        const self = this;\n        for (let node = self.firstChild; node;) {\n          const next = node.next;\n          self.insert(node, self, true);\n          node = next;\n        }\n        self.remove();\n      }\n      remove() {\n        const self = this, parent = self.parent, next = self.next, prev = self.prev;\n        if (parent) {\n          if (parent.firstChild === self) {\n            parent.firstChild = next;\n            if (next) {\n              next.prev = null;\n            }\n          } else if (prev) {\n            prev.next = next;\n          }\n          if (parent.lastChild === self) {\n            parent.lastChild = prev;\n            if (prev) {\n              prev.next = null;\n            }\n          } else if (next) {\n            next.prev = prev;\n          }\n          self.parent = self.next = self.prev = null;\n        }\n        return self;\n      }\n      append(node) {\n        const self = this;\n        if (node.parent) {\n          node.remove();\n        }\n        const last = self.lastChild;\n        if (last) {\n          last.next = node;\n          node.prev = last;\n          self.lastChild = node;\n        } else {\n          self.lastChild = self.firstChild = node;\n        }\n        node.parent = self;\n        return node;\n      }\n      insert(node, refNode, before) {\n        if (node.parent) {\n          node.remove();\n        }\n        const parent = refNode.parent || this;\n        if (before) {\n          if (refNode === parent.firstChild) {\n            parent.firstChild = node;\n          } else if (refNode.prev) {\n            refNode.prev.next = node;\n          }\n          node.prev = refNode.prev;\n          node.next = refNode;\n          refNode.prev = node;\n        } else {\n          if (refNode === parent.lastChild) {\n            parent.lastChild = node;\n          } else if (refNode.next) {\n            refNode.next.prev = node;\n          }\n          node.next = refNode.next;\n          node.prev = refNode;\n          refNode.next = node;\n        }\n        node.parent = parent;\n        return node;\n      }\n      getAll(name) {\n        const self = this;\n        const collection = [];\n        for (let node = self.firstChild; node; node = walk$2(node, self)) {\n          if (node.name === name) {\n            collection.push(node);\n          }\n        }\n        return collection;\n      }\n      children() {\n        const self = this;\n        const collection = [];\n        for (let node = self.firstChild; node; node = node.next) {\n          collection.push(node);\n        }\n        return collection;\n      }\n      empty() {\n        const self = this;\n        if (self.firstChild) {\n          const nodes = [];\n          for (let node = self.firstChild; node; node = walk$2(node, self)) {\n            nodes.push(node);\n          }\n          let i = nodes.length;\n          while (i--) {\n            const node = nodes[i];\n            node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;\n          }\n        }\n        self.firstChild = self.lastChild = null;\n        return self;\n      }\n      isEmpty(elements, whitespace = {}, predicate) {\n        var _a;\n        const self = this;\n        let node = self.firstChild;\n        if (isNonEmptyElement(self)) {\n          return false;\n        }\n        if (node) {\n          do {\n            if (node.type === 1) {\n              if (node.attr('data-mce-bogus')) {\n                continue;\n              }\n              if (elements[node.name]) {\n                return false;\n              }\n              if (isNonEmptyElement(node)) {\n                return false;\n              }\n            }\n            if (node.type === 8) {\n              return false;\n            }\n            if (node.type === 3 && !isEmptyTextNode(node)) {\n              return false;\n            }\n            if (node.type === 3 && node.parent && whitespace[node.parent.name] && isWhitespaceText((_a = node.value) !== null && _a !== void 0 ? _a : '')) {\n              return false;\n            }\n            if (predicate && predicate(node)) {\n              return false;\n            }\n          } while (node = walk$2(node, self));\n        }\n        return true;\n      }\n      walk(prev) {\n        return walk$2(this, null, prev);\n      }\n    }\n\n    const isConditionalComment = (html, startIndex) => /^\\s*\\[if [\\w\\W]+\\]>.*<!\\[endif\\](--!?)?>/.test(html.substr(startIndex));\n    const findCommentEndIndex = (html, isBogus, startIndex = 0) => {\n      const lcHtml = html.toLowerCase();\n      if (lcHtml.indexOf('[if ', startIndex) !== -1 && isConditionalComment(lcHtml, startIndex)) {\n        const endIfIndex = lcHtml.indexOf('[endif]', startIndex);\n        return lcHtml.indexOf('>', endIfIndex);\n      } else {\n        if (isBogus) {\n          const endIndex = lcHtml.indexOf('>', startIndex);\n          return endIndex !== -1 ? endIndex : lcHtml.length;\n        } else {\n          const endCommentRegexp = /--!?>/g;\n          endCommentRegexp.lastIndex = startIndex;\n          const match = endCommentRegexp.exec(html);\n          return match ? match.index + match[0].length : lcHtml.length;\n        }\n      }\n    };\n    const findMatchingEndTagIndex = (schema, html, startIndex) => {\n      const startTagRegExp = /<([!?\\/])?([A-Za-z0-9\\-_:.]+)/g;\n      const endTagRegExp = /(?:\\s(?:[^'\">]+(?:\"[^\"]*\"|'[^']*'))*[^\"'>]*(?:\"[^\">]*|'[^'>]*)?|\\s*|\\/)>/g;\n      const voidElements = schema.getVoidElements();\n      let count = 1, index = startIndex;\n      while (count !== 0) {\n        startTagRegExp.lastIndex = index;\n        while (true) {\n          const startMatch = startTagRegExp.exec(html);\n          if (startMatch === null) {\n            return index;\n          } else if (startMatch[1] === '!') {\n            if (startsWith(startMatch[2], '--')) {\n              index = findCommentEndIndex(html, false, startMatch.index + '!--'.length);\n            } else {\n              index = findCommentEndIndex(html, true, startMatch.index + 1);\n            }\n            break;\n          } else {\n            endTagRegExp.lastIndex = startTagRegExp.lastIndex;\n            const endMatch = endTagRegExp.exec(html);\n            if (isNull(endMatch) || endMatch.index !== startTagRegExp.lastIndex) {\n              continue;\n            }\n            if (startMatch[1] === '/') {\n              count -= 1;\n            } else if (!has$2(voidElements, startMatch[2])) {\n              count += 1;\n            }\n            index = startTagRegExp.lastIndex + endMatch[0].length;\n            break;\n          }\n        }\n      }\n      return index;\n    };\n    const trimHtml$1 = (tempAttrs, html) => {\n      const trimContentRegExp = new RegExp(['\\\\s?(' + tempAttrs.join('|') + ')=\"[^\"]+\"'].join('|'), 'gi');\n      return html.replace(trimContentRegExp, '');\n    };\n    const trimInternal = (serializer, html) => {\n      const bogusAllRegExp = /<(\\w+) [^>]*data-mce-bogus=\"all\"[^>]*>/g;\n      const schema = serializer.schema;\n      let content = trimHtml$1(serializer.getTempAttrs(), html);\n      const voidElements = schema.getVoidElements();\n      let matches;\n      while (matches = bogusAllRegExp.exec(content)) {\n        const index = bogusAllRegExp.lastIndex;\n        const matchLength = matches[0].length;\n        let endTagIndex;\n        if (voidElements[matches[1]]) {\n          endTagIndex = index;\n        } else {\n          endTagIndex = findMatchingEndTagIndex(schema, content, index);\n        }\n        content = content.substring(0, index - matchLength) + content.substring(endTagIndex);\n        bogusAllRegExp.lastIndex = index - matchLength;\n      }\n      return trim$1(content);\n    };\n    const trimExternal = trimInternal;\n\n    const cleanupBogusElements = parent => {\n      const bogusElements = descendants(parent, '[data-mce-bogus]');\n      each$e(bogusElements, elem => {\n        const bogusValue = get$9(elem, 'data-mce-bogus');\n        if (bogusValue === 'all') {\n          remove$5(elem);\n        } else if (isBr$5(elem)) {\n          before$3(elem, SugarElement.fromText(zeroWidth));\n          remove$5(elem);\n        } else {\n          unwrap(elem);\n        }\n      });\n    };\n    const cleanupInputNames = parent => {\n      const inputs = descendants(parent, 'input');\n      each$e(inputs, input => {\n        remove$a(input, 'name');\n      });\n    };\n\n    const trimEmptyContents = (editor, html) => {\n      const blockName = getForcedRootBlock(editor);\n      const emptyRegExp = new RegExp(`^(<${ blockName }[^>]*>(&nbsp;|&#160;|\\\\s|\\u00a0|<br \\\\/>|)<\\\\/${ blockName }>[\\r\\n]*|<br \\\\/>[\\r\\n]*)$`);\n      return html.replace(emptyRegExp, '');\n    };\n    const getPlainTextContent = (editor, body) => {\n      const doc = editor.getDoc();\n      const dos = getRootNode(SugarElement.fromDom(editor.getBody()));\n      const offscreenDiv = SugarElement.fromTag('div', doc);\n      set$3(offscreenDiv, 'data-mce-bogus', 'all');\n      setAll(offscreenDiv, {\n        position: 'fixed',\n        left: '-9999999px',\n        top: '0'\n      });\n      set$1(offscreenDiv, body.innerHTML);\n      cleanupBogusElements(offscreenDiv);\n      cleanupInputNames(offscreenDiv);\n      const root = getContentContainer(dos);\n      append$1(root, offscreenDiv);\n      const content = trim$1(offscreenDiv.dom.innerText);\n      remove$5(offscreenDiv);\n      return content;\n    };\n    const getContentFromBody = (editor, args, body) => {\n      let content;\n      if (args.format === 'raw') {\n        content = Tools.trim(trimExternal(editor.serializer, body.innerHTML));\n      } else if (args.format === 'text') {\n        content = getPlainTextContent(editor, body);\n      } else if (args.format === 'tree') {\n        content = editor.serializer.serialize(body, args);\n      } else {\n        content = trimEmptyContents(editor, editor.serializer.serialize(body, args));\n      }\n      const shouldTrim = args.format !== 'text' && !isWsPreserveElement(SugarElement.fromDom(body));\n      return shouldTrim && isString(content) ? Tools.trim(content) : content;\n    };\n    const getContentInternal = (editor, args) => Optional.from(editor.getBody()).fold(constant(args.format === 'tree' ? new AstNode('body', 11) : ''), body => getContentFromBody(editor, args, body));\n\n    const makeMap$1 = Tools.makeMap;\n    const Writer = settings => {\n      const html = [];\n      settings = settings || {};\n      const indent = settings.indent;\n      const indentBefore = makeMap$1(settings.indent_before || '');\n      const indentAfter = makeMap$1(settings.indent_after || '');\n      const encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\n      const htmlOutput = settings.element_format !== 'xhtml';\n      return {\n        start: (name, attrs, empty) => {\n          if (indent && indentBefore[name] && html.length > 0) {\n            const value = html[html.length - 1];\n            if (value.length > 0 && value !== '\\n') {\n              html.push('\\n');\n            }\n          }\n          html.push('<', name);\n          if (attrs) {\n            for (let i = 0, l = attrs.length; i < l; i++) {\n              const attr = attrs[i];\n              html.push(' ', attr.name, '=\"', encode(attr.value, true), '\"');\n            }\n          }\n          if (!empty || htmlOutput) {\n            html[html.length] = '>';\n          } else {\n            html[html.length] = ' />';\n          }\n          if (empty && indent && indentAfter[name] && html.length > 0) {\n            const value = html[html.length - 1];\n            if (value.length > 0 && value !== '\\n') {\n              html.push('\\n');\n            }\n          }\n        },\n        end: name => {\n          let value;\n          html.push('</', name, '>');\n          if (indent && indentAfter[name] && html.length > 0) {\n            value = html[html.length - 1];\n            if (value.length > 0 && value !== '\\n') {\n              html.push('\\n');\n            }\n          }\n        },\n        text: (text, raw) => {\n          if (text.length > 0) {\n            html[html.length] = raw ? text : encode(text);\n          }\n        },\n        cdata: text => {\n          html.push('<![CDATA[', text, ']]>');\n        },\n        comment: text => {\n          html.push('<!--', text, '-->');\n        },\n        pi: (name, text) => {\n          if (text) {\n            html.push('<?', name, ' ', encode(text), '?>');\n          } else {\n            html.push('<?', name, '?>');\n          }\n          if (indent) {\n            html.push('\\n');\n          }\n        },\n        doctype: text => {\n          html.push('<!DOCTYPE', text, '>', indent ? '\\n' : '');\n        },\n        reset: () => {\n          html.length = 0;\n        },\n        getContent: () => {\n          return html.join('').replace(/\\n$/, '');\n        }\n      };\n    };\n\n    const HtmlSerializer = (settings = {}, schema = Schema()) => {\n      const writer = Writer(settings);\n      settings.validate = 'validate' in settings ? settings.validate : true;\n      const serialize = node => {\n        const validate = settings.validate;\n        const handlers = {\n          3: node => {\n            var _a;\n            writer.text((_a = node.value) !== null && _a !== void 0 ? _a : '', node.raw);\n          },\n          8: node => {\n            var _a;\n            writer.comment((_a = node.value) !== null && _a !== void 0 ? _a : '');\n          },\n          7: node => {\n            writer.pi(node.name, node.value);\n          },\n          10: node => {\n            var _a;\n            writer.doctype((_a = node.value) !== null && _a !== void 0 ? _a : '');\n          },\n          4: node => {\n            var _a;\n            writer.cdata((_a = node.value) !== null && _a !== void 0 ? _a : '');\n          },\n          11: node => {\n            let tempNode = node;\n            if (tempNode = tempNode.firstChild) {\n              do {\n                walk(tempNode);\n              } while (tempNode = tempNode.next);\n            }\n          }\n        };\n        writer.reset();\n        const walk = node => {\n          var _a;\n          const handler = handlers[node.type];\n          if (!handler) {\n            const name = node.name;\n            const isEmpty = name in schema.getVoidElements();\n            let attrs = node.attributes;\n            if (validate && attrs && attrs.length > 1) {\n              const sortedAttrs = [];\n              sortedAttrs.map = {};\n              const elementRule = schema.getElementRule(node.name);\n              if (elementRule) {\n                for (let i = 0, l = elementRule.attributesOrder.length; i < l; i++) {\n                  const attrName = elementRule.attributesOrder[i];\n                  if (attrName in attrs.map) {\n                    const attrValue = attrs.map[attrName];\n                    sortedAttrs.map[attrName] = attrValue;\n                    sortedAttrs.push({\n                      name: attrName,\n                      value: attrValue\n                    });\n                  }\n                }\n                for (let i = 0, l = attrs.length; i < l; i++) {\n                  const attrName = attrs[i].name;\n                  if (!(attrName in sortedAttrs.map)) {\n                    const attrValue = attrs.map[attrName];\n                    sortedAttrs.map[attrName] = attrValue;\n                    sortedAttrs.push({\n                      name: attrName,\n                      value: attrValue\n                    });\n                  }\n                }\n                attrs = sortedAttrs;\n              }\n            }\n            writer.start(name, attrs, isEmpty);\n            if (!isEmpty) {\n              let child = node.firstChild;\n              if (child) {\n                if ((name === 'pre' || name === 'textarea') && child.type === 3 && ((_a = child.value) === null || _a === void 0 ? void 0 : _a[0]) === '\\n') {\n                  writer.text('\\n', true);\n                }\n                do {\n                  walk(child);\n                } while (child = child.next);\n              }\n              writer.end(name);\n            }\n          } else {\n            handler(node);\n          }\n        };\n        if (node.type === 1 && !settings.inner) {\n          walk(node);\n        } else if (node.type === 3) {\n          handlers[3](node);\n        } else {\n          handlers[11](node);\n        }\n        return writer.getContent();\n      };\n      return { serialize };\n    };\n\n    const nonInheritableStyles = new Set();\n    (() => {\n      const nonInheritableStylesArr = [\n        'margin',\n        'margin-left',\n        'margin-right',\n        'margin-top',\n        'margin-bottom',\n        'padding',\n        'padding-left',\n        'padding-right',\n        'padding-top',\n        'padding-bottom',\n        'border',\n        'border-width',\n        'border-style',\n        'border-color',\n        'background',\n        'background-attachment',\n        'background-clip',\n        'background-color',\n        'background-image',\n        'background-origin',\n        'background-position',\n        'background-repeat',\n        'background-size',\n        'float',\n        'position',\n        'left',\n        'right',\n        'top',\n        'bottom',\n        'z-index',\n        'display',\n        'transform',\n        'width',\n        'max-width',\n        'min-width',\n        'height',\n        'max-height',\n        'min-height',\n        'overflow',\n        'overflow-x',\n        'overflow-y',\n        'text-overflow',\n        'vertical-align',\n        'transition',\n        'transition-delay',\n        'transition-duration',\n        'transition-property',\n        'transition-timing-function'\n      ];\n      each$e(nonInheritableStylesArr, style => {\n        nonInheritableStyles.add(style);\n      });\n    })();\n    const shorthandStyleProps = [\n      'font',\n      'text-decoration',\n      'text-emphasis'\n    ];\n    const getStyleProps = (dom, node) => keys(dom.parseStyle(dom.getAttrib(node, 'style')));\n    const isNonInheritableStyle = style => nonInheritableStyles.has(style);\n    const hasInheritableStyles = (dom, node) => forall(getStyleProps(dom, node), style => !isNonInheritableStyle(style));\n    const getLonghandStyleProps = styles => filter$5(styles, style => exists(shorthandStyleProps, prop => startsWith(style, prop)));\n    const hasStyleConflict = (dom, node, parentNode) => {\n      const nodeStyleProps = getStyleProps(dom, node);\n      const parentNodeStyleProps = getStyleProps(dom, parentNode);\n      const valueMismatch = prop => {\n        var _a, _b;\n        const nodeValue = (_a = dom.getStyle(node, prop)) !== null && _a !== void 0 ? _a : '';\n        const parentValue = (_b = dom.getStyle(parentNode, prop)) !== null && _b !== void 0 ? _b : '';\n        return isNotEmpty(nodeValue) && isNotEmpty(parentValue) && nodeValue !== parentValue;\n      };\n      return exists(nodeStyleProps, nodeStyleProp => {\n        const propExists = props => exists(props, prop => prop === nodeStyleProp);\n        if (!propExists(parentNodeStyleProps) && propExists(shorthandStyleProps)) {\n          const longhandProps = getLonghandStyleProps(parentNodeStyleProps);\n          return exists(longhandProps, valueMismatch);\n        } else {\n          return valueMismatch(nodeStyleProp);\n        }\n      });\n    };\n\n    const isChar = (forward, predicate, pos) => Optional.from(pos.container()).filter(isText$a).exists(text => {\n      const delta = forward ? 0 : -1;\n      return predicate(text.data.charAt(pos.offset() + delta));\n    });\n    const isBeforeSpace = curry(isChar, true, isWhiteSpace);\n    const isAfterSpace = curry(isChar, false, isWhiteSpace);\n    const isEmptyText = pos => {\n      const container = pos.container();\n      return isText$a(container) && (container.data.length === 0 || isZwsp$1(container.data) && BookmarkManager.isBookmarkNode(container.parentNode));\n    };\n    const matchesElementPosition = (before, predicate) => pos => getChildNodeAtRelativeOffset(before ? 0 : -1, pos).filter(predicate).isSome();\n    const isImageBlock = node => isImg(node) && get$7(SugarElement.fromDom(node), 'display') === 'block';\n    const isCefNode = node => isContentEditableFalse$b(node) && !isBogusAll$1(node);\n    const isBeforeImageBlock = matchesElementPosition(true, isImageBlock);\n    const isAfterImageBlock = matchesElementPosition(false, isImageBlock);\n    const isBeforeMedia = matchesElementPosition(true, isMedia$2);\n    const isAfterMedia = matchesElementPosition(false, isMedia$2);\n    const isBeforeTable = matchesElementPosition(true, isTable$2);\n    const isAfterTable = matchesElementPosition(false, isTable$2);\n    const isBeforeContentEditableFalse = matchesElementPosition(true, isCefNode);\n    const isAfterContentEditableFalse = matchesElementPosition(false, isCefNode);\n\n    const dropLast = xs => xs.slice(0, -1);\n    const parentsUntil = (start, root, predicate) => {\n      if (contains(root, start)) {\n        return dropLast(parents$1(start, elm => {\n          return predicate(elm) || eq(elm, root);\n        }));\n      } else {\n        return [];\n      }\n    };\n    const parents = (start, root) => parentsUntil(start, root, never);\n    const parentsAndSelf = (start, root) => [start].concat(parents(start, root));\n\n    const navigateIgnoreEmptyTextNodes = (forward, root, from) => navigateIgnore(forward, root, from, isEmptyText);\n    const getClosestBlock$1 = (root, pos) => find$2(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\n    const isAtBeforeAfterBlockBoundary = (forward, root, pos) => navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(newPos => getClosestBlock$1(root, pos).fold(() => !isInSameBlock(newPos, pos, root.dom), fromBlock => !isInSameBlock(newPos, pos, root.dom) && contains(fromBlock, SugarElement.fromDom(newPos.container()))));\n    const isAtBlockBoundary = (forward, root, pos) => getClosestBlock$1(root, pos).fold(() => navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(newPos => !isInSameBlock(newPos, pos, root.dom)), parent => navigateIgnoreEmptyTextNodes(forward, parent.dom, pos).isNone());\n    const isAtStartOfBlock = curry(isAtBlockBoundary, false);\n    const isAtEndOfBlock = curry(isAtBlockBoundary, true);\n    const isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false);\n    const isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true);\n\n    const isBr$1 = pos => getElementFromPosition(pos).exists(isBr$5);\n    const findBr = (forward, root, pos) => {\n      const parentBlocks = filter$5(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\n      const scope = head(parentBlocks).getOr(root);\n      return fromPosition(forward, scope.dom, pos).filter(isBr$1);\n    };\n    const isBeforeBr$1 = (root, pos) => getElementFromPosition(pos).exists(isBr$5) || findBr(true, root, pos).isSome();\n    const isAfterBr = (root, pos) => getElementFromPrevPosition(pos).exists(isBr$5) || findBr(false, root, pos).isSome();\n    const findPreviousBr = curry(findBr, false);\n    const findNextBr = curry(findBr, true);\n\n    const isInMiddleOfText = pos => CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();\n    const getClosestBlock = (root, pos) => {\n      const parentBlocks = filter$5(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\n      return head(parentBlocks).getOr(root);\n    };\n    const hasSpaceBefore = (root, pos) => {\n      if (isInMiddleOfText(pos)) {\n        return isAfterSpace(pos);\n      } else {\n        return isAfterSpace(pos) || prevPosition(getClosestBlock(root, pos).dom, pos).exists(isAfterSpace);\n      }\n    };\n    const hasSpaceAfter = (root, pos) => {\n      if (isInMiddleOfText(pos)) {\n        return isBeforeSpace(pos);\n      } else {\n        return isBeforeSpace(pos) || nextPosition(getClosestBlock(root, pos).dom, pos).exists(isBeforeSpace);\n      }\n    };\n    const isPreValue = value => contains$2([\n      'pre',\n      'pre-wrap'\n    ], value);\n    const isInPre = pos => getElementFromPosition(pos).bind(elm => closest$4(elm, isElement$7)).exists(elm => isPreValue(get$7(elm, 'white-space')));\n    const isAtBeginningOfBody = (root, pos) => prevPosition(root.dom, pos).isNone();\n    const isAtEndOfBody = (root, pos) => nextPosition(root.dom, pos).isNone();\n    const isAtLineBoundary = (root, pos) => isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos) || isAtEndOfBlock(root, pos) || isAfterBr(root, pos) || isBeforeBr$1(root, pos);\n    const isCefBlock = node => isNonNullable(node) && isContentEditableFalse$b(node) && isBlockLike(node);\n    const isSiblingCefBlock = (root, direction) => container => {\n      return isCefBlock(new DomTreeWalker(container, root)[direction]());\n    };\n    const isBeforeCefBlock = (root, pos) => {\n      const nextPos = nextPosition(root.dom, pos).getOr(pos);\n      const isNextCefBlock = isSiblingCefBlock(root.dom, 'next');\n      return pos.isAtEnd() && (isNextCefBlock(pos.container()) || isNextCefBlock(nextPos.container()));\n    };\n    const isAfterCefBlock = (root, pos) => {\n      const prevPos = prevPosition(root.dom, pos).getOr(pos);\n      const isPrevCefBlock = isSiblingCefBlock(root.dom, 'prev');\n      return pos.isAtStart() && (isPrevCefBlock(pos.container()) || isPrevCefBlock(prevPos.container()));\n    };\n    const needsToHaveNbsp = (root, pos) => {\n      if (isInPre(pos)) {\n        return false;\n      } else {\n        return isAtLineBoundary(root, pos) || hasSpaceBefore(root, pos) || hasSpaceAfter(root, pos);\n      }\n    };\n    const needsToBeNbspLeft = (root, pos) => {\n      if (isInPre(pos)) {\n        return false;\n      } else {\n        return isAtStartOfBlock(root, pos) || isBeforeBlock(root, pos) || isAfterBr(root, pos) || hasSpaceBefore(root, pos) || isAfterCefBlock(root, pos);\n      }\n    };\n    const leanRight = pos => {\n      const container = pos.container();\n      const offset = pos.offset();\n      if (isText$a(container) && offset < container.data.length) {\n        return CaretPosition(container, offset + 1);\n      } else {\n        return pos;\n      }\n    };\n    const needsToBeNbspRight = (root, pos) => {\n      if (isInPre(pos)) {\n        return false;\n      } else {\n        return isAtEndOfBlock(root, pos) || isAfterBlock(root, pos) || isBeforeBr$1(root, pos) || hasSpaceAfter(root, pos) || isBeforeCefBlock(root, pos);\n      }\n    };\n    const needsToBeNbsp = (root, pos) => needsToBeNbspLeft(root, pos) || needsToBeNbspRight(root, leanRight(pos));\n    const isNbspAt = (text, offset) => isNbsp(text.charAt(offset));\n    const isWhiteSpaceAt = (text, offset) => isWhiteSpace(text.charAt(offset));\n    const hasNbsp = pos => {\n      const container = pos.container();\n      return isText$a(container) && contains$1(container.data, nbsp);\n    };\n    const normalizeNbspMiddle = text => {\n      const chars = text.split('');\n      return map$3(chars, (chr, i) => {\n        if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent(chars[i - 1]) && isContent(chars[i + 1])) {\n          return ' ';\n        } else {\n          return chr;\n        }\n      }).join('');\n    };\n    const normalizeNbspAtStart = (root, node, makeNbsp) => {\n      const text = node.data;\n      const firstPos = CaretPosition(node, 0);\n      if (!makeNbsp && isNbspAt(text, 0) && !needsToBeNbsp(root, firstPos)) {\n        node.data = ' ' + text.slice(1);\n        return true;\n      } else if (makeNbsp && isWhiteSpaceAt(text, 0) && needsToBeNbspLeft(root, firstPos)) {\n        node.data = nbsp + text.slice(1);\n        return true;\n      } else {\n        return false;\n      }\n    };\n    const normalizeNbspInMiddleOfTextNode = node => {\n      const text = node.data;\n      const newText = normalizeNbspMiddle(text);\n      if (newText !== text) {\n        node.data = newText;\n        return true;\n      } else {\n        return false;\n      }\n    };\n    const normalizeNbspAtEnd = (root, node, makeNbsp) => {\n      const text = node.data;\n      const lastPos = CaretPosition(node, text.length - 1);\n      if (!makeNbsp && isNbspAt(text, text.length - 1) && !needsToBeNbsp(root, lastPos)) {\n        node.data = text.slice(0, -1) + ' ';\n        return true;\n      } else if (makeNbsp && isWhiteSpaceAt(text, text.length - 1) && needsToBeNbspRight(root, lastPos)) {\n        node.data = text.slice(0, -1) + nbsp;\n        return true;\n      } else {\n        return false;\n      }\n    };\n    const normalizeNbsps = (root, pos) => {\n      const container = pos.container();\n      if (!isText$a(container)) {\n        return Optional.none();\n      }\n      if (hasNbsp(pos)) {\n        const normalized = normalizeNbspAtStart(root, container, false) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container, false);\n        return someIf(normalized, pos);\n      } else if (needsToBeNbsp(root, pos)) {\n        const normalized = normalizeNbspAtStart(root, container, true) || normalizeNbspAtEnd(root, container, true);\n        return someIf(normalized, pos);\n      } else {\n        return Optional.none();\n      }\n    };\n    const normalizeNbspsInEditor = editor => {\n      const root = SugarElement.fromDom(editor.getBody());\n      if (editor.selection.isCollapsed()) {\n        normalizeNbsps(root, CaretPosition.fromRangeStart(editor.selection.getRng())).each(pos => {\n          editor.selection.setRng(pos.toRange());\n        });\n      }\n    };\n\n    const normalize$1 = (node, offset, count) => {\n      if (count === 0) {\n        return;\n      }\n      const elm = SugarElement.fromDom(node);\n      const root = ancestor$4(elm, isBlock$2).getOr(elm);\n      const whitespace = node.data.slice(offset, offset + count);\n      const isEndOfContent = offset + count >= node.data.length && needsToBeNbspRight(root, CaretPosition(node, node.data.length));\n      const isStartOfContent = offset === 0 && needsToBeNbspLeft(root, CaretPosition(node, 0));\n      node.replaceData(offset, count, normalize$4(whitespace, 4, isStartOfContent, isEndOfContent));\n    };\n    const normalizeWhitespaceAfter = (node, offset) => {\n      const content = node.data.slice(offset);\n      const whitespaceCount = content.length - lTrim(content).length;\n      normalize$1(node, offset, whitespaceCount);\n    };\n    const normalizeWhitespaceBefore = (node, offset) => {\n      const content = node.data.slice(0, offset);\n      const whitespaceCount = content.length - rTrim(content).length;\n      normalize$1(node, offset - whitespaceCount, whitespaceCount);\n    };\n    const mergeTextNodes = (prevNode, nextNode, normalizeWhitespace, mergeToPrev = true) => {\n      const whitespaceOffset = rTrim(prevNode.data).length;\n      const newNode = mergeToPrev ? prevNode : nextNode;\n      const removeNode = mergeToPrev ? nextNode : prevNode;\n      if (mergeToPrev) {\n        newNode.appendData(removeNode.data);\n      } else {\n        newNode.insertData(0, removeNode.data);\n      }\n      remove$5(SugarElement.fromDom(removeNode));\n      if (normalizeWhitespace) {\n        normalizeWhitespaceAfter(newNode, whitespaceOffset);\n      }\n      return newNode;\n    };\n\n    const needsReposition = (pos, elm) => {\n      const container = pos.container();\n      const offset = pos.offset();\n      return !CaretPosition.isTextPosition(pos) && container === elm.parentNode && offset > CaretPosition.before(elm).offset();\n    };\n    const reposition = (elm, pos) => needsReposition(pos, elm) ? CaretPosition(pos.container(), pos.offset() - 1) : pos;\n    const beforeOrStartOf = node => isText$a(node) ? CaretPosition(node, 0) : CaretPosition.before(node);\n    const afterOrEndOf = node => isText$a(node) ? CaretPosition(node, node.data.length) : CaretPosition.after(node);\n    const getPreviousSiblingCaretPosition = elm => {\n      if (isCaretCandidate$3(elm.previousSibling)) {\n        return Optional.some(afterOrEndOf(elm.previousSibling));\n      } else {\n        return elm.previousSibling ? lastPositionIn(elm.previousSibling) : Optional.none();\n      }\n    };\n    const getNextSiblingCaretPosition = elm => {\n      if (isCaretCandidate$3(elm.nextSibling)) {\n        return Optional.some(beforeOrStartOf(elm.nextSibling));\n      } else {\n        return elm.nextSibling ? firstPositionIn(elm.nextSibling) : Optional.none();\n      }\n    };\n    const findCaretPositionBackwardsFromElm = (rootElement, elm) => {\n      return Optional.from(elm.previousSibling ? elm.previousSibling : elm.parentNode).bind(node => prevPosition(rootElement, CaretPosition.before(node))).orThunk(() => nextPosition(rootElement, CaretPosition.after(elm)));\n    };\n    const findCaretPositionForwardsFromElm = (rootElement, elm) => nextPosition(rootElement, CaretPosition.after(elm)).orThunk(() => prevPosition(rootElement, CaretPosition.before(elm)));\n    const findCaretPositionBackwards = (rootElement, elm) => getPreviousSiblingCaretPosition(elm).orThunk(() => getNextSiblingCaretPosition(elm)).orThunk(() => findCaretPositionBackwardsFromElm(rootElement, elm));\n    const findCaretPositionForward = (rootElement, elm) => getNextSiblingCaretPosition(elm).orThunk(() => getPreviousSiblingCaretPosition(elm)).orThunk(() => findCaretPositionForwardsFromElm(rootElement, elm));\n    const findCaretPosition = (forward, rootElement, elm) => forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm);\n    const findCaretPosOutsideElmAfterDelete = (forward, rootElement, elm) => findCaretPosition(forward, rootElement, elm).map(curry(reposition, elm));\n    const setSelection$1 = (editor, forward, pos) => {\n      pos.fold(() => {\n        editor.focus();\n      }, pos => {\n        editor.selection.setRng(pos.toRange(), forward);\n      });\n    };\n    const eqRawNode = rawNode => elm => elm.dom === rawNode;\n    const isBlock = (editor, elm) => elm && has$2(editor.schema.getBlockElements(), name(elm));\n    const paddEmptyBlock = elm => {\n      if (isEmpty$2(elm)) {\n        const br = SugarElement.fromHtml('<br data-mce-bogus=\"1\">');\n        empty(elm);\n        append$1(elm, br);\n        return Optional.some(CaretPosition.before(br.dom));\n      } else {\n        return Optional.none();\n      }\n    };\n    const deleteNormalized = (elm, afterDeletePosOpt, normalizeWhitespace) => {\n      const prevTextOpt = prevSibling(elm).filter(isText$b);\n      const nextTextOpt = nextSibling(elm).filter(isText$b);\n      remove$5(elm);\n      return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, (prev, next, pos) => {\n        const prevNode = prev.dom, nextNode = next.dom;\n        const offset = prevNode.data.length;\n        mergeTextNodes(prevNode, nextNode, normalizeWhitespace);\n        return pos.container() === nextNode ? CaretPosition(prevNode, offset) : pos;\n      }).orThunk(() => {\n        if (normalizeWhitespace) {\n          prevTextOpt.each(elm => normalizeWhitespaceBefore(elm.dom, elm.dom.length));\n          nextTextOpt.each(elm => normalizeWhitespaceAfter(elm.dom, 0));\n        }\n        return afterDeletePosOpt;\n      });\n    };\n    const isInlineElement = (editor, element) => has$2(editor.schema.getTextInlineElements(), name(element));\n    const deleteElement$2 = (editor, forward, elm, moveCaret = true) => {\n      const afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom);\n      const parentBlock = ancestor$4(elm, curry(isBlock, editor), eqRawNode(editor.getBody()));\n      const normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos, isInlineElement(editor, elm));\n      if (editor.dom.isEmpty(editor.getBody())) {\n        editor.setContent('');\n        editor.selection.setCursorLocation();\n      } else {\n        parentBlock.bind(paddEmptyBlock).fold(() => {\n          if (moveCaret) {\n            setSelection$1(editor, forward, normalizedAfterDeletePos);\n          }\n        }, paddPos => {\n          if (moveCaret) {\n            setSelection$1(editor, forward, Optional.some(paddPos));\n          }\n        });\n      }\n    };\n\n    const strongRtl = /[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/;\n    const hasStrongRtl = text => strongRtl.test(text);\n\n    const isInlineTarget = (editor, elm) => is$1(SugarElement.fromDom(elm), getInlineBoundarySelector(editor)) && !isTransparentBlock(editor.schema, elm) && editor.dom.isEditable(elm);\n    const isRtl = element => {\n      var _a;\n      return DOMUtils.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl((_a = element.textContent) !== null && _a !== void 0 ? _a : '');\n    };\n    const findInlineParents = (isInlineTarget, rootNode, pos) => filter$5(DOMUtils.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);\n    const findRootInline = (isInlineTarget, rootNode, pos) => {\n      const parents = findInlineParents(isInlineTarget, rootNode, pos);\n      return Optional.from(parents[parents.length - 1]);\n    };\n    const hasSameParentBlock = (rootNode, node1, node2) => {\n      const block1 = getParentBlock$3(node1, rootNode);\n      const block2 = getParentBlock$3(node2, rootNode);\n      return isNonNullable(block1) && block1 === block2;\n    };\n    const isAtZwsp = pos => isBeforeInline(pos) || isAfterInline(pos);\n    const normalizePosition = (forward, pos) => {\n      const container = pos.container(), offset = pos.offset();\n      if (forward) {\n        if (isCaretContainerInline(container)) {\n          if (isText$a(container.nextSibling)) {\n            return CaretPosition(container.nextSibling, 0);\n          } else {\n            return CaretPosition.after(container);\n          }\n        } else {\n          return isBeforeInline(pos) ? CaretPosition(container, offset + 1) : pos;\n        }\n      } else {\n        if (isCaretContainerInline(container)) {\n          if (isText$a(container.previousSibling)) {\n            return CaretPosition(container.previousSibling, container.previousSibling.data.length);\n          } else {\n            return CaretPosition.before(container);\n          }\n        } else {\n          return isAfterInline(pos) ? CaretPosition(container, offset - 1) : pos;\n        }\n      }\n    };\n    const normalizeForwards = curry(normalizePosition, true);\n    const normalizeBackwards = curry(normalizePosition, false);\n\n    const execCommandIgnoreInputEvents = (editor, command) => {\n      const inputBlocker = e => e.stopImmediatePropagation();\n      editor.on('beforeinput input', inputBlocker, true);\n      editor.getDoc().execCommand(command);\n      editor.off('beforeinput input', inputBlocker);\n    };\n    const execEditorDeleteCommand = editor => {\n      editor.execCommand('delete');\n    };\n    const execNativeDeleteCommand = editor => execCommandIgnoreInputEvents(editor, 'Delete');\n    const execNativeForwardDeleteCommand = editor => execCommandIgnoreInputEvents(editor, 'ForwardDelete');\n    const isBeforeRoot = rootNode => elm => is$2(parent(elm), rootNode, eq);\n    const isTextBlockOrListItem = element => isTextBlock$2(element) || isListItem$1(element);\n    const getParentBlock$2 = (rootNode, elm) => {\n      if (contains(rootNode, elm)) {\n        return closest$4(elm, isTextBlockOrListItem, isBeforeRoot(rootNode));\n      } else {\n        return Optional.none();\n      }\n    };\n    const paddEmptyBody = (editor, moveSelection = true) => {\n      if (editor.dom.isEmpty(editor.getBody())) {\n        editor.setContent('', { no_selection: !moveSelection });\n      }\n    };\n    const willDeleteLastPositionInElement = (forward, fromPos, elm) => lift2(firstPositionIn(elm), lastPositionIn(elm), (firstPos, lastPos) => {\n      const normalizedFirstPos = normalizePosition(true, firstPos);\n      const normalizedLastPos = normalizePosition(false, lastPos);\n      const normalizedFromPos = normalizePosition(false, fromPos);\n      if (forward) {\n        return nextPosition(elm, normalizedFromPos).exists(nextPos => nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos));\n      } else {\n        return prevPosition(elm, normalizedFromPos).exists(prevPos => prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos));\n      }\n    }).getOr(true);\n    const freefallRtl = root => {\n      const child = isComment$1(root) ? prevSibling(root) : lastChild(root);\n      return child.bind(freefallRtl).orThunk(() => Optional.some(root));\n    };\n    const deleteRangeContents = (editor, rng, root, moveSelection = true) => {\n      var _a;\n      rng.deleteContents();\n      const lastNode = freefallRtl(root).getOr(root);\n      const lastBlock = SugarElement.fromDom((_a = editor.dom.getParent(lastNode.dom, editor.dom.isBlock)) !== null && _a !== void 0 ? _a : root.dom);\n      if (lastBlock.dom === editor.getBody()) {\n        paddEmptyBody(editor, moveSelection);\n      } else if (isEmpty$2(lastBlock)) {\n        fillWithPaddingBr(lastBlock);\n        if (moveSelection) {\n          editor.selection.setCursorLocation(lastBlock.dom, 0);\n        }\n      }\n      if (!eq(root, lastBlock)) {\n        const additionalCleanupNodes = is$2(parent(lastBlock), root) ? [] : siblings(lastBlock);\n        each$e(additionalCleanupNodes.concat(children$1(root)), node => {\n          if (!eq(node, lastBlock) && !contains(node, lastBlock) && isEmpty$2(node)) {\n            remove$5(node);\n          }\n        });\n      }\n    };\n\n    const isRootFromElement = root => cur => eq(root, cur);\n    const getTableCells = table => descendants(table, 'td,th');\n    const getTableDetailsFromRange = (rng, isRoot) => {\n      const getTable = node => getClosestTable(SugarElement.fromDom(node), isRoot);\n      const startTable = getTable(rng.startContainer);\n      const endTable = getTable(rng.endContainer);\n      const isStartInTable = startTable.isSome();\n      const isEndInTable = endTable.isSome();\n      const isSameTable = lift2(startTable, endTable, eq).getOr(false);\n      const isMultiTable = !isSameTable && isStartInTable && isEndInTable;\n      return {\n        startTable,\n        endTable,\n        isStartInTable,\n        isEndInTable,\n        isSameTable,\n        isMultiTable\n      };\n    };\n\n    const tableCellRng = (start, end) => ({\n      start,\n      end\n    });\n    const tableSelection = (rng, table, cells) => ({\n      rng,\n      table,\n      cells\n    });\n    const deleteAction = Adt.generate([\n      {\n        singleCellTable: [\n          'rng',\n          'cell'\n        ]\n      },\n      { fullTable: ['table'] },\n      {\n        partialTable: [\n          'cells',\n          'outsideDetails'\n        ]\n      },\n      {\n        multiTable: [\n          'startTableCells',\n          'endTableCells',\n          'betweenRng'\n        ]\n      }\n    ]);\n    const getClosestCell$1 = (container, isRoot) => closest$3(SugarElement.fromDom(container), 'td,th', isRoot);\n    const isExpandedCellRng = cellRng => !eq(cellRng.start, cellRng.end);\n    const getTableFromCellRng = (cellRng, isRoot) => getClosestTable(cellRng.start, isRoot).bind(startParentTable => getClosestTable(cellRng.end, isRoot).bind(endParentTable => someIf(eq(startParentTable, endParentTable), startParentTable)));\n    const isSingleCellTable = (cellRng, isRoot) => !isExpandedCellRng(cellRng) && getTableFromCellRng(cellRng, isRoot).exists(table => {\n      const rows = table.dom.rows;\n      return rows.length === 1 && rows[0].cells.length === 1;\n    });\n    const getCellRng = (rng, isRoot) => {\n      const startCell = getClosestCell$1(rng.startContainer, isRoot);\n      const endCell = getClosestCell$1(rng.endContainer, isRoot);\n      return lift2(startCell, endCell, tableCellRng);\n    };\n    const getCellRangeFromStartTable = isRoot => startCell => getClosestTable(startCell, isRoot).bind(table => last$3(getTableCells(table)).map(endCell => tableCellRng(startCell, endCell)));\n    const getCellRangeFromEndTable = isRoot => endCell => getClosestTable(endCell, isRoot).bind(table => head(getTableCells(table)).map(startCell => tableCellRng(startCell, endCell)));\n    const getTableSelectionFromCellRng = isRoot => cellRng => getTableFromCellRng(cellRng, isRoot).map(table => tableSelection(cellRng, table, getTableCells(table)));\n    const getTableSelections = (cellRng, selectionDetails, rng, isRoot) => {\n      if (rng.collapsed || !cellRng.forall(isExpandedCellRng)) {\n        return Optional.none();\n      } else if (selectionDetails.isSameTable) {\n        const sameTableSelection = cellRng.bind(getTableSelectionFromCellRng(isRoot));\n        return Optional.some({\n          start: sameTableSelection,\n          end: sameTableSelection\n        });\n      } else {\n        const startCell = getClosestCell$1(rng.startContainer, isRoot);\n        const endCell = getClosestCell$1(rng.endContainer, isRoot);\n        const startTableSelection = startCell.bind(getCellRangeFromStartTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n        const endTableSelection = endCell.bind(getCellRangeFromEndTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n        return Optional.some({\n          start: startTableSelection,\n          end: endTableSelection\n        });\n      }\n    };\n    const getCellIndex = (cells, cell) => findIndex$2(cells, x => eq(x, cell));\n    const getSelectedCells = tableSelection => lift2(getCellIndex(tableSelection.cells, tableSelection.rng.start), getCellIndex(tableSelection.cells, tableSelection.rng.end), (startIndex, endIndex) => tableSelection.cells.slice(startIndex, endIndex + 1));\n    const isSingleCellTableContentSelected = (optCellRng, rng, isRoot) => optCellRng.exists(cellRng => isSingleCellTable(cellRng, isRoot) && hasAllContentsSelected(cellRng.start, rng));\n    const unselectCells = (rng, selectionDetails) => {\n      const {startTable, endTable} = selectionDetails;\n      const otherContentRng = rng.cloneRange();\n      startTable.each(table => otherContentRng.setStartAfter(table.dom));\n      endTable.each(table => otherContentRng.setEndBefore(table.dom));\n      return otherContentRng;\n    };\n    const handleSingleTable = (cellRng, selectionDetails, rng, isRoot) => getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(({start, end}) => start.or(end)).bind(tableSelection => {\n      const {isSameTable} = selectionDetails;\n      const selectedCells = getSelectedCells(tableSelection).getOr([]);\n      if (isSameTable && tableSelection.cells.length === selectedCells.length) {\n        return Optional.some(deleteAction.fullTable(tableSelection.table));\n      } else if (selectedCells.length > 0) {\n        if (isSameTable) {\n          return Optional.some(deleteAction.partialTable(selectedCells, Optional.none()));\n        } else {\n          const otherContentRng = unselectCells(rng, selectionDetails);\n          return Optional.some(deleteAction.partialTable(selectedCells, Optional.some({\n            ...selectionDetails,\n            rng: otherContentRng\n          })));\n        }\n      } else {\n        return Optional.none();\n      }\n    });\n    const handleMultiTable = (cellRng, selectionDetails, rng, isRoot) => getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(({start, end}) => {\n      const startTableSelectedCells = start.bind(getSelectedCells).getOr([]);\n      const endTableSelectedCells = end.bind(getSelectedCells).getOr([]);\n      if (startTableSelectedCells.length > 0 && endTableSelectedCells.length > 0) {\n        const otherContentRng = unselectCells(rng, selectionDetails);\n        return Optional.some(deleteAction.multiTable(startTableSelectedCells, endTableSelectedCells, otherContentRng));\n      } else {\n        return Optional.none();\n      }\n    });\n    const getActionFromRange = (root, rng) => {\n      const isRoot = isRootFromElement(root);\n      const optCellRng = getCellRng(rng, isRoot);\n      const selectionDetails = getTableDetailsFromRange(rng, isRoot);\n      if (isSingleCellTableContentSelected(optCellRng, rng, isRoot)) {\n        return optCellRng.map(cellRng => deleteAction.singleCellTable(rng, cellRng.start));\n      } else if (selectionDetails.isMultiTable) {\n        return handleMultiTable(optCellRng, selectionDetails, rng, isRoot);\n      } else {\n        return handleSingleTable(optCellRng, selectionDetails, rng, isRoot);\n      }\n    };\n\n    const cleanCells = cells => each$e(cells, cell => {\n      remove$a(cell, 'contenteditable');\n      fillWithPaddingBr(cell);\n    });\n    const getOutsideBlock = (editor, container) => Optional.from(editor.dom.getParent(container, editor.dom.isBlock)).map(SugarElement.fromDom);\n    const handleEmptyBlock = (editor, startInTable, emptyBlock) => {\n      emptyBlock.each(block => {\n        if (startInTable) {\n          remove$5(block);\n        } else {\n          fillWithPaddingBr(block);\n          editor.selection.setCursorLocation(block.dom, 0);\n        }\n      });\n    };\n    const deleteContentInsideCell = (editor, cell, rng, isFirstCellInSelection) => {\n      const insideTableRng = rng.cloneRange();\n      if (isFirstCellInSelection) {\n        insideTableRng.setStart(rng.startContainer, rng.startOffset);\n        insideTableRng.setEndAfter(cell.dom.lastChild);\n      } else {\n        insideTableRng.setStartBefore(cell.dom.firstChild);\n        insideTableRng.setEnd(rng.endContainer, rng.endOffset);\n      }\n      deleteCellContents(editor, insideTableRng, cell, false).each(action => action());\n    };\n    const collapseAndRestoreCellSelection = editor => {\n      const selectedCells = getCellsFromEditor(editor);\n      const selectedNode = SugarElement.fromDom(editor.selection.getNode());\n      if (isTableCell$3(selectedNode.dom) && isEmpty$2(selectedNode)) {\n        editor.selection.setCursorLocation(selectedNode.dom, 0);\n      } else {\n        editor.selection.collapse(true);\n      }\n      if (selectedCells.length > 1 && exists(selectedCells, cell => eq(cell, selectedNode))) {\n        set$3(selectedNode, 'data-mce-selected', '1');\n      }\n    };\n    const emptySingleTableCells = (editor, cells, outsideDetails) => Optional.some(() => {\n      const editorRng = editor.selection.getRng();\n      const cellsToClean = outsideDetails.bind(({rng, isStartInTable}) => {\n        const outsideBlock = getOutsideBlock(editor, isStartInTable ? rng.endContainer : rng.startContainer);\n        rng.deleteContents();\n        handleEmptyBlock(editor, isStartInTable, outsideBlock.filter(isEmpty$2));\n        const endPointCell = isStartInTable ? cells[0] : cells[cells.length - 1];\n        deleteContentInsideCell(editor, endPointCell, editorRng, isStartInTable);\n        if (!isEmpty$2(endPointCell)) {\n          return Optional.some(isStartInTable ? cells.slice(1) : cells.slice(0, -1));\n        } else {\n          return Optional.none();\n        }\n      }).getOr(cells);\n      cleanCells(cellsToClean);\n      collapseAndRestoreCellSelection(editor);\n    });\n    const emptyMultiTableCells = (editor, startTableCells, endTableCells, betweenRng) => Optional.some(() => {\n      const rng = editor.selection.getRng();\n      const startCell = startTableCells[0];\n      const endCell = endTableCells[endTableCells.length - 1];\n      deleteContentInsideCell(editor, startCell, rng, true);\n      deleteContentInsideCell(editor, endCell, rng, false);\n      const startTableCellsToClean = isEmpty$2(startCell) ? startTableCells : startTableCells.slice(1);\n      const endTableCellsToClean = isEmpty$2(endCell) ? endTableCells : endTableCells.slice(0, -1);\n      cleanCells(startTableCellsToClean.concat(endTableCellsToClean));\n      betweenRng.deleteContents();\n      collapseAndRestoreCellSelection(editor);\n    });\n    const deleteCellContents = (editor, rng, cell, moveSelection = true) => Optional.some(() => {\n      deleteRangeContents(editor, rng, cell, moveSelection);\n    });\n    const deleteTableElement = (editor, table) => Optional.some(() => deleteElement$2(editor, false, table));\n    const deleteCellRange = (editor, rootElm, rng) => getActionFromRange(rootElm, rng).bind(action => action.fold(curry(deleteCellContents, editor), curry(deleteTableElement, editor), curry(emptySingleTableCells, editor), curry(emptyMultiTableCells, editor)));\n    const deleteCaptionRange = (editor, caption) => emptyElement(editor, caption);\n    const deleteTableRange = (editor, rootElm, rng, startElm) => getParentCaption(rootElm, startElm).fold(() => deleteCellRange(editor, rootElm, rng), caption => deleteCaptionRange(editor, caption));\n    const deleteRange$3 = (editor, startElm, selectedCells) => {\n      const rootNode = SugarElement.fromDom(editor.getBody());\n      const rng = editor.selection.getRng();\n      return selectedCells.length !== 0 ? emptySingleTableCells(editor, selectedCells, Optional.none()) : deleteTableRange(editor, rootNode, rng, startElm);\n    };\n    const getParentCell = (rootElm, elm) => find$2(parentsAndSelf(elm, rootElm), isTableCell$2);\n    const getParentCaption = (rootElm, elm) => find$2(parentsAndSelf(elm, rootElm), isTag('caption'));\n    const deleteBetweenCells = (editor, rootElm, forward, fromCell, from) => navigate(forward, editor.getBody(), from).bind(to => getParentCell(rootElm, SugarElement.fromDom(to.getNode())).bind(toCell => eq(toCell, fromCell) ? Optional.none() : Optional.some(noop)));\n    const emptyElement = (editor, elm) => Optional.some(() => {\n      fillWithPaddingBr(elm);\n      editor.selection.setCursorLocation(elm.dom, 0);\n    });\n    const isDeleteOfLastCharPos = (fromCaption, forward, from, to) => firstPositionIn(fromCaption.dom).bind(first => lastPositionIn(fromCaption.dom).map(last => forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first))).getOr(true);\n    const emptyCaretCaption = (editor, elm) => emptyElement(editor, elm);\n    const validateCaretCaption = (rootElm, fromCaption, to) => getParentCaption(rootElm, SugarElement.fromDom(to.getNode())).fold(() => Optional.some(noop), toCaption => someIf(!eq(toCaption, fromCaption), noop));\n    const deleteCaretInsideCaption = (editor, rootElm, forward, fromCaption, from) => navigate(forward, editor.getBody(), from).fold(() => Optional.some(noop), to => isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to));\n    const deleteCaretCells = (editor, forward, rootElm, startElm) => {\n      const from = CaretPosition.fromRangeStart(editor.selection.getRng());\n      return getParentCell(rootElm, startElm).bind(fromCell => isEmpty$2(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from));\n    };\n    const deleteCaretCaption = (editor, forward, rootElm, fromCaption) => {\n      const from = CaretPosition.fromRangeStart(editor.selection.getRng());\n      return isEmpty$2(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);\n    };\n    const isNearTable = (forward, pos) => forward ? isBeforeTable(pos) : isAfterTable(pos);\n    const isBeforeOrAfterTable = (editor, forward) => {\n      const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n      return isNearTable(forward, fromPos) || fromPosition(forward, editor.getBody(), fromPos).exists(pos => isNearTable(forward, pos));\n    };\n    const deleteCaret$3 = (editor, forward, startElm) => {\n      const rootElm = SugarElement.fromDom(editor.getBody());\n      return getParentCaption(rootElm, startElm).fold(() => deleteCaretCells(editor, forward, rootElm, startElm).orThunk(() => someIf(isBeforeOrAfterTable(editor, forward), noop)), fromCaption => deleteCaretCaption(editor, forward, rootElm, fromCaption));\n    };\n    const backspaceDelete$9 = (editor, forward) => {\n      const startElm = SugarElement.fromDom(editor.selection.getStart(true));\n      const cells = getCellsFromEditor(editor);\n      return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret$3(editor, forward, startElm) : deleteRange$3(editor, startElm, cells);\n    };\n\n    const getContentEditableRoot$1 = (root, node) => {\n      let tempNode = node;\n      while (tempNode && tempNode !== root) {\n        if (isContentEditableTrue$3(tempNode) || isContentEditableFalse$b(tempNode)) {\n          return tempNode;\n        }\n        tempNode = tempNode.parentNode;\n      }\n      return null;\n    };\n\n    const internalAttributesPrefixes = [\n      'data-ephox-',\n      'data-mce-',\n      'data-alloy-',\n      'data-snooker-',\n      '_'\n    ];\n    const each$9 = Tools.each;\n    const ElementUtils = editor => {\n      const dom = editor.dom;\n      const internalAttributes = new Set(editor.serializer.getTempAttrs());\n      const compare = (node1, node2) => {\n        if (node1.nodeName !== node2.nodeName || node1.nodeType !== node2.nodeType) {\n          return false;\n        }\n        const getAttribs = node => {\n          const attribs = {};\n          each$9(dom.getAttribs(node), attr => {\n            const name = attr.nodeName.toLowerCase();\n            if (name !== 'style' && !isAttributeInternal(name)) {\n              attribs[name] = dom.getAttrib(node, name);\n            }\n          });\n          return attribs;\n        };\n        const compareObjects = (obj1, obj2) => {\n          for (const name in obj1) {\n            if (has$2(obj1, name)) {\n              const value = obj2[name];\n              if (isUndefined(value)) {\n                return false;\n              }\n              if (obj1[name] !== value) {\n                return false;\n              }\n              delete obj2[name];\n            }\n          }\n          for (const name in obj2) {\n            if (has$2(obj2, name)) {\n              return false;\n            }\n          }\n          return true;\n        };\n        if (isElement$6(node1) && isElement$6(node2)) {\n          if (!compareObjects(getAttribs(node1), getAttribs(node2))) {\n            return false;\n          }\n          if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) {\n            return false;\n          }\n        }\n        return !isBookmarkNode$1(node1) && !isBookmarkNode$1(node2);\n      };\n      const isAttributeInternal = attributeName => exists(internalAttributesPrefixes, value => startsWith(attributeName, value)) || internalAttributes.has(attributeName);\n      return {\n        compare,\n        isAttributeInternal\n      };\n    };\n\n    const traverse = (root, fn) => {\n      let node = root;\n      while (node = node.walk()) {\n        fn(node);\n      }\n    };\n    const matchNode$1 = (nodeFilters, attributeFilters, node, matches) => {\n      const name = node.name;\n      for (let ni = 0, nl = nodeFilters.length; ni < nl; ni++) {\n        const filter = nodeFilters[ni];\n        if (filter.name === name) {\n          const match = matches.nodes[name];\n          if (match) {\n            match.nodes.push(node);\n          } else {\n            matches.nodes[name] = {\n              filter,\n              nodes: [node]\n            };\n          }\n        }\n      }\n      if (node.attributes) {\n        for (let ai = 0, al = attributeFilters.length; ai < al; ai++) {\n          const filter = attributeFilters[ai];\n          const attrName = filter.name;\n          if (attrName in node.attributes.map) {\n            const match = matches.attributes[attrName];\n            if (match) {\n              match.nodes.push(node);\n            } else {\n              matches.attributes[attrName] = {\n                filter,\n                nodes: [node]\n              };\n            }\n          }\n        }\n      }\n    };\n    const findMatchingNodes = (nodeFilters, attributeFilters, node) => {\n      const matches = {\n        nodes: {},\n        attributes: {}\n      };\n      if (node.firstChild) {\n        traverse(node, childNode => {\n          matchNode$1(nodeFilters, attributeFilters, childNode, matches);\n        });\n      }\n      return matches;\n    };\n    const runFilters = (matches, args) => {\n      const run = (matchRecord, filteringAttributes) => {\n        each$d(matchRecord, match => {\n          const nodes = from(match.nodes);\n          each$e(match.filter.callbacks, callback => {\n            for (let i = nodes.length - 1; i >= 0; i--) {\n              const node = nodes[i];\n              const valueMatches = filteringAttributes ? node.attr(match.filter.name) !== undefined : node.name === match.filter.name;\n              if (!valueMatches || isNullable(node.parent)) {\n                nodes.splice(i, 1);\n              }\n            }\n            if (nodes.length > 0) {\n              callback(nodes, match.filter.name, args);\n            }\n          });\n        });\n      };\n      run(matches.nodes, false);\n      run(matches.attributes, true);\n    };\n    const filter$2 = (nodeFilters, attributeFilters, node, args = {}) => {\n      const matches = findMatchingNodes(nodeFilters, attributeFilters, node);\n      runFilters(matches, args);\n    };\n\n    const paddEmptyNode = (args, isBlock, node) => {\n      if (args.insert && isBlock(node)) {\n        const astNode = new AstNode('br', 1);\n        astNode.attr('data-mce-bogus', '1');\n        node.empty().append(astNode);\n      } else {\n        node.empty().append(new AstNode('#text', 3)).value = nbsp;\n      }\n    };\n    const isPaddedWithNbsp = node => {\n      var _a;\n      return hasOnlyChild(node, '#text') && ((_a = node === null || node === void 0 ? void 0 : node.firstChild) === null || _a === void 0 ? void 0 : _a.value) === nbsp;\n    };\n    const hasOnlyChild = (node, name) => {\n      const firstChild = node === null || node === void 0 ? void 0 : node.firstChild;\n      return isNonNullable(firstChild) && firstChild === node.lastChild && firstChild.name === name;\n    };\n    const isPadded = (schema, node) => {\n      const rule = schema.getElementRule(node.name);\n      return (rule === null || rule === void 0 ? void 0 : rule.paddEmpty) === true;\n    };\n    const isEmpty = (schema, nonEmptyElements, whitespaceElements, node) => node.isEmpty(nonEmptyElements, whitespaceElements, node => isPadded(schema, node));\n    const isLineBreakNode = (node, isBlock) => isNonNullable(node) && (isBlock(node) || node.name === 'br');\n    const findClosestEditingHost = scope => {\n      let editableNode;\n      for (let node = scope; node; node = node.parent) {\n        const contentEditable = node.attr('contenteditable');\n        if (contentEditable === 'false') {\n          break;\n        } else if (contentEditable === 'true') {\n          editableNode = node;\n        }\n      }\n      return Optional.from(editableNode);\n    };\n\n    const removeOrUnwrapInvalidNode = (node, schema, originalNodeParent = node.parent) => {\n      if (schema.getSpecialElements()[node.name]) {\n        node.empty().remove();\n      } else {\n        const children = node.children();\n        for (const childNode of children) {\n          if (originalNodeParent && !schema.isValidChild(originalNodeParent.name, childNode.name)) {\n            removeOrUnwrapInvalidNode(childNode, schema, originalNodeParent);\n          }\n        }\n        node.unwrap();\n      }\n    };\n    const cleanInvalidNodes = (nodes, schema, rootNode, onCreate = noop) => {\n      const textBlockElements = schema.getTextBlockElements();\n      const nonEmptyElements = schema.getNonEmptyElements();\n      const whitespaceElements = schema.getWhitespaceElements();\n      const nonSplittableElements = Tools.makeMap('tr,td,th,tbody,thead,tfoot,table');\n      const fixed = new Set();\n      const isSplittableElement = node => node !== rootNode && !nonSplittableElements[node.name];\n      for (let ni = 0; ni < nodes.length; ni++) {\n        const node = nodes[ni];\n        let parent;\n        let newParent;\n        let tempNode;\n        if (!node.parent || fixed.has(node)) {\n          continue;\n        }\n        if (textBlockElements[node.name] && node.parent.name === 'li') {\n          let sibling = node.next;\n          while (sibling) {\n            if (textBlockElements[sibling.name]) {\n              sibling.name = 'li';\n              fixed.add(sibling);\n              node.parent.insert(sibling, node.parent);\n            } else {\n              break;\n            }\n            sibling = sibling.next;\n          }\n          node.unwrap();\n          continue;\n        }\n        const parents = [node];\n        for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && isSplittableElement(parent); parent = parent.parent) {\n          parents.push(parent);\n        }\n        if (parent && parents.length > 1) {\n          if (schema.isValidChild(parent.name, node.name)) {\n            parents.reverse();\n            newParent = parents[0].clone();\n            onCreate(newParent);\n            let currentNode = newParent;\n            for (let i = 0; i < parents.length - 1; i++) {\n              if (schema.isValidChild(currentNode.name, parents[i].name) && i > 0) {\n                tempNode = parents[i].clone();\n                onCreate(tempNode);\n                currentNode.append(tempNode);\n              } else {\n                tempNode = currentNode;\n              }\n              for (let childNode = parents[i].firstChild; childNode && childNode !== parents[i + 1];) {\n                const nextNode = childNode.next;\n                tempNode.append(childNode);\n                childNode = nextNode;\n              }\n              currentNode = tempNode;\n            }\n            if (!isEmpty(schema, nonEmptyElements, whitespaceElements, newParent)) {\n              parent.insert(newParent, parents[0], true);\n              parent.insert(node, newParent);\n            } else {\n              parent.insert(node, parents[0], true);\n            }\n            parent = parents[0];\n            if (isEmpty(schema, nonEmptyElements, whitespaceElements, parent) || hasOnlyChild(parent, 'br')) {\n              parent.empty().remove();\n            }\n          } else {\n            removeOrUnwrapInvalidNode(node, schema);\n          }\n        } else if (node.parent) {\n          if (node.name === 'li') {\n            let sibling = node.prev;\n            if (sibling && (sibling.name === 'ul' || sibling.name === 'ol')) {\n              sibling.append(node);\n              continue;\n            }\n            sibling = node.next;\n            if (sibling && (sibling.name === 'ul' || sibling.name === 'ol') && sibling.firstChild) {\n              sibling.insert(node, sibling.firstChild, true);\n              continue;\n            }\n            const wrapper = new AstNode('ul', 1);\n            onCreate(wrapper);\n            node.wrap(wrapper);\n            continue;\n          }\n          if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {\n            const wrapper = new AstNode('div', 1);\n            onCreate(wrapper);\n            node.wrap(wrapper);\n          } else {\n            removeOrUnwrapInvalidNode(node, schema);\n          }\n        }\n      }\n    };\n    const hasClosest = (node, parentName) => {\n      let tempNode = node;\n      while (tempNode) {\n        if (tempNode.name === parentName) {\n          return true;\n        }\n        tempNode = tempNode.parent;\n      }\n      return false;\n    };\n    const isInvalid = (schema, node, parent = node.parent) => {\n      if (parent && schema.children[node.name] && !schema.isValidChild(parent.name, node.name)) {\n        return true;\n      } else if (parent && node.name === 'a' && hasClosest(parent, 'a')) {\n        return true;\n      } else {\n        return false;\n      }\n    };\n\n    const createRange = (sc, so, ec, eo) => {\n      const rng = document.createRange();\n      rng.setStart(sc, so);\n      rng.setEnd(ec, eo);\n      return rng;\n    };\n    const normalizeBlockSelectionRange = rng => {\n      const startPos = CaretPosition.fromRangeStart(rng);\n      const endPos = CaretPosition.fromRangeEnd(rng);\n      const rootNode = rng.commonAncestorContainer;\n      return fromPosition(false, rootNode, endPos).map(newEndPos => {\n        if (!isInSameBlock(startPos, endPos, rootNode) && isInSameBlock(startPos, newEndPos, rootNode)) {\n          return createRange(startPos.container(), startPos.offset(), newEndPos.container(), newEndPos.offset());\n        } else {\n          return rng;\n        }\n      }).getOr(rng);\n    };\n    const normalize = rng => rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\n\n    const hasOnlyOneChild$1 = node => {\n      return isNonNullable(node.firstChild) && node.firstChild === node.lastChild;\n    };\n    const isPaddingNode = node => {\n      return node.name === 'br' || node.value === nbsp;\n    };\n    const isPaddedEmptyBlock = (schema, node) => {\n      const blockElements = schema.getBlockElements();\n      return blockElements[node.name] && hasOnlyOneChild$1(node) && isPaddingNode(node.firstChild);\n    };\n    const isEmptyFragmentElement = (schema, node) => {\n      const nonEmptyElements = schema.getNonEmptyElements();\n      return isNonNullable(node) && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node));\n    };\n    const isListFragment = (schema, fragment) => {\n      let firstChild = fragment.firstChild;\n      let lastChild = fragment.lastChild;\n      if (firstChild && firstChild.name === 'meta') {\n        firstChild = firstChild.next;\n      }\n      if (lastChild && lastChild.attr('id') === 'mce_marker') {\n        lastChild = lastChild.prev;\n      }\n      if (isEmptyFragmentElement(schema, lastChild)) {\n        lastChild = lastChild === null || lastChild === void 0 ? void 0 : lastChild.prev;\n      }\n      if (!firstChild || firstChild !== lastChild) {\n        return false;\n      }\n      return firstChild.name === 'ul' || firstChild.name === 'ol';\n    };\n    const cleanupDomFragment = domFragment => {\n      var _a, _b;\n      const firstChild = domFragment.firstChild;\n      const lastChild = domFragment.lastChild;\n      if (firstChild && firstChild.nodeName === 'META') {\n        (_a = firstChild.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(firstChild);\n      }\n      if (lastChild && lastChild.id === 'mce_marker') {\n        (_b = lastChild.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(lastChild);\n      }\n      return domFragment;\n    };\n    const toDomFragment = (dom, serializer, fragment) => {\n      const html = serializer.serialize(fragment);\n      const domFragment = dom.createFragment(html);\n      return cleanupDomFragment(domFragment);\n    };\n    const listItems = elm => {\n      var _a;\n      return filter$5((_a = elm === null || elm === void 0 ? void 0 : elm.childNodes) !== null && _a !== void 0 ? _a : [], child => {\n        return child.nodeName === 'LI';\n      });\n    };\n    const isPadding = node => {\n      return node.data === nbsp || isBr$6(node);\n    };\n    const isListItemPadded = node => {\n      return isNonNullable(node === null || node === void 0 ? void 0 : node.firstChild) && node.firstChild === node.lastChild && isPadding(node.firstChild);\n    };\n    const isEmptyOrPadded = elm => {\n      return !elm.firstChild || isListItemPadded(elm);\n    };\n    const trimListItems = elms => {\n      return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms;\n    };\n    const getParentLi = (dom, node) => {\n      const parentBlock = dom.getParent(node, dom.isBlock);\n      return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null;\n    };\n    const isParentBlockLi = (dom, node) => {\n      return !!getParentLi(dom, node);\n    };\n    const getSplit = (parentNode, rng) => {\n      const beforeRng = rng.cloneRange();\n      const afterRng = rng.cloneRange();\n      beforeRng.setStartBefore(parentNode);\n      afterRng.setEndAfter(parentNode);\n      return [\n        beforeRng.cloneContents(),\n        afterRng.cloneContents()\n      ];\n    };\n    const findFirstIn = (node, rootNode) => {\n      const caretPos = CaretPosition.before(node);\n      const caretWalker = CaretWalker(rootNode);\n      const newCaretPos = caretWalker.next(caretPos);\n      return newCaretPos ? newCaretPos.toRange() : null;\n    };\n    const findLastOf = (node, rootNode) => {\n      const caretPos = CaretPosition.after(node);\n      const caretWalker = CaretWalker(rootNode);\n      const newCaretPos = caretWalker.prev(caretPos);\n      return newCaretPos ? newCaretPos.toRange() : null;\n    };\n    const insertMiddle = (target, elms, rootNode, rng) => {\n      const parts = getSplit(target, rng);\n      const parentElm = target.parentNode;\n      if (parentElm) {\n        parentElm.insertBefore(parts[0], target);\n        Tools.each(elms, li => {\n          parentElm.insertBefore(li, target);\n        });\n        parentElm.insertBefore(parts[1], target);\n        parentElm.removeChild(target);\n      }\n      return findLastOf(elms[elms.length - 1], rootNode);\n    };\n    const insertBefore$1 = (target, elms, rootNode) => {\n      const parentElm = target.parentNode;\n      if (parentElm) {\n        Tools.each(elms, elm => {\n          parentElm.insertBefore(elm, target);\n        });\n      }\n      return findFirstIn(target, rootNode);\n    };\n    const insertAfter$1 = (target, elms, rootNode, dom) => {\n      dom.insertAfter(elms.reverse(), target);\n      return findLastOf(elms[0], rootNode);\n    };\n    const insertAtCaret$1 = (serializer, dom, rng, fragment) => {\n      const domFragment = toDomFragment(dom, serializer, fragment);\n      const liTarget = getParentLi(dom, rng.startContainer);\n      const liElms = trimListItems(listItems(domFragment.firstChild));\n      const BEGINNING = 1, END = 2;\n      const rootNode = dom.getRoot();\n      const isAt = location => {\n        const caretPos = CaretPosition.fromRangeStart(rng);\n        const caretWalker = CaretWalker(dom.getRoot());\n        const newPos = location === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos);\n        const newPosNode = newPos === null || newPos === void 0 ? void 0 : newPos.getNode();\n        return newPosNode ? getParentLi(dom, newPosNode) !== liTarget : true;\n      };\n      if (!liTarget) {\n        return null;\n      } else if (isAt(BEGINNING)) {\n        return insertBefore$1(liTarget, liElms, rootNode);\n      } else if (isAt(END)) {\n        return insertAfter$1(liTarget, liElms, rootNode, dom);\n      } else {\n        return insertMiddle(liTarget, liElms, rootNode, rng);\n      }\n    };\n\n    const mergeableWrappedElements = ['pre'];\n    const shouldPasteContentOnly = (dom, fragment, parentNode, root) => {\n      var _a;\n      const firstNode = fragment.firstChild;\n      const lastNode = fragment.lastChild;\n      const last = lastNode.attr('data-mce-type') === 'bookmark' ? lastNode.prev : lastNode;\n      const isPastingSingleElement = firstNode === last;\n      const isWrappedElement = contains$2(mergeableWrappedElements, firstNode.name);\n      if (isPastingSingleElement && isWrappedElement) {\n        const isContentEditable = firstNode.attr('contenteditable') !== 'false';\n        const isPastingInTheSameBlockTag = ((_a = dom.getParent(parentNode, dom.isBlock)) === null || _a === void 0 ? void 0 : _a.nodeName.toLowerCase()) === firstNode.name;\n        const isPastingInContentEditable = Optional.from(getContentEditableRoot$1(root, parentNode)).forall(isContentEditableTrue$3);\n        return isContentEditable && isPastingInTheSameBlockTag && isPastingInContentEditable;\n      } else {\n        return false;\n      }\n    };\n    const isTableCell = isTableCell$3;\n    const isTableCellContentSelected = (dom, rng, cell) => {\n      if (isNonNullable(cell)) {\n        const endCell = dom.getParent(rng.endContainer, isTableCell);\n        return cell === endCell && hasAllContentsSelected(SugarElement.fromDom(cell), rng);\n      } else {\n        return false;\n      }\n    };\n    const validInsertion = (editor, value, parentNode) => {\n      var _a;\n      if (parentNode.getAttribute('data-mce-bogus') === 'all') {\n        (_a = parentNode.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(editor.dom.createFragment(value), parentNode);\n      } else {\n        const node = parentNode.firstChild;\n        const node2 = parentNode.lastChild;\n        if (!node || node === node2 && node.nodeName === 'BR') {\n          editor.dom.setHTML(parentNode, value);\n        } else {\n          editor.selection.setContent(value, { no_events: true });\n        }\n      }\n    };\n    const trimBrsFromTableCell = (dom, elm) => {\n      Optional.from(dom.getParent(elm, 'td,th')).map(SugarElement.fromDom).each(trimBlockTrailingBr);\n    };\n    const reduceInlineTextElements = (editor, merge) => {\n      const textInlineElements = editor.schema.getTextInlineElements();\n      const dom = editor.dom;\n      if (merge) {\n        const root = editor.getBody();\n        const elementUtils = ElementUtils(editor);\n        Tools.each(dom.select('*[data-mce-fragment]'), node => {\n          const isInline = isNonNullable(textInlineElements[node.nodeName.toLowerCase()]);\n          if (isInline && hasInheritableStyles(dom, node)) {\n            for (let parentNode = node.parentElement; isNonNullable(parentNode) && parentNode !== root; parentNode = parentNode.parentElement) {\n              const styleConflict = hasStyleConflict(dom, node, parentNode);\n              if (styleConflict) {\n                break;\n              }\n              if (elementUtils.compare(parentNode, node)) {\n                dom.remove(node, true);\n                break;\n              }\n            }\n          }\n        });\n      }\n    };\n    const markFragmentElements = fragment => {\n      let node = fragment;\n      while (node = node.walk()) {\n        if (node.type === 1) {\n          node.attr('data-mce-fragment', '1');\n        }\n      }\n    };\n    const unmarkFragmentElements = elm => {\n      Tools.each(elm.getElementsByTagName('*'), elm => {\n        elm.removeAttribute('data-mce-fragment');\n      });\n    };\n    const isPartOfFragment = node => {\n      return !!node.getAttribute('data-mce-fragment');\n    };\n    const canHaveChildren = (editor, node) => {\n      return isNonNullable(node) && !editor.schema.getVoidElements()[node.nodeName];\n    };\n    const moveSelectionToMarker = (editor, marker) => {\n      var _a, _b, _c;\n      let nextRng;\n      const dom = editor.dom;\n      const selection = editor.selection;\n      if (!marker) {\n        return;\n      }\n      selection.scrollIntoView(marker);\n      const parentEditableElm = getContentEditableRoot$1(editor.getBody(), marker);\n      if (parentEditableElm && dom.getContentEditable(parentEditableElm) === 'false') {\n        dom.remove(marker);\n        selection.select(parentEditableElm);\n        return;\n      }\n      let rng = dom.createRng();\n      const node = marker.previousSibling;\n      if (isText$a(node)) {\n        rng.setStart(node, (_b = (_a = node.nodeValue) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0);\n        const node2 = marker.nextSibling;\n        if (isText$a(node2)) {\n          node.appendData(node2.data);\n          (_c = node2.parentNode) === null || _c === void 0 ? void 0 : _c.removeChild(node2);\n        }\n      } else {\n        rng.setStartBefore(marker);\n        rng.setEndBefore(marker);\n      }\n      const findNextCaretRng = rng => {\n        let caretPos = CaretPosition.fromRangeStart(rng);\n        const caretWalker = CaretWalker(editor.getBody());\n        caretPos = caretWalker.next(caretPos);\n        return caretPos === null || caretPos === void 0 ? void 0 : caretPos.toRange();\n      };\n      const parentBlock = dom.getParent(marker, dom.isBlock);\n      dom.remove(marker);\n      if (parentBlock && dom.isEmpty(parentBlock)) {\n        empty(SugarElement.fromDom(parentBlock));\n        rng.setStart(parentBlock, 0);\n        rng.setEnd(parentBlock, 0);\n        if (!isTableCell(parentBlock) && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) {\n          rng = nextRng;\n          dom.remove(parentBlock);\n        } else {\n          dom.add(parentBlock, dom.create('br', { 'data-mce-bogus': '1' }));\n        }\n      }\n      selection.setRng(rng);\n    };\n    const deleteSelectedContent = editor => {\n      const dom = editor.dom;\n      const rng = normalize(editor.selection.getRng());\n      editor.selection.setRng(rng);\n      const startCell = dom.getParent(rng.startContainer, isTableCell);\n      if (isTableCellContentSelected(dom, rng, startCell)) {\n        deleteCellContents(editor, rng, SugarElement.fromDom(startCell));\n      } else if (rng.startContainer === rng.endContainer && rng.endOffset - rng.startOffset === 1 && isText$a(rng.startContainer.childNodes[rng.startOffset])) {\n        rng.deleteContents();\n      } else {\n        editor.getDoc().execCommand('Delete', false);\n      }\n    };\n    const findMarkerNode = scope => {\n      for (let markerNode = scope; markerNode; markerNode = markerNode.walk()) {\n        if (markerNode.attr('id') === 'mce_marker') {\n          return Optional.some(markerNode);\n        }\n      }\n      return Optional.none();\n    };\n    const preventSplittingSummary = editor => {\n      each$e(from(editor.getBody().querySelectorAll('details')), accordion => {\n        const summaries = filter$5(from(accordion.children), node => node.nodeName === 'SUMMARY');\n        if (summaries.length > 1) {\n          each$e(summaries.slice(1), summary => {\n            const element = SugarElement.fromDom(summary);\n            remove$7(element, 'mce-accordion-summary');\n            mutate(element, 'p');\n          });\n        }\n      });\n    };\n    const insertHtmlAtCaret = (editor, value, details) => {\n      var _a, _b;\n      const selection = editor.selection;\n      const dom = editor.dom;\n      const parser = editor.parser;\n      const merge = details.merge;\n      const serializer = HtmlSerializer({ validate: true }, editor.schema);\n      const bookmarkHtml = '<span id=\"mce_marker\" data-mce-type=\"bookmark\">&#xFEFF;</span>';\n      if (value.indexOf('{$caret}') === -1) {\n        value += '{$caret}';\n      }\n      value = value.replace(/\\{\\$caret\\}/, bookmarkHtml);\n      let rng = selection.getRng();\n      const caretElement = rng.startContainer;\n      const body = editor.getBody();\n      if (caretElement === body && selection.isCollapsed()) {\n        if (dom.isBlock(body.firstChild) && canHaveChildren(editor, body.firstChild) && dom.isEmpty(body.firstChild)) {\n          rng = dom.createRng();\n          rng.setStart(body.firstChild, 0);\n          rng.setEnd(body.firstChild, 0);\n          selection.setRng(rng);\n        }\n      }\n      if (!selection.isCollapsed()) {\n        deleteSelectedContent(editor);\n      }\n      const parentNode = selection.getNode();\n      const parserArgs = {\n        context: parentNode.nodeName.toLowerCase(),\n        data: details.data,\n        insert: true\n      };\n      const fragment = parser.parse(value, parserArgs);\n      if (details.paste === true && isListFragment(editor.schema, fragment) && isParentBlockLi(dom, parentNode)) {\n        rng = insertAtCaret$1(serializer, dom, selection.getRng(), fragment);\n        if (rng) {\n          selection.setRng(rng);\n        }\n        return value;\n      }\n      if (details.paste === true && shouldPasteContentOnly(dom, fragment, parentNode, editor.getBody())) {\n        (_a = fragment.firstChild) === null || _a === void 0 ? void 0 : _a.unwrap();\n      }\n      markFragmentElements(fragment);\n      let node = fragment.lastChild;\n      if (node && node.attr('id') === 'mce_marker') {\n        const marker = node;\n        for (node = node.prev; node; node = node.walk(true)) {\n          if (node.type === 3 || !dom.isBlock(node.name)) {\n            if (node.parent && editor.schema.isValidChild(node.parent.name, 'span')) {\n              node.parent.insert(marker, node, node.name === 'br');\n            }\n            break;\n          }\n        }\n      }\n      editor._selectionOverrides.showBlockCaretContainer(parentNode);\n      if (!parserArgs.invalid) {\n        value = serializer.serialize(fragment);\n        validInsertion(editor, value, parentNode);\n      } else {\n        editor.selection.setContent(bookmarkHtml);\n        let parentNode = selection.getNode();\n        let tempNode;\n        const rootNode = editor.getBody();\n        if (isDocument$1(parentNode)) {\n          parentNode = tempNode = rootNode;\n        } else {\n          tempNode = parentNode;\n        }\n        while (tempNode && tempNode !== rootNode) {\n          parentNode = tempNode;\n          tempNode = tempNode.parentNode;\n        }\n        value = parentNode === rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);\n        const root = parser.parse(value);\n        const markerNode = findMarkerNode(root);\n        const editingHost = markerNode.bind(findClosestEditingHost).getOr(root);\n        markerNode.each(marker => marker.replace(fragment));\n        const toExtract = fragment.children();\n        const parent = (_b = fragment.parent) !== null && _b !== void 0 ? _b : root;\n        fragment.unwrap();\n        const invalidChildren = filter$5(toExtract, node => isInvalid(editor.schema, node, parent));\n        cleanInvalidNodes(invalidChildren, editor.schema, editingHost);\n        filter$2(parser.getNodeFilters(), parser.getAttributeFilters(), root);\n        value = serializer.serialize(root);\n        if (parentNode === rootNode) {\n          dom.setHTML(rootNode, value);\n        } else {\n          dom.setOuterHTML(parentNode, value);\n        }\n      }\n      reduceInlineTextElements(editor, merge);\n      moveSelectionToMarker(editor, dom.get('mce_marker'));\n      unmarkFragmentElements(editor.getBody());\n      trimBrsFromTableCell(dom, selection.getStart());\n      preventSplittingSummary(editor);\n      updateCaret(editor.schema, editor.getBody(), selection.getStart());\n      return value;\n    };\n\n    const isTreeNode = content => content instanceof AstNode;\n\n    const moveSelection = editor => {\n      if (hasFocus(editor)) {\n        firstPositionIn(editor.getBody()).each(pos => {\n          const node = pos.getNode();\n          const caretPos = isTable$2(node) ? firstPositionIn(node).getOr(pos) : pos;\n          editor.selection.setRng(caretPos.toRange());\n        });\n      }\n    };\n    const setEditorHtml = (editor, html, noSelection) => {\n      editor.dom.setHTML(editor.getBody(), html);\n      if (noSelection !== true) {\n        moveSelection(editor);\n      }\n    };\n    const setContentString = (editor, body, content, args) => {\n      if (content.length === 0 || /^\\s+$/.test(content)) {\n        const padd = '<br data-mce-bogus=\"1\">';\n        if (body.nodeName === 'TABLE') {\n          content = '<tr><td>' + padd + '</td></tr>';\n        } else if (/^(UL|OL)$/.test(body.nodeName)) {\n          content = '<li>' + padd + '</li>';\n        }\n        const forcedRootBlockName = getForcedRootBlock(editor);\n        if (editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {\n          content = padd;\n          content = editor.dom.createHTML(forcedRootBlockName, getForcedRootBlockAttrs(editor), content);\n        } else if (!content) {\n          content = padd;\n        }\n        setEditorHtml(editor, content, args.no_selection);\n        return {\n          content,\n          html: content\n        };\n      } else {\n        if (args.format !== 'raw') {\n          content = HtmlSerializer({ validate: false }, editor.schema).serialize(editor.parser.parse(content, {\n            isRootContent: true,\n            insert: true\n          }));\n        }\n        const trimmedHtml = isWsPreserveElement(SugarElement.fromDom(body)) ? content : Tools.trim(content);\n        setEditorHtml(editor, trimmedHtml, args.no_selection);\n        return {\n          content: trimmedHtml,\n          html: trimmedHtml\n        };\n      }\n    };\n    const setContentTree = (editor, body, content, args) => {\n      filter$2(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content);\n      const html = HtmlSerializer({ validate: false }, editor.schema).serialize(content);\n      const trimmedHtml = isWsPreserveElement(SugarElement.fromDom(body)) ? html : Tools.trim(html);\n      setEditorHtml(editor, trimmedHtml, args.no_selection);\n      return {\n        content,\n        html: trimmedHtml\n      };\n    };\n    const setContentInternal = (editor, content, args) => {\n      return Optional.from(editor.getBody()).map(body => {\n        if (isTreeNode(content)) {\n          return setContentTree(editor, body, content, args);\n        } else {\n          return setContentString(editor, body, content, args);\n        }\n      }).getOr({\n        content,\n        html: isTreeNode(args.content) ? '' : args.content\n      });\n    };\n\n    const ancestor$1 = (scope, predicate, isRoot) => ancestor$4(scope, predicate, isRoot).isSome();\n    const sibling = (scope, predicate) => sibling$1(scope, predicate).isSome();\n\n    const ensureIsRoot = isRoot => isFunction(isRoot) ? isRoot : never;\n    const ancestor = (scope, transform, isRoot) => {\n      let element = scope.dom;\n      const stop = ensureIsRoot(isRoot);\n      while (element.parentNode) {\n        element = element.parentNode;\n        const el = SugarElement.fromDom(element);\n        const transformed = transform(el);\n        if (transformed.isSome()) {\n          return transformed;\n        } else if (stop(el)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const closest$1 = (scope, transform, isRoot) => {\n      const current = transform(scope);\n      const stop = ensureIsRoot(isRoot);\n      return current.orThunk(() => stop(scope) ? Optional.none() : ancestor(scope, transform, stop));\n    };\n\n    const isEq$3 = isEq$5;\n    const matchesUnInheritedFormatSelector = (ed, node, name) => {\n      const formatList = ed.formatter.get(name);\n      if (formatList) {\n        for (let i = 0; i < formatList.length; i++) {\n          const format = formatList[i];\n          if (isSelectorFormat(format) && format.inherit === false && ed.dom.is(node, format.selector)) {\n            return true;\n          }\n        }\n      }\n      return false;\n    };\n    const matchParents = (editor, node, name, vars, similar) => {\n      const root = editor.dom.getRoot();\n      if (node === root) {\n        return false;\n      }\n      const matchedNode = editor.dom.getParent(node, elm => {\n        if (matchesUnInheritedFormatSelector(editor, elm, name)) {\n          return true;\n        }\n        return elm.parentNode === root || !!matchNode(editor, elm, name, vars, true);\n      });\n      return !!matchNode(editor, matchedNode, name, vars, similar);\n    };\n    const matchName = (dom, node, format) => {\n      if (isInlineFormat(format) && isEq$3(node, format.inline)) {\n        return true;\n      }\n      if (isBlockFormat(format) && isEq$3(node, format.block)) {\n        return true;\n      }\n      if (isSelectorFormat(format)) {\n        return isElement$6(node) && dom.is(node, format.selector);\n      }\n      return false;\n    };\n    const matchItems = (dom, node, format, itemName, similar, vars) => {\n      const items = format[itemName];\n      const matchAttributes = itemName === 'attributes';\n      if (isFunction(format.onmatch)) {\n        return format.onmatch(node, format, itemName);\n      }\n      if (items) {\n        if (!isArrayLike(items)) {\n          for (const key in items) {\n            if (has$2(items, key)) {\n              const value = matchAttributes ? dom.getAttrib(node, key) : getStyle(dom, node, key);\n              const expectedValue = replaceVars(items[key], vars);\n              const isEmptyValue = isNullable(value) || isEmpty$3(value);\n              if (isEmptyValue && isNullable(expectedValue)) {\n                continue;\n              }\n              if (similar && isEmptyValue && !format.exact) {\n                return false;\n              }\n              if ((!similar || format.exact) && !isEq$3(value, normalizeStyleValue(expectedValue, key))) {\n                return false;\n              }\n            }\n          }\n        } else {\n          for (let i = 0; i < items.length; i++) {\n            if (matchAttributes ? dom.getAttrib(node, items[i]) : getStyle(dom, node, items[i])) {\n              return true;\n            }\n          }\n        }\n      }\n      return true;\n    };\n    const matchNode = (ed, node, name, vars, similar) => {\n      const formatList = ed.formatter.get(name);\n      const dom = ed.dom;\n      if (formatList && isElement$6(node)) {\n        for (let i = 0; i < formatList.length; i++) {\n          const format = formatList[i];\n          if (matchName(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) {\n            const classes = format.classes;\n            if (classes) {\n              for (let x = 0; x < classes.length; x++) {\n                if (!ed.dom.hasClass(node, replaceVars(classes[x], vars))) {\n                  return;\n                }\n              }\n            }\n            return format;\n          }\n        }\n      }\n      return undefined;\n    };\n    const match$2 = (editor, name, vars, node, similar) => {\n      if (node) {\n        return matchParents(editor, node, name, vars, similar);\n      }\n      node = editor.selection.getNode();\n      if (matchParents(editor, node, name, vars, similar)) {\n        return true;\n      }\n      const startNode = editor.selection.getStart();\n      if (startNode !== node) {\n        if (matchParents(editor, startNode, name, vars, similar)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const matchAll = (editor, names, vars) => {\n      const matchedFormatNames = [];\n      const checkedMap = {};\n      const startElement = editor.selection.getStart();\n      editor.dom.getParent(startElement, node => {\n        for (let i = 0; i < names.length; i++) {\n          const name = names[i];\n          if (!checkedMap[name] && matchNode(editor, node, name, vars)) {\n            checkedMap[name] = true;\n            matchedFormatNames.push(name);\n          }\n        }\n      }, editor.dom.getRoot());\n      return matchedFormatNames;\n    };\n    const closest = (editor, names) => {\n      const isRoot = elm => eq(elm, SugarElement.fromDom(editor.getBody()));\n      const match = (elm, name) => matchNode(editor, elm.dom, name) ? Optional.some(name) : Optional.none();\n      return Optional.from(editor.selection.getStart(true)).bind(rawElm => closest$1(SugarElement.fromDom(rawElm), elm => findMap(names, name => match(elm, name)), isRoot)).getOrNull();\n    };\n    const canApply = (editor, name) => {\n      const formatList = editor.formatter.get(name);\n      const dom = editor.dom;\n      if (formatList && editor.selection.isEditable()) {\n        const startNode = editor.selection.getStart();\n        const parents = getParents$2(dom, startNode);\n        for (let x = formatList.length - 1; x >= 0; x--) {\n          const format = formatList[x];\n          if (!isSelectorFormat(format)) {\n            return true;\n          }\n          for (let i = parents.length - 1; i >= 0; i--) {\n            if (dom.is(parents[i], format.selector)) {\n              return true;\n            }\n          }\n        }\n      }\n      return false;\n    };\n    const matchAllOnNode = (editor, node, formatNames) => foldl(formatNames, (acc, name) => {\n      const matchSimilar = isVariableFormatName(editor, name);\n      if (editor.formatter.matchNode(node, name, {}, matchSimilar)) {\n        return acc.concat([name]);\n      } else {\n        return acc;\n      }\n    }, []);\n\n    const ZWSP = ZWSP$1;\n    const importNode = (ownerDocument, node) => {\n      return ownerDocument.importNode(node, true);\n    };\n    const getEmptyCaretContainers = node => {\n      const nodes = [];\n      let tempNode = node;\n      while (tempNode) {\n        if (isText$a(tempNode) && tempNode.data !== ZWSP || tempNode.childNodes.length > 1) {\n          return [];\n        }\n        if (isElement$6(tempNode)) {\n          nodes.push(tempNode);\n        }\n        tempNode = tempNode.firstChild;\n      }\n      return nodes;\n    };\n    const isCaretContainerEmpty = node => {\n      return getEmptyCaretContainers(node).length > 0;\n    };\n    const findFirstTextNode = node => {\n      if (node) {\n        const walker = new DomTreeWalker(node, node);\n        for (let tempNode = walker.current(); tempNode; tempNode = walker.next()) {\n          if (isText$a(tempNode)) {\n            return tempNode;\n          }\n        }\n      }\n      return null;\n    };\n    const createCaretContainer = fill => {\n      const caretContainer = SugarElement.fromTag('span');\n      setAll$1(caretContainer, {\n        'id': CARET_ID,\n        'data-mce-bogus': '1',\n        'data-mce-type': 'format-caret'\n      });\n      if (fill) {\n        append$1(caretContainer, SugarElement.fromText(ZWSP));\n      }\n      return caretContainer;\n    };\n    const trimZwspFromCaretContainer = caretContainerNode => {\n      const textNode = findFirstTextNode(caretContainerNode);\n      if (textNode && textNode.data.charAt(0) === ZWSP) {\n        textNode.deleteData(0, 1);\n      }\n      return textNode;\n    };\n    const removeCaretContainerNode = (editor, node, moveCaret = true) => {\n      const dom = editor.dom, selection = editor.selection;\n      if (isCaretContainerEmpty(node)) {\n        deleteElement$2(editor, false, SugarElement.fromDom(node), moveCaret);\n      } else {\n        const rng = selection.getRng();\n        const block = dom.getParent(node, dom.isBlock);\n        const startContainer = rng.startContainer;\n        const startOffset = rng.startOffset;\n        const endContainer = rng.endContainer;\n        const endOffset = rng.endOffset;\n        const textNode = trimZwspFromCaretContainer(node);\n        dom.remove(node, true);\n        if (startContainer === textNode && startOffset > 0) {\n          rng.setStart(textNode, startOffset - 1);\n        }\n        if (endContainer === textNode && endOffset > 0) {\n          rng.setEnd(textNode, endOffset - 1);\n        }\n        if (block && dom.isEmpty(block)) {\n          fillWithPaddingBr(SugarElement.fromDom(block));\n        }\n        selection.setRng(rng);\n      }\n    };\n    const removeCaretContainer = (editor, node, moveCaret = true) => {\n      const dom = editor.dom, selection = editor.selection;\n      if (!node) {\n        node = getParentCaretContainer(editor.getBody(), selection.getStart());\n        if (!node) {\n          while (node = dom.get(CARET_ID)) {\n            removeCaretContainerNode(editor, node, moveCaret);\n          }\n        }\n      } else {\n        removeCaretContainerNode(editor, node, moveCaret);\n      }\n    };\n    const insertCaretContainerNode = (editor, caretContainer, formatNode) => {\n      var _a, _b;\n      const dom = editor.dom;\n      const block = dom.getParent(formatNode, curry(isTextBlock$1, editor.schema));\n      if (block && dom.isEmpty(block)) {\n        (_a = formatNode.parentNode) === null || _a === void 0 ? void 0 : _a.replaceChild(caretContainer, formatNode);\n      } else {\n        removeTrailingBr(SugarElement.fromDom(formatNode));\n        if (dom.isEmpty(formatNode)) {\n          (_b = formatNode.parentNode) === null || _b === void 0 ? void 0 : _b.replaceChild(caretContainer, formatNode);\n        } else {\n          dom.insertAfter(caretContainer, formatNode);\n        }\n      }\n    };\n    const appendNode = (parentNode, node) => {\n      parentNode.appendChild(node);\n      return node;\n    };\n    const insertFormatNodesIntoCaretContainer = (formatNodes, caretContainer) => {\n      var _a;\n      const innerMostFormatNode = foldr(formatNodes, (parentNode, formatNode) => {\n        return appendNode(parentNode, formatNode.cloneNode(false));\n      }, caretContainer);\n      const doc = (_a = innerMostFormatNode.ownerDocument) !== null && _a !== void 0 ? _a : document;\n      return appendNode(innerMostFormatNode, doc.createTextNode(ZWSP));\n    };\n    const cleanFormatNode = (editor, caretContainer, formatNode, name, vars, similar) => {\n      const formatter = editor.formatter;\n      const dom = editor.dom;\n      const validFormats = filter$5(keys(formatter.get()), formatName => formatName !== name && !contains$1(formatName, 'removeformat'));\n      const matchedFormats = matchAllOnNode(editor, formatNode, validFormats);\n      const uniqueFormats = filter$5(matchedFormats, fmtName => !areSimilarFormats(editor, fmtName, name));\n      if (uniqueFormats.length > 0) {\n        const clonedFormatNode = formatNode.cloneNode(false);\n        dom.add(caretContainer, clonedFormatNode);\n        formatter.remove(name, vars, clonedFormatNode, similar);\n        dom.remove(clonedFormatNode);\n        return Optional.some(clonedFormatNode);\n      } else {\n        return Optional.none();\n      }\n    };\n    const applyCaretFormat = (editor, name, vars) => {\n      let caretContainer;\n      const selection = editor.selection;\n      const formatList = editor.formatter.get(name);\n      if (!formatList) {\n        return;\n      }\n      const selectionRng = selection.getRng();\n      let offset = selectionRng.startOffset;\n      const container = selectionRng.startContainer;\n      const text = container.nodeValue;\n      caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart());\n      const wordcharRegex = /[^\\s\\u00a0\\u00ad\\u200b\\ufeff]/;\n      if (text && offset > 0 && offset < text.length && wordcharRegex.test(text.charAt(offset)) && wordcharRegex.test(text.charAt(offset - 1))) {\n        const bookmark = selection.getBookmark();\n        selectionRng.collapse(true);\n        let rng = expandRng(editor.dom, selectionRng, formatList);\n        rng = split(rng);\n        editor.formatter.apply(name, vars, rng);\n        selection.moveToBookmark(bookmark);\n      } else {\n        let textNode = caretContainer ? findFirstTextNode(caretContainer) : null;\n        if (!caretContainer || (textNode === null || textNode === void 0 ? void 0 : textNode.data) !== ZWSP) {\n          caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom);\n          textNode = caretContainer.firstChild;\n          selectionRng.insertNode(caretContainer);\n          offset = 1;\n          editor.formatter.apply(name, vars, caretContainer);\n        } else {\n          editor.formatter.apply(name, vars, caretContainer);\n        }\n        selection.setCursorLocation(textNode, offset);\n      }\n    };\n    const removeCaretFormat = (editor, name, vars, similar) => {\n      const dom = editor.dom;\n      const selection = editor.selection;\n      let hasContentAfter = false;\n      const formatList = editor.formatter.get(name);\n      if (!formatList) {\n        return;\n      }\n      const rng = selection.getRng();\n      const container = rng.startContainer;\n      const offset = rng.startOffset;\n      let node = container;\n      if (isText$a(container)) {\n        if (offset !== container.data.length) {\n          hasContentAfter = true;\n        }\n        node = node.parentNode;\n      }\n      const parents = [];\n      let formatNode;\n      while (node) {\n        if (matchNode(editor, node, name, vars, similar)) {\n          formatNode = node;\n          break;\n        }\n        if (node.nextSibling) {\n          hasContentAfter = true;\n        }\n        parents.push(node);\n        node = node.parentNode;\n      }\n      if (!formatNode) {\n        return;\n      }\n      if (hasContentAfter) {\n        const bookmark = selection.getBookmark();\n        rng.collapse(true);\n        let expandedRng = expandRng(dom, rng, formatList, true);\n        expandedRng = split(expandedRng);\n        editor.formatter.remove(name, vars, expandedRng, similar);\n        selection.moveToBookmark(bookmark);\n      } else {\n        const caretContainer = getParentCaretContainer(editor.getBody(), formatNode);\n        const newCaretContainer = createCaretContainer(false).dom;\n        insertCaretContainerNode(editor, newCaretContainer, caretContainer !== null && caretContainer !== void 0 ? caretContainer : formatNode);\n        const cleanedFormatNode = cleanFormatNode(editor, newCaretContainer, formatNode, name, vars, similar);\n        const caretTextNode = insertFormatNodesIntoCaretContainer(parents.concat(cleanedFormatNode.toArray()), newCaretContainer);\n        if (caretContainer) {\n          removeCaretContainerNode(editor, caretContainer, false);\n        }\n        selection.setCursorLocation(caretTextNode, 1);\n        if (dom.isEmpty(formatNode)) {\n          dom.remove(formatNode);\n        }\n      }\n    };\n    const disableCaretContainer = (editor, keyCode, moveCaret) => {\n      const selection = editor.selection, body = editor.getBody();\n      removeCaretContainer(editor, null, moveCaret);\n      if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP) {\n        removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n      }\n      if (keyCode === 37 || keyCode === 39) {\n        removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n      }\n    };\n    const endsWithNbsp = element => isText$a(element) && endsWith(element.data, nbsp);\n    const setup$u = editor => {\n      editor.on('mouseup keydown', e => {\n        disableCaretContainer(editor, e.keyCode, endsWithNbsp(editor.selection.getRng().endContainer));\n      });\n    };\n    const createCaretFormat = formatNodes => {\n      const caretContainer = createCaretContainer(false);\n      const innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom);\n      return {\n        caretContainer,\n        caretPosition: CaretPosition(innerMost, 0)\n      };\n    };\n    const replaceWithCaretFormat = (targetNode, formatNodes) => {\n      const {caretContainer, caretPosition} = createCaretFormat(formatNodes);\n      before$3(SugarElement.fromDom(targetNode), caretContainer);\n      remove$5(SugarElement.fromDom(targetNode));\n      return caretPosition;\n    };\n    const createCaretFormatAtStart$1 = (rng, formatNodes) => {\n      const {caretContainer, caretPosition} = createCaretFormat(formatNodes);\n      rng.insertNode(caretContainer.dom);\n      return caretPosition;\n    };\n    const isFormatElement = (editor, element) => {\n      const inlineElements = editor.schema.getTextInlineElements();\n      return has$2(inlineElements, name(element)) && !isCaretNode(element.dom) && !isBogus$2(element.dom);\n    };\n    const isEmptyCaretFormatElement = element => {\n      return isCaretNode(element.dom) && isCaretContainerEmpty(element.dom);\n    };\n\n    const postProcessHooks = {};\n    const isPre = matchNodeNames(['pre']);\n    const addPostProcessHook = (name, hook) => {\n      const hooks = postProcessHooks[name];\n      if (!hooks) {\n        postProcessHooks[name] = [];\n      }\n      postProcessHooks[name].push(hook);\n    };\n    const postProcess$1 = (name, editor) => {\n      if (has$2(postProcessHooks, name)) {\n        each$e(postProcessHooks[name], hook => {\n          hook(editor);\n        });\n      }\n    };\n    addPostProcessHook('pre', editor => {\n      const rng = editor.selection.getRng();\n      const hasPreSibling = blocks => pre => {\n        const prev = pre.previousSibling;\n        return isPre(prev) && contains$2(blocks, prev);\n      };\n      const joinPre = (pre1, pre2) => {\n        const sPre2 = SugarElement.fromDom(pre2);\n        const doc = documentOrOwner(sPre2).dom;\n        remove$5(sPre2);\n        append(SugarElement.fromDom(pre1), [\n          SugarElement.fromTag('br', doc),\n          SugarElement.fromTag('br', doc),\n          ...children$1(sPre2)\n        ]);\n      };\n      if (!rng.collapsed) {\n        const blocks = editor.selection.getSelectedBlocks();\n        const preBlocks = filter$5(filter$5(blocks, isPre), hasPreSibling(blocks));\n        each$e(preBlocks, pre => {\n          joinPre(pre.previousSibling, pre);\n        });\n      }\n    });\n\n    const listItemStyles = [\n      'fontWeight',\n      'fontStyle',\n      'color',\n      'fontSize',\n      'fontFamily'\n    ];\n    const hasListStyles = fmt => isObject(fmt.styles) && exists(keys(fmt.styles), name => contains$2(listItemStyles, name));\n    const findExpandedListItemFormat = formats => find$2(formats, fmt => isInlineFormat(fmt) && fmt.inline === 'span' && hasListStyles(fmt));\n    const getExpandedListItemFormat = (formatter, format) => {\n      const formatList = formatter.get(format);\n      return isArray$1(formatList) ? findExpandedListItemFormat(formatList) : Optional.none();\n    };\n    const isRngStartAtStartOfElement = (rng, elm) => prevPosition(elm, CaretPosition.fromRangeStart(rng)).isNone();\n    const isRngEndAtEndOfElement = (rng, elm) => {\n      return nextPosition(elm, CaretPosition.fromRangeEnd(rng)).exists(pos => !isBr$6(pos.getNode()) || nextPosition(elm, pos).isSome()) === false;\n    };\n    const isEditableListItem = dom => elm => isListItem$2(elm) && dom.isEditable(elm);\n    const getFullySelectedBlocks = selection => {\n      const blocks = selection.getSelectedBlocks();\n      const rng = selection.getRng();\n      if (selection.isCollapsed()) {\n        return [];\n      }\n      if (blocks.length === 1) {\n        return isRngStartAtStartOfElement(rng, blocks[0]) && isRngEndAtEndOfElement(rng, blocks[0]) ? blocks : [];\n      } else {\n        const first = head(blocks).filter(elm => isRngStartAtStartOfElement(rng, elm)).toArray();\n        const last = last$3(blocks).filter(elm => isRngEndAtEndOfElement(rng, elm)).toArray();\n        const middle = blocks.slice(1, -1);\n        return first.concat(middle).concat(last);\n      }\n    };\n    const getFullySelectedListItems = selection => filter$5(getFullySelectedBlocks(selection), isEditableListItem(selection.dom));\n    const getPartiallySelectedListItems = selection => filter$5(selection.getSelectedBlocks(), isEditableListItem(selection.dom));\n\n    const each$8 = Tools.each;\n    const isElementNode = node => isElement$6(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$2(node);\n    const findElementSibling = (node, siblingName) => {\n      for (let sibling = node; sibling; sibling = sibling[siblingName]) {\n        if (isText$a(sibling) && isNotEmpty(sibling.data)) {\n          return node;\n        }\n        if (isElement$6(sibling) && !isBookmarkNode$1(sibling)) {\n          return sibling;\n        }\n      }\n      return node;\n    };\n    const mergeSiblingsNodes = (editor, prev, next) => {\n      const elementUtils = ElementUtils(editor);\n      const isPrevEditable = isElement$6(prev) && isEditable$2(prev);\n      const isNextEditable = isElement$6(next) && isEditable$2(next);\n      if (isPrevEditable && isNextEditable) {\n        const prevSibling = findElementSibling(prev, 'previousSibling');\n        const nextSibling = findElementSibling(next, 'nextSibling');\n        if (elementUtils.compare(prevSibling, nextSibling)) {\n          for (let sibling = prevSibling.nextSibling; sibling && sibling !== nextSibling;) {\n            const tmpSibling = sibling;\n            sibling = sibling.nextSibling;\n            prevSibling.appendChild(tmpSibling);\n          }\n          editor.dom.remove(nextSibling);\n          Tools.each(Tools.grep(nextSibling.childNodes), node => {\n            prevSibling.appendChild(node);\n          });\n          return prevSibling;\n        }\n      }\n      return next;\n    };\n    const mergeSiblings = (editor, format, vars, node) => {\n      var _a;\n      if (node && format.merge_siblings !== false) {\n        const newNode = (_a = mergeSiblingsNodes(editor, getNonWhiteSpaceSibling(node), node)) !== null && _a !== void 0 ? _a : node;\n        mergeSiblingsNodes(editor, newNode, getNonWhiteSpaceSibling(newNode, true));\n      }\n    };\n    const clearChildStyles = (dom, format, node) => {\n      if (format.clear_child_styles) {\n        const selector = format.links ? '*:not(a)' : '*';\n        each$8(dom.select(selector, node), childNode => {\n          if (isElementNode(childNode) && isEditable$2(childNode)) {\n            each$8(format.styles, (_value, name) => {\n              dom.setStyle(childNode, name, '');\n            });\n          }\n        });\n      }\n    };\n    const processChildElements = (node, filter, process) => {\n      each$8(node.childNodes, node => {\n        if (isElementNode(node)) {\n          if (filter(node)) {\n            process(node);\n          }\n          if (node.hasChildNodes()) {\n            processChildElements(node, filter, process);\n          }\n        }\n      });\n    };\n    const unwrapEmptySpan = (dom, node) => {\n      if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {\n        dom.remove(node, true);\n      }\n    };\n    const hasStyle = (dom, name) => node => !!(node && getStyle(dom, node, name));\n    const applyStyle = (dom, name, value) => node => {\n      dom.setStyle(node, name, value);\n      if (node.getAttribute('style') === '') {\n        node.removeAttribute('style');\n      }\n      unwrapEmptySpan(dom, node);\n    };\n\n    const removeResult = Adt.generate([\n      { keep: [] },\n      { rename: ['name'] },\n      { removed: [] }\n    ]);\n    const MCE_ATTR_RE = /^(src|href|style)$/;\n    const each$7 = Tools.each;\n    const isEq$2 = isEq$5;\n    const isTableCellOrRow = node => /^(TR|TH|TD)$/.test(node.nodeName);\n    const isChildOfInlineParent = (dom, node, parent) => dom.isChildOf(node, parent) && node !== parent && !dom.isBlock(parent);\n    const getContainer = (ed, rng, start) => {\n      let container = rng[start ? 'startContainer' : 'endContainer'];\n      let offset = rng[start ? 'startOffset' : 'endOffset'];\n      if (isElement$6(container)) {\n        const lastIdx = container.childNodes.length - 1;\n        if (!start && offset) {\n          offset--;\n        }\n        container = container.childNodes[offset > lastIdx ? lastIdx : offset];\n      }\n      if (isText$a(container) && start && offset >= container.data.length) {\n        container = new DomTreeWalker(container, ed.getBody()).next() || container;\n      }\n      if (isText$a(container) && !start && offset === 0) {\n        container = new DomTreeWalker(container, ed.getBody()).prev() || container;\n      }\n      return container;\n    };\n    const normalizeTableSelection = (node, start) => {\n      const prop = start ? 'firstChild' : 'lastChild';\n      const childNode = node[prop];\n      if (isTableCellOrRow(node) && childNode) {\n        if (node.nodeName === 'TR') {\n          return childNode[prop] || childNode;\n        } else {\n          return childNode;\n        }\n      }\n      return node;\n    };\n    const wrap$1 = (dom, node, name, attrs) => {\n      var _a;\n      const wrapper = dom.create(name, attrs);\n      (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(wrapper, node);\n      wrapper.appendChild(node);\n      return wrapper;\n    };\n    const wrapWithSiblings = (dom, node, next, name, attrs) => {\n      const start = SugarElement.fromDom(node);\n      const wrapper = SugarElement.fromDom(dom.create(name, attrs));\n      const siblings = next ? nextSiblings(start) : prevSiblings(start);\n      append(wrapper, siblings);\n      if (next) {\n        before$3(start, wrapper);\n        prepend(wrapper, start);\n      } else {\n        after$4(start, wrapper);\n        append$1(wrapper, start);\n      }\n      return wrapper.dom;\n    };\n    const isColorFormatAndAnchor = (node, format) => format.links && node.nodeName === 'A';\n    const removeNode = (ed, node, format) => {\n      const parentNode = node.parentNode;\n      let rootBlockElm;\n      const dom = ed.dom;\n      const forcedRootBlock = getForcedRootBlock(ed);\n      if (isBlockFormat(format)) {\n        if (parentNode === dom.getRoot()) {\n          if (!format.list_block || !isEq$2(node, format.list_block)) {\n            each$e(from(node.childNodes), node => {\n              if (isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) {\n                if (!rootBlockElm) {\n                  rootBlockElm = wrap$1(dom, node, forcedRootBlock);\n                  dom.setAttribs(rootBlockElm, getForcedRootBlockAttrs(ed));\n                } else {\n                  rootBlockElm.appendChild(node);\n                }\n              } else {\n                rootBlockElm = null;\n              }\n            });\n          }\n        }\n      }\n      if (isMixedFormat(format) && !isEq$2(format.inline, node)) {\n        return;\n      }\n      dom.remove(node, true);\n    };\n    const processFormatAttrOrStyle = (name, value, vars) => {\n      if (isNumber(name)) {\n        return {\n          name: value,\n          value: null\n        };\n      } else {\n        return {\n          name,\n          value: replaceVars(value, vars)\n        };\n      }\n    };\n    const removeEmptyStyleAttributeIfNeeded = (dom, elm) => {\n      if (dom.getAttrib(elm, 'style') === '') {\n        elm.removeAttribute('style');\n        elm.removeAttribute('data-mce-style');\n      }\n    };\n    const removeStyles = (dom, elm, format, vars, compareNode) => {\n      let stylesModified = false;\n      each$7(format.styles, (value, name) => {\n        const {\n          name: styleName,\n          value: styleValue\n        } = processFormatAttrOrStyle(name, value, vars);\n        const normalizedStyleValue = normalizeStyleValue(styleValue, styleName);\n        if (format.remove_similar || isNull(styleValue) || !isElement$6(compareNode) || isEq$2(getStyle(dom, compareNode, styleName), normalizedStyleValue)) {\n          dom.setStyle(elm, styleName, '');\n        }\n        stylesModified = true;\n      });\n      if (stylesModified) {\n        removeEmptyStyleAttributeIfNeeded(dom, elm);\n      }\n    };\n    const removeListStyleFormats = (editor, name, vars) => {\n      if (name === 'removeformat') {\n        each$e(getPartiallySelectedListItems(editor.selection), li => {\n          each$e(listItemStyles, name => editor.dom.setStyle(li, name, ''));\n          removeEmptyStyleAttributeIfNeeded(editor.dom, li);\n        });\n      } else {\n        getExpandedListItemFormat(editor.formatter, name).each(liFmt => {\n          each$e(getPartiallySelectedListItems(editor.selection), li => removeStyles(editor.dom, li, liFmt, vars, null));\n        });\n      }\n    };\n    const removeNodeFormatInternal = (ed, format, vars, node, compareNode) => {\n      const dom = ed.dom;\n      const elementUtils = ElementUtils(ed);\n      const schema = ed.schema;\n      if (isInlineFormat(format) && isTransparentElementName(schema, format.inline) && isTransparentBlock(schema, node) && node.parentElement === ed.getBody()) {\n        removeNode(ed, node, format);\n        return removeResult.removed();\n      }\n      if (!format.ceFalseOverride && node && dom.getContentEditableParent(node) === 'false') {\n        return removeResult.keep();\n      }\n      if (node && !matchName(dom, node, format) && !isColorFormatAndAnchor(node, format)) {\n        return removeResult.keep();\n      }\n      const elm = node;\n      const preserveAttributes = format.preserve_attributes;\n      if (isInlineFormat(format) && format.remove === 'all' && isArray$1(preserveAttributes)) {\n        const attrsToPreserve = filter$5(dom.getAttribs(elm), attr => contains$2(preserveAttributes, attr.name.toLowerCase()));\n        dom.removeAllAttribs(elm);\n        each$e(attrsToPreserve, attr => dom.setAttrib(elm, attr.name, attr.value));\n        if (attrsToPreserve.length > 0) {\n          return removeResult.rename('span');\n        }\n      }\n      if (format.remove !== 'all') {\n        removeStyles(dom, elm, format, vars, compareNode);\n        each$7(format.attributes, (value, name) => {\n          const {\n            name: attrName,\n            value: attrValue\n          } = processFormatAttrOrStyle(name, value, vars);\n          if (format.remove_similar || isNull(attrValue) || !isElement$6(compareNode) || isEq$2(dom.getAttrib(compareNode, attrName), attrValue)) {\n            if (attrName === 'class') {\n              const currentValue = dom.getAttrib(elm, attrName);\n              if (currentValue) {\n                let valueOut = '';\n                each$e(currentValue.split(/\\s+/), cls => {\n                  if (/mce\\-\\w+/.test(cls)) {\n                    valueOut += (valueOut ? ' ' : '') + cls;\n                  }\n                });\n                if (valueOut) {\n                  dom.setAttrib(elm, attrName, valueOut);\n                  return;\n                }\n              }\n            }\n            if (MCE_ATTR_RE.test(attrName)) {\n              elm.removeAttribute('data-mce-' + attrName);\n            }\n            if (attrName === 'style' && matchNodeNames(['li'])(elm) && dom.getStyle(elm, 'list-style-type') === 'none') {\n              elm.removeAttribute(attrName);\n              dom.setStyle(elm, 'list-style-type', 'none');\n              return;\n            }\n            if (attrName === 'class') {\n              elm.removeAttribute('className');\n            }\n            elm.removeAttribute(attrName);\n          }\n        });\n        each$7(format.classes, value => {\n          value = replaceVars(value, vars);\n          if (!isElement$6(compareNode) || dom.hasClass(compareNode, value)) {\n            dom.removeClass(elm, value);\n          }\n        });\n        const attrs = dom.getAttribs(elm);\n        for (let i = 0; i < attrs.length; i++) {\n          const attrName = attrs[i].nodeName;\n          if (!elementUtils.isAttributeInternal(attrName)) {\n            return removeResult.keep();\n          }\n        }\n      }\n      if (format.remove !== 'none') {\n        removeNode(ed, elm, format);\n        return removeResult.removed();\n      }\n      return removeResult.keep();\n    };\n    const findFormatRoot = (editor, container, name, vars, similar) => {\n      let formatRoot;\n      if (container.parentNode) {\n        each$e(getParents$2(editor.dom, container.parentNode).reverse(), parent => {\n          if (!formatRoot && isElement$6(parent) && parent.id !== '_start' && parent.id !== '_end') {\n            const format = matchNode(editor, parent, name, vars, similar);\n            if (format && format.split !== false) {\n              formatRoot = parent;\n            }\n          }\n        });\n      }\n      return formatRoot;\n    };\n    const removeNodeFormatFromClone = (editor, format, vars, clone) => removeNodeFormatInternal(editor, format, vars, clone, clone).fold(constant(clone), newName => {\n      const fragment = editor.dom.createFragment();\n      fragment.appendChild(clone);\n      return editor.dom.rename(clone, newName);\n    }, constant(null));\n    const wrapAndSplit = (editor, formatList, formatRoot, container, target, split, format, vars) => {\n      var _a, _b;\n      let lastClone;\n      let firstClone;\n      const dom = editor.dom;\n      if (formatRoot) {\n        const formatRootParent = formatRoot.parentNode;\n        for (let parent = container.parentNode; parent && parent !== formatRootParent; parent = parent.parentNode) {\n          let clone = dom.clone(parent, false);\n          for (let i = 0; i < formatList.length; i++) {\n            clone = removeNodeFormatFromClone(editor, formatList[i], vars, clone);\n            if (clone === null) {\n              break;\n            }\n          }\n          if (clone) {\n            if (lastClone) {\n              clone.appendChild(lastClone);\n            }\n            if (!firstClone) {\n              firstClone = clone;\n            }\n            lastClone = clone;\n          }\n        }\n        if (split && (!format.mixed || !dom.isBlock(formatRoot))) {\n          container = (_a = dom.split(formatRoot, container)) !== null && _a !== void 0 ? _a : container;\n        }\n        if (lastClone && firstClone) {\n          (_b = target.parentNode) === null || _b === void 0 ? void 0 : _b.insertBefore(lastClone, target);\n          firstClone.appendChild(target);\n          if (isInlineFormat(format)) {\n            mergeSiblings(editor, format, vars, lastClone);\n          }\n        }\n      }\n      return container;\n    };\n    const removeFormatInternal = (ed, name, vars, node, similar) => {\n      const formatList = ed.formatter.get(name);\n      const format = formatList[0];\n      const dom = ed.dom;\n      const selection = ed.selection;\n      const splitToFormatRoot = container => {\n        const formatRoot = findFormatRoot(ed, container, name, vars, similar);\n        return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format, vars);\n      };\n      const isRemoveBookmarkNode = node => isBookmarkNode$1(node) && isElement$6(node) && (node.id === '_start' || node.id === '_end');\n      const removeFormatOnNode = node => exists(formatList, fmt => removeNodeFormat(ed, fmt, vars, node, node));\n      const process = node => {\n        const children = from(node.childNodes);\n        const removed = removeFormatOnNode(node);\n        const currentNodeMatches = removed || exists(formatList, f => matchName(dom, node, f));\n        const parentNode = node.parentNode;\n        if (!currentNodeMatches && isNonNullable(parentNode) && shouldExpandToSelector(format)) {\n          removeFormatOnNode(parentNode);\n        }\n        if (format.deep) {\n          if (children.length) {\n            for (let i = 0; i < children.length; i++) {\n              process(children[i]);\n            }\n          }\n        }\n        const textDecorations = [\n          'underline',\n          'line-through',\n          'overline'\n        ];\n        each$e(textDecorations, decoration => {\n          if (isElement$6(node) && ed.dom.getStyle(node, 'text-decoration') === decoration && node.parentNode && getTextDecoration(dom, node.parentNode) === decoration) {\n            removeNodeFormat(ed, {\n              deep: false,\n              exact: true,\n              inline: 'span',\n              styles: { textDecoration: decoration }\n            }, undefined, node);\n          }\n        });\n      };\n      const unwrap = start => {\n        const node = dom.get(start ? '_start' : '_end');\n        if (node) {\n          let out = node[start ? 'firstChild' : 'lastChild'];\n          if (isRemoveBookmarkNode(out)) {\n            out = out[start ? 'firstChild' : 'lastChild'];\n          }\n          if (isText$a(out) && out.data.length === 0) {\n            out = start ? node.previousSibling || node.nextSibling : node.nextSibling || node.previousSibling;\n          }\n          dom.remove(node, true);\n          return out;\n        } else {\n          return null;\n        }\n      };\n      const removeRngStyle = rng => {\n        let startContainer;\n        let endContainer;\n        let expandedRng = expandRng(dom, rng, formatList, rng.collapsed);\n        if (format.split) {\n          expandedRng = split(expandedRng);\n          startContainer = getContainer(ed, expandedRng, true);\n          endContainer = getContainer(ed, expandedRng);\n          if (startContainer !== endContainer) {\n            startContainer = normalizeTableSelection(startContainer, true);\n            endContainer = normalizeTableSelection(endContainer, false);\n            if (isChildOfInlineParent(dom, startContainer, endContainer)) {\n              const marker = Optional.from(startContainer.firstChild).getOr(startContainer);\n              splitToFormatRoot(wrapWithSiblings(dom, marker, true, 'span', {\n                'id': '_start',\n                'data-mce-type': 'bookmark'\n              }));\n              unwrap(true);\n              return;\n            }\n            if (isChildOfInlineParent(dom, endContainer, startContainer)) {\n              const marker = Optional.from(endContainer.lastChild).getOr(endContainer);\n              splitToFormatRoot(wrapWithSiblings(dom, marker, false, 'span', {\n                'id': '_end',\n                'data-mce-type': 'bookmark'\n              }));\n              unwrap(false);\n              return;\n            }\n            startContainer = wrap$1(dom, startContainer, 'span', {\n              'id': '_start',\n              'data-mce-type': 'bookmark'\n            });\n            endContainer = wrap$1(dom, endContainer, 'span', {\n              'id': '_end',\n              'data-mce-type': 'bookmark'\n            });\n            const newRng = dom.createRng();\n            newRng.setStartAfter(startContainer);\n            newRng.setEndBefore(endContainer);\n            walk$3(dom, newRng, nodes => {\n              each$e(nodes, n => {\n                if (!isBookmarkNode$1(n) && !isBookmarkNode$1(n.parentNode)) {\n                  splitToFormatRoot(n);\n                }\n              });\n            });\n            splitToFormatRoot(startContainer);\n            splitToFormatRoot(endContainer);\n            startContainer = unwrap(true);\n            endContainer = unwrap();\n          } else {\n            startContainer = endContainer = splitToFormatRoot(startContainer);\n          }\n          expandedRng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;\n          expandedRng.startOffset = dom.nodeIndex(startContainer);\n          expandedRng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;\n          expandedRng.endOffset = dom.nodeIndex(endContainer) + 1;\n        }\n        walk$3(dom, expandedRng, nodes => {\n          each$e(nodes, process);\n        });\n      };\n      if (node) {\n        if (isNode(node)) {\n          const rng = dom.createRng();\n          rng.setStartBefore(node);\n          rng.setEndAfter(node);\n          removeRngStyle(rng);\n        } else {\n          removeRngStyle(node);\n        }\n        fireFormatRemove(ed, name, node, vars);\n        return;\n      }\n      if (!selection.isCollapsed() || !isInlineFormat(format) || getCellsFromEditor(ed).length) {\n        preserveSelection(ed, () => runOnRanges(ed, removeRngStyle), startNode => isInlineFormat(format) && match$2(ed, name, vars, startNode));\n        ed.nodeChanged();\n      } else {\n        removeCaretFormat(ed, name, vars, similar);\n      }\n      removeListStyleFormats(ed, name, vars);\n      fireFormatRemove(ed, name, node, vars);\n    };\n    const removeFormat$1 = (ed, name, vars, node, similar) => {\n      if (node || ed.selection.isEditable()) {\n        removeFormatInternal(ed, name, vars, node, similar);\n      }\n    };\n    const removeNodeFormat = (editor, format, vars, node, compareNode) => {\n      return removeNodeFormatInternal(editor, format, vars, node, compareNode).fold(never, newName => {\n        editor.dom.rename(node, newName);\n        return true;\n      }, always);\n    };\n\n    const each$6 = Tools.each;\n    const mergeTextDecorationsAndColor = (dom, format, vars, node) => {\n      const processTextDecorationsAndColor = n => {\n        if (isElement$6(n) && isElement$6(n.parentNode) && isEditable$2(n)) {\n          const parentTextDecoration = getTextDecoration(dom, n.parentNode);\n          if (dom.getStyle(n, 'color') && parentTextDecoration) {\n            dom.setStyle(n, 'text-decoration', parentTextDecoration);\n          } else if (dom.getStyle(n, 'text-decoration') === parentTextDecoration) {\n            dom.setStyle(n, 'text-decoration', null);\n          }\n        }\n      };\n      if (format.styles && (format.styles.color || format.styles.textDecoration)) {\n        Tools.walk(node, processTextDecorationsAndColor, 'childNodes');\n        processTextDecorationsAndColor(node);\n      }\n    };\n    const mergeBackgroundColorAndFontSize = (dom, format, vars, node) => {\n      if (format.styles && format.styles.backgroundColor) {\n        const hasFontSize = hasStyle(dom, 'fontSize');\n        processChildElements(node, elm => hasFontSize(elm) && isEditable$2(elm), applyStyle(dom, 'backgroundColor', replaceVars(format.styles.backgroundColor, vars)));\n      }\n    };\n    const mergeSubSup = (dom, format, vars, node) => {\n      if (isInlineFormat(format) && (format.inline === 'sub' || format.inline === 'sup')) {\n        const hasFontSize = hasStyle(dom, 'fontSize');\n        processChildElements(node, elm => hasFontSize(elm) && isEditable$2(elm), applyStyle(dom, 'fontSize', ''));\n        const inverseTagDescendants = filter$5(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), isEditable$2);\n        dom.remove(inverseTagDescendants, true);\n      }\n    };\n    const mergeWithChildren = (editor, formatList, vars, node) => {\n      each$6(formatList, format => {\n        if (isInlineFormat(format)) {\n          each$6(editor.dom.select(format.inline, node), child => {\n            if (isElementNode(child)) {\n              removeNodeFormat(editor, format, vars, child, format.exact ? child : null);\n            }\n          });\n        }\n        clearChildStyles(editor.dom, format, node);\n      });\n    };\n    const mergeWithParents = (editor, format, name, vars, node) => {\n      const parentNode = node.parentNode;\n      if (matchNode(editor, parentNode, name, vars)) {\n        if (removeNodeFormat(editor, format, vars, node)) {\n          return;\n        }\n      }\n      if (format.merge_with_parents && parentNode) {\n        editor.dom.getParent(parentNode, parent => {\n          if (matchNode(editor, parent, name, vars)) {\n            removeNodeFormat(editor, format, vars, node);\n            return true;\n          } else {\n            return false;\n          }\n        });\n      }\n    };\n\n    const each$5 = Tools.each;\n    const canFormatBR = (editor, format, node, parentName) => {\n      if (canFormatEmptyLines(editor) && isInlineFormat(format) && node.parentNode) {\n        const validBRParentElements = getTextRootBlockElements(editor.schema);\n        const hasCaretNodeSibling = sibling(SugarElement.fromDom(node), sibling => isCaretNode(sibling.dom));\n        return hasNonNullableKey(validBRParentElements, parentName) && isEmpty$2(SugarElement.fromDom(node.parentNode), false) && !hasCaretNodeSibling;\n      } else {\n        return false;\n      }\n    };\n    const applyStyles = (dom, elm, format, vars) => {\n      each$5(format.styles, (value, name) => {\n        dom.setStyle(elm, name, replaceVars(value, vars));\n      });\n      if (format.styles) {\n        const styleVal = dom.getAttrib(elm, 'style');\n        if (styleVal) {\n          dom.setAttrib(elm, 'data-mce-style', styleVal);\n        }\n      }\n    };\n    const applyFormatAction = (ed, name, vars, node) => {\n      const formatList = ed.formatter.get(name);\n      const format = formatList[0];\n      const isCollapsed = !node && ed.selection.isCollapsed();\n      const dom = ed.dom;\n      const selection = ed.selection;\n      const setElementFormat = (elm, fmt = format) => {\n        if (isFunction(fmt.onformat)) {\n          fmt.onformat(elm, fmt, vars, node);\n        }\n        applyStyles(dom, elm, fmt, vars);\n        each$5(fmt.attributes, (value, name) => {\n          dom.setAttrib(elm, name, replaceVars(value, vars));\n        });\n        each$5(fmt.classes, value => {\n          const newValue = replaceVars(value, vars);\n          if (!dom.hasClass(elm, newValue)) {\n            dom.addClass(elm, newValue);\n          }\n        });\n      };\n      const applyNodeStyle = (formatList, node) => {\n        let found = false;\n        each$5(formatList, format => {\n          if (!isSelectorFormat(format)) {\n            return false;\n          }\n          if (dom.getContentEditable(node) === 'false' && !format.ceFalseOverride) {\n            return true;\n          }\n          if (isNonNullable(format.collapsed) && format.collapsed !== isCollapsed) {\n            return true;\n          }\n          if (dom.is(node, format.selector) && !isCaretNode(node)) {\n            setElementFormat(node, format);\n            found = true;\n            return false;\n          }\n          return true;\n        });\n        return found;\n      };\n      const createWrapElement = wrapName => {\n        if (isString(wrapName)) {\n          const wrapElm = dom.create(wrapName);\n          setElementFormat(wrapElm);\n          return wrapElm;\n        } else {\n          return null;\n        }\n      };\n      const applyRngStyle = (dom, rng, nodeSpecific) => {\n        const newWrappers = [];\n        let contentEditable = true;\n        const wrapName = format.inline || format.block;\n        const wrapElm = createWrapElement(wrapName);\n        const isMatchingWrappingBlock = node => isWrappingBlockFormat(format) && matchNode(ed, node, name, vars);\n        const canRenameBlock = (node, parentName, isEditableDescendant) => {\n          const isValidBlockFormatForNode = isNonWrappingBlockFormat(format) && isTextBlock$1(ed.schema, node) && isValid(ed, parentName, wrapName);\n          return isEditableDescendant && isValidBlockFormatForNode;\n        };\n        const canWrapNode = (node, parentName, isEditableDescendant, isWrappableNoneditableElm) => {\n          const nodeName = node.nodeName.toLowerCase();\n          const isValidWrapNode = isValid(ed, wrapName, nodeName) && isValid(ed, parentName, wrapName);\n          const isZwsp = !nodeSpecific && isText$a(node) && isZwsp$1(node.data);\n          const isCaret = isCaretNode(node);\n          const isCorrectFormatForNode = !isInlineFormat(format) || !dom.isBlock(node);\n          return (isEditableDescendant || isWrappableNoneditableElm) && isValidWrapNode && !isZwsp && !isCaret && isCorrectFormatForNode;\n        };\n        walk$3(dom, rng, nodes => {\n          let currentWrapElm;\n          const process = node => {\n            let hasContentEditableState = false;\n            let lastContentEditable = contentEditable;\n            let isWrappableNoneditableElm = false;\n            const parentNode = node.parentNode;\n            const parentName = parentNode.nodeName.toLowerCase();\n            const contentEditableValue = dom.getContentEditable(node);\n            if (isNonNullable(contentEditableValue)) {\n              lastContentEditable = contentEditable;\n              contentEditable = contentEditableValue === 'true';\n              hasContentEditableState = true;\n              isWrappableNoneditableElm = isWrappableNoneditable(ed, node);\n            }\n            const isEditableDescendant = contentEditable && !hasContentEditableState;\n            if (isBr$6(node) && !canFormatBR(ed, format, node, parentName)) {\n              currentWrapElm = null;\n              if (isBlockFormat(format)) {\n                dom.remove(node);\n              }\n              return;\n            }\n            if (isMatchingWrappingBlock(node)) {\n              currentWrapElm = null;\n              return;\n            }\n            if (canRenameBlock(node, parentName, isEditableDescendant)) {\n              const elm = dom.rename(node, wrapName);\n              setElementFormat(elm);\n              newWrappers.push(elm);\n              currentWrapElm = null;\n              return;\n            }\n            if (isSelectorFormat(format)) {\n              let found = applyNodeStyle(formatList, node);\n              if (!found && isNonNullable(parentNode) && shouldExpandToSelector(format)) {\n                found = applyNodeStyle(formatList, parentNode);\n              }\n              if (!isInlineFormat(format) || found) {\n                currentWrapElm = null;\n                return;\n              }\n            }\n            if (isNonNullable(wrapElm) && canWrapNode(node, parentName, isEditableDescendant, isWrappableNoneditableElm)) {\n              if (!currentWrapElm) {\n                currentWrapElm = dom.clone(wrapElm, false);\n                parentNode.insertBefore(currentWrapElm, node);\n                newWrappers.push(currentWrapElm);\n              }\n              if (isWrappableNoneditableElm && hasContentEditableState) {\n                contentEditable = lastContentEditable;\n              }\n              currentWrapElm.appendChild(node);\n            } else {\n              currentWrapElm = null;\n              each$e(from(node.childNodes), process);\n              if (hasContentEditableState) {\n                contentEditable = lastContentEditable;\n              }\n              currentWrapElm = null;\n            }\n          };\n          each$e(nodes, process);\n        });\n        if (format.links === true) {\n          each$e(newWrappers, node => {\n            const process = node => {\n              if (node.nodeName === 'A') {\n                setElementFormat(node, format);\n              }\n              each$e(from(node.childNodes), process);\n            };\n            process(node);\n          });\n        }\n        each$e(newWrappers, node => {\n          const getChildCount = node => {\n            let count = 0;\n            each$e(node.childNodes, node => {\n              if (!isEmptyTextNode$1(node) && !isBookmarkNode$1(node)) {\n                count++;\n              }\n            });\n            return count;\n          };\n          const mergeStyles = node => {\n            const childElement = find$2(node.childNodes, isElementNode$1).filter(child => dom.getContentEditable(child) !== 'false' && matchName(dom, child, format));\n            return childElement.map(child => {\n              const clone = dom.clone(child, false);\n              setElementFormat(clone);\n              dom.replace(clone, node, true);\n              dom.remove(child, true);\n              return clone;\n            }).getOr(node);\n          };\n          const childCount = getChildCount(node);\n          if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {\n            dom.remove(node, true);\n            return;\n          }\n          if (isInlineFormat(format) || isBlockFormat(format) && format.wrapper) {\n            if (!format.exact && childCount === 1) {\n              node = mergeStyles(node);\n            }\n            mergeWithChildren(ed, formatList, vars, node);\n            mergeWithParents(ed, format, name, vars, node);\n            mergeBackgroundColorAndFontSize(dom, format, vars, node);\n            mergeTextDecorationsAndColor(dom, format, vars, node);\n            mergeSubSup(dom, format, vars, node);\n            mergeSiblings(ed, format, vars, node);\n          }\n        });\n      };\n      const targetNode = isNode(node) ? node : selection.getNode();\n      if (dom.getContentEditable(targetNode) === 'false' && !isWrappableNoneditable(ed, targetNode)) {\n        node = targetNode;\n        applyNodeStyle(formatList, node);\n        fireFormatApply(ed, name, node, vars);\n        return;\n      }\n      if (format) {\n        if (node) {\n          if (isNode(node)) {\n            if (!applyNodeStyle(formatList, node)) {\n              const rng = dom.createRng();\n              rng.setStartBefore(node);\n              rng.setEndAfter(node);\n              applyRngStyle(dom, expandRng(dom, rng, formatList), true);\n            }\n          } else {\n            applyRngStyle(dom, node, true);\n          }\n        } else {\n          if (!isCollapsed || !isInlineFormat(format) || getCellsFromEditor(ed).length) {\n            selection.setRng(normalize(selection.getRng()));\n            preserveSelection(ed, () => {\n              runOnRanges(ed, (selectionRng, fake) => {\n                const expandedRng = fake ? selectionRng : expandRng(dom, selectionRng, formatList);\n                applyRngStyle(dom, expandedRng, false);\n              });\n            }, always);\n            ed.nodeChanged();\n          } else {\n            applyCaretFormat(ed, name, vars);\n          }\n          getExpandedListItemFormat(ed.formatter, name).each(liFmt => {\n            each$e(getFullySelectedListItems(ed.selection), li => applyStyles(dom, li, liFmt, vars));\n          });\n        }\n        postProcess$1(name, ed);\n      }\n      fireFormatApply(ed, name, node, vars);\n    };\n    const applyFormat$1 = (editor, name, vars, node) => {\n      if (node || editor.selection.isEditable()) {\n        applyFormatAction(editor, name, vars, node);\n      }\n    };\n\n    const hasVars = value => has$2(value, 'vars');\n    const setup$t = (registeredFormatListeners, editor) => {\n      registeredFormatListeners.set({});\n      editor.on('NodeChange', e => {\n        updateAndFireChangeCallbacks(editor, e.element, registeredFormatListeners.get());\n      });\n      editor.on('FormatApply FormatRemove', e => {\n        const element = Optional.from(e.node).map(nodeOrRange => isNode(nodeOrRange) ? nodeOrRange : nodeOrRange.startContainer).bind(node => isElement$6(node) ? Optional.some(node) : Optional.from(node.parentElement)).getOrThunk(() => fallbackElement(editor));\n        updateAndFireChangeCallbacks(editor, element, registeredFormatListeners.get());\n      });\n    };\n    const fallbackElement = editor => editor.selection.getStart();\n    const matchingNode = (editor, parents, format, similar, vars) => {\n      const isMatchingNode = node => {\n        const matchingFormat = editor.formatter.matchNode(node, format, vars !== null && vars !== void 0 ? vars : {}, similar);\n        return !isUndefined(matchingFormat);\n      };\n      const isUnableToMatch = node => {\n        if (matchesUnInheritedFormatSelector(editor, node, format)) {\n          return true;\n        } else {\n          if (!similar) {\n            return isNonNullable(editor.formatter.matchNode(node, format, vars, true));\n          } else {\n            return false;\n          }\n        }\n      };\n      return findUntil$1(parents, isMatchingNode, isUnableToMatch);\n    };\n    const getParents = (editor, elm) => {\n      const element = elm !== null && elm !== void 0 ? elm : fallbackElement(editor);\n      return filter$5(getParents$2(editor.dom, element), node => isElement$6(node) && !isBogus$2(node));\n    };\n    const updateAndFireChangeCallbacks = (editor, elm, registeredCallbacks) => {\n      const parents = getParents(editor, elm);\n      each$d(registeredCallbacks, (data, format) => {\n        const runIfChanged = spec => {\n          const match = matchingNode(editor, parents, format, spec.similar, hasVars(spec) ? spec.vars : undefined);\n          const isSet = match.isSome();\n          if (spec.state.get() !== isSet) {\n            spec.state.set(isSet);\n            const node = match.getOr(elm);\n            if (hasVars(spec)) {\n              spec.callback(isSet, {\n                node,\n                format,\n                parents\n              });\n            } else {\n              each$e(spec.callbacks, callback => callback(isSet, {\n                node,\n                format,\n                parents\n              }));\n            }\n          }\n        };\n        each$e([\n          data.withSimilar,\n          data.withoutSimilar\n        ], runIfChanged);\n        each$e(data.withVars, runIfChanged);\n      });\n    };\n    const addListeners = (editor, registeredFormatListeners, formats, callback, similar, vars) => {\n      const formatChangeItems = registeredFormatListeners.get();\n      each$e(formats.split(','), format => {\n        const group = get$a(formatChangeItems, format).getOrThunk(() => {\n          const base = {\n            withSimilar: {\n              state: Cell(false),\n              similar: true,\n              callbacks: []\n            },\n            withoutSimilar: {\n              state: Cell(false),\n              similar: false,\n              callbacks: []\n            },\n            withVars: []\n          };\n          formatChangeItems[format] = base;\n          return base;\n        });\n        const getCurrent = () => {\n          const parents = getParents(editor);\n          return matchingNode(editor, parents, format, similar, vars).isSome();\n        };\n        if (isUndefined(vars)) {\n          const toAppendTo = similar ? group.withSimilar : group.withoutSimilar;\n          toAppendTo.callbacks.push(callback);\n          if (toAppendTo.callbacks.length === 1) {\n            toAppendTo.state.set(getCurrent());\n          }\n        } else {\n          group.withVars.push({\n            state: Cell(getCurrent()),\n            similar,\n            vars,\n            callback\n          });\n        }\n      });\n      registeredFormatListeners.set(formatChangeItems);\n    };\n    const removeListeners = (registeredFormatListeners, formats, callback) => {\n      const formatChangeItems = registeredFormatListeners.get();\n      each$e(formats.split(','), format => get$a(formatChangeItems, format).each(group => {\n        formatChangeItems[format] = {\n          withSimilar: {\n            ...group.withSimilar,\n            callbacks: filter$5(group.withSimilar.callbacks, cb => cb !== callback)\n          },\n          withoutSimilar: {\n            ...group.withoutSimilar,\n            callbacks: filter$5(group.withoutSimilar.callbacks, cb => cb !== callback)\n          },\n          withVars: filter$5(group.withVars, item => item.callback !== callback)\n        };\n      }));\n      registeredFormatListeners.set(formatChangeItems);\n    };\n    const formatChangedInternal = (editor, registeredFormatListeners, formats, callback, similar, vars) => {\n      addListeners(editor, registeredFormatListeners, formats, callback, similar, vars);\n      return { unbind: () => removeListeners(registeredFormatListeners, formats, callback) };\n    };\n\n    const toggle = (editor, name, vars, node) => {\n      const fmt = editor.formatter.get(name);\n      if (fmt) {\n        if (match$2(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {\n          removeFormat$1(editor, name, vars, node);\n        } else {\n          applyFormat$1(editor, name, vars, node);\n        }\n      }\n    };\n\n    const explode$1 = Tools.explode;\n    const create$8 = () => {\n      const filters = {};\n      const addFilter = (name, callback) => {\n        each$e(explode$1(name), name => {\n          if (!has$2(filters, name)) {\n            filters[name] = {\n              name,\n              callbacks: []\n            };\n          }\n          filters[name].callbacks.push(callback);\n        });\n      };\n      const getFilters = () => values(filters);\n      const removeFilter = (name, callback) => {\n        each$e(explode$1(name), name => {\n          if (has$2(filters, name)) {\n            if (isNonNullable(callback)) {\n              const filter = filters[name];\n              const newCallbacks = filter$5(filter.callbacks, c => c !== callback);\n              if (newCallbacks.length > 0) {\n                filter.callbacks = newCallbacks;\n              } else {\n                delete filters[name];\n              }\n            } else {\n              delete filters[name];\n            }\n          }\n        });\n      };\n      return {\n        addFilter,\n        getFilters,\n        removeFilter\n      };\n    };\n\n    const removeAttrs = (node, names) => {\n      each$e(names, name => {\n        node.attr(name, null);\n      });\n    };\n    const addFontToSpansFilter = (domParser, styles, fontSizes) => {\n      domParser.addNodeFilter('font', nodes => {\n        each$e(nodes, node => {\n          const props = styles.parse(node.attr('style'));\n          const color = node.attr('color');\n          const face = node.attr('face');\n          const size = node.attr('size');\n          if (color) {\n            props.color = color;\n          }\n          if (face) {\n            props['font-family'] = face;\n          }\n          if (size) {\n            toInt(size).each(num => {\n              props['font-size'] = fontSizes[num - 1];\n            });\n          }\n          node.name = 'span';\n          node.attr('style', styles.serialize(props));\n          removeAttrs(node, [\n            'color',\n            'face',\n            'size'\n          ]);\n        });\n      });\n    };\n    const addStrikeFilter = (domParser, schema, styles) => {\n      domParser.addNodeFilter('strike', nodes => {\n        const convertToSTag = schema.type !== 'html4';\n        each$e(nodes, node => {\n          if (convertToSTag) {\n            node.name = 's';\n          } else {\n            const props = styles.parse(node.attr('style'));\n            props['text-decoration'] = 'line-through';\n            node.name = 'span';\n            node.attr('style', styles.serialize(props));\n          }\n        });\n      });\n    };\n    const addFilters = (domParser, settings, schema) => {\n      var _a;\n      const styles = Styles();\n      if (settings.convert_fonts_to_spans) {\n        addFontToSpansFilter(domParser, styles, Tools.explode((_a = settings.font_size_legacy_values) !== null && _a !== void 0 ? _a : ''));\n      }\n      addStrikeFilter(domParser, schema, styles);\n    };\n    const register$5 = (domParser, settings, schema) => {\n      if (settings.inline_styles) {\n        addFilters(domParser, settings, schema);\n      }\n    };\n\n    const addNodeFilter = (htmlParser, schema) => {\n      htmlParser.addNodeFilter('br', (nodes, _, args) => {\n        const blockElements = Tools.extend({}, schema.getBlockElements());\n        const nonEmptyElements = schema.getNonEmptyElements();\n        const whitespaceElements = schema.getWhitespaceElements();\n        blockElements.body = 1;\n        const isBlock = node => node.name in blockElements && isTransparentAstInline(schema, node);\n        for (let i = 0, l = nodes.length; i < l; i++) {\n          let node = nodes[i];\n          let parent = node.parent;\n          if (parent && blockElements[parent.name] && node === parent.lastChild) {\n            let prev = node.prev;\n            while (prev) {\n              const prevName = prev.name;\n              if (prevName !== 'span' || prev.attr('data-mce-type') !== 'bookmark') {\n                if (prevName === 'br') {\n                  node = null;\n                }\n                break;\n              }\n              prev = prev.prev;\n            }\n            if (node) {\n              node.remove();\n              if (isEmpty(schema, nonEmptyElements, whitespaceElements, parent)) {\n                const elementRule = schema.getElementRule(parent.name);\n                if (elementRule) {\n                  if (elementRule.removeEmpty) {\n                    parent.remove();\n                  } else if (elementRule.paddEmpty) {\n                    paddEmptyNode(args, isBlock, parent);\n                  }\n                }\n              }\n            }\n          } else {\n            let lastParent = node;\n            while (parent && parent.firstChild === lastParent && parent.lastChild === lastParent) {\n              lastParent = parent;\n              if (blockElements[parent.name]) {\n                break;\n              }\n              parent = parent.parent;\n            }\n            if (lastParent === parent) {\n              const textNode = new AstNode('#text', 3);\n              textNode.value = nbsp;\n              node.replace(textNode);\n            }\n          }\n        }\n      });\n    };\n\n    const blobUriToBlob = url => fetch(url).then(res => res.ok ? res.blob() : Promise.reject()).catch(() => Promise.reject({\n      message: `Cannot convert ${ url } to Blob. Resource might not exist or is inaccessible.`,\n      uriType: 'blob'\n    }));\n    const extractBase64Data = data => {\n      const matches = /([a-z0-9+\\/=\\s]+)/i.exec(data);\n      return matches ? matches[1] : '';\n    };\n    const parseDataUri = uri => {\n      const [type, ...rest] = uri.split(',');\n      const data = rest.join(',');\n      const matches = /data:([^/]+\\/[^;]+)(;.+)?/.exec(type);\n      if (matches) {\n        const base64Encoded = matches[2] === ';base64';\n        const extractedData = base64Encoded ? extractBase64Data(data) : decodeURIComponent(data);\n        return Optional.some({\n          type: matches[1],\n          data: extractedData,\n          base64Encoded\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const buildBlob = (type, data, base64Encoded = true) => {\n      let str = data;\n      if (base64Encoded) {\n        try {\n          str = atob(data);\n        } catch (e) {\n          return Optional.none();\n        }\n      }\n      const arr = new Uint8Array(str.length);\n      for (let i = 0; i < arr.length; i++) {\n        arr[i] = str.charCodeAt(i);\n      }\n      return Optional.some(new Blob([arr], { type }));\n    };\n    const dataUriToBlob = uri => {\n      return new Promise((resolve, reject) => {\n        parseDataUri(uri).bind(({type, data, base64Encoded}) => buildBlob(type, data, base64Encoded)).fold(() => reject('Invalid data URI'), resolve);\n      });\n    };\n    const uriToBlob = url => {\n      if (startsWith(url, 'blob:')) {\n        return blobUriToBlob(url);\n      } else if (startsWith(url, 'data:')) {\n        return dataUriToBlob(url);\n      } else {\n        return Promise.reject('Unknown URI format');\n      }\n    };\n    const blobToDataUri = blob => {\n      return new Promise((resolve, reject) => {\n        const reader = new FileReader();\n        reader.onloadend = () => {\n          resolve(reader.result);\n        };\n        reader.onerror = () => {\n          var _a;\n          reject((_a = reader.error) === null || _a === void 0 ? void 0 : _a.message);\n        };\n        reader.readAsDataURL(blob);\n      });\n    };\n\n    let count$1 = 0;\n    const uniqueId$1 = prefix => {\n      return (prefix || 'blobid') + count$1++;\n    };\n    const processDataUri = (dataUri, base64Only, generateBlobInfo) => {\n      return parseDataUri(dataUri).bind(({data, type, base64Encoded}) => {\n        if (base64Only && !base64Encoded) {\n          return Optional.none();\n        } else {\n          const base64 = base64Encoded ? data : btoa(data);\n          return generateBlobInfo(base64, type);\n        }\n      });\n    };\n    const createBlobInfo$1 = (blobCache, blob, base64) => {\n      const blobInfo = blobCache.create(uniqueId$1(), blob, base64);\n      blobCache.add(blobInfo);\n      return blobInfo;\n    };\n    const dataUriToBlobInfo = (blobCache, dataUri, base64Only = false) => {\n      return processDataUri(dataUri, base64Only, (base64, type) => Optional.from(blobCache.getByData(base64, type)).orThunk(() => buildBlob(type, base64).map(blob => createBlobInfo$1(blobCache, blob, base64))));\n    };\n    const imageToBlobInfo = (blobCache, imageSrc) => {\n      const invalidDataUri = () => Promise.reject('Invalid data URI');\n      if (startsWith(imageSrc, 'blob:')) {\n        const blobInfo = blobCache.getByUri(imageSrc);\n        if (isNonNullable(blobInfo)) {\n          return Promise.resolve(blobInfo);\n        } else {\n          return uriToBlob(imageSrc).then(blob => {\n            return blobToDataUri(blob).then(dataUri => {\n              return processDataUri(dataUri, false, base64 => {\n                return Optional.some(createBlobInfo$1(blobCache, blob, base64));\n              }).getOrThunk(invalidDataUri);\n            });\n          });\n        }\n      } else if (startsWith(imageSrc, 'data:')) {\n        return dataUriToBlobInfo(blobCache, imageSrc).fold(invalidDataUri, blobInfo => Promise.resolve(blobInfo));\n      } else {\n        return Promise.reject('Unknown image data format');\n      }\n    };\n\n    const isBogusImage = img => isNonNullable(img.attr('data-mce-bogus'));\n    const isInternalImageSource = img => img.attr('src') === Env.transparentSrc || isNonNullable(img.attr('data-mce-placeholder'));\n    const registerBase64ImageFilter = (parser, settings) => {\n      const {blob_cache: blobCache} = settings;\n      if (blobCache) {\n        const processImage = img => {\n          const inputSrc = img.attr('src');\n          if (isInternalImageSource(img) || isBogusImage(img) || isNullable(inputSrc)) {\n            return;\n          }\n          dataUriToBlobInfo(blobCache, inputSrc, true).each(blobInfo => {\n            img.attr('src', blobInfo.blobUri());\n          });\n        };\n        parser.addAttributeFilter('src', nodes => each$e(nodes, processImage));\n      }\n    };\n    const register$4 = (parser, settings) => {\n      const schema = parser.schema;\n      if (settings.remove_trailing_brs) {\n        addNodeFilter(parser, schema);\n      }\n      parser.addAttributeFilter('href', nodes => {\n        let i = nodes.length;\n        const appendRel = rel => {\n          const parts = rel.split(' ').filter(p => p.length > 0);\n          return parts.concat(['noopener']).sort().join(' ');\n        };\n        const addNoOpener = rel => {\n          const newRel = rel ? Tools.trim(rel) : '';\n          if (!/\\b(noopener)\\b/g.test(newRel)) {\n            return appendRel(newRel);\n          } else {\n            return newRel;\n          }\n        };\n        if (!settings.allow_unsafe_link_target) {\n          while (i--) {\n            const node = nodes[i];\n            if (node.name === 'a' && node.attr('target') === '_blank') {\n              node.attr('rel', addNoOpener(node.attr('rel')));\n            }\n          }\n        }\n      });\n      if (!settings.allow_html_in_named_anchor) {\n        parser.addAttributeFilter('id,name', nodes => {\n          let i = nodes.length, sibling, prevSibling, parent, node;\n          while (i--) {\n            node = nodes[i];\n            if (node.name === 'a' && node.firstChild && !node.attr('href')) {\n              parent = node.parent;\n              sibling = node.lastChild;\n              while (sibling && parent) {\n                prevSibling = sibling.prev;\n                parent.insert(sibling, node);\n                sibling = prevSibling;\n              }\n            }\n          }\n        });\n      }\n      if (settings.fix_list_elements) {\n        parser.addNodeFilter('ul,ol', nodes => {\n          let i = nodes.length, node, parentNode;\n          while (i--) {\n            node = nodes[i];\n            parentNode = node.parent;\n            if (parentNode && (parentNode.name === 'ul' || parentNode.name === 'ol')) {\n              if (node.prev && node.prev.name === 'li') {\n                node.prev.append(node);\n              } else {\n                const li = new AstNode('li', 1);\n                li.attr('style', 'list-style-type: none');\n                node.wrap(li);\n              }\n            }\n          }\n        });\n      }\n      const validClasses = schema.getValidClasses();\n      if (settings.validate && validClasses) {\n        parser.addAttributeFilter('class', nodes => {\n          var _a;\n          let i = nodes.length;\n          while (i--) {\n            const node = nodes[i];\n            const clazz = (_a = node.attr('class')) !== null && _a !== void 0 ? _a : '';\n            const classList = Tools.explode(clazz, ' ');\n            let classValue = '';\n            for (let ci = 0; ci < classList.length; ci++) {\n              const className = classList[ci];\n              let valid = false;\n              let validClassesMap = validClasses['*'];\n              if (validClassesMap && validClassesMap[className]) {\n                valid = true;\n              }\n              validClassesMap = validClasses[node.name];\n              if (!valid && validClassesMap && validClassesMap[className]) {\n                valid = true;\n              }\n              if (valid) {\n                if (classValue) {\n                  classValue += ' ';\n                }\n                classValue += className;\n              }\n            }\n            if (!classValue.length) {\n              classValue = null;\n            }\n            node.attr('class', classValue);\n          }\n        });\n      }\n      registerBase64ImageFilter(parser, settings);\n    };\n\n    function _typeof(obj) {\n      '@babel/helpers - typeof';\n      return _typeof = 'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator ? function (obj) {\n        return typeof obj;\n      } : function (obj) {\n        return obj && 'function' == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n      }, _typeof(obj);\n    }\n    function _setPrototypeOf(o, p) {\n      _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n        o.__proto__ = p;\n        return o;\n      };\n      return _setPrototypeOf(o, p);\n    }\n    function _isNativeReflectConstruct() {\n      if (typeof Reflect === 'undefined' || !Reflect.construct)\n        return false;\n      if (Reflect.construct.sham)\n        return false;\n      if (typeof Proxy === 'function')\n        return true;\n      try {\n        Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {\n        }));\n        return true;\n      } catch (e) {\n        return false;\n      }\n    }\n    function _construct(Parent, args, Class) {\n      if (_isNativeReflectConstruct()) {\n        _construct = Reflect.construct;\n      } else {\n        _construct = function _construct(Parent, args, Class) {\n          var a = [null];\n          a.push.apply(a, args);\n          var Constructor = Function.bind.apply(Parent, a);\n          var instance = new Constructor();\n          if (Class)\n            _setPrototypeOf(instance, Class.prototype);\n          return instance;\n        };\n      }\n      return _construct.apply(null, arguments);\n    }\n    function _toConsumableArray(arr) {\n      return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n    }\n    function _arrayWithoutHoles(arr) {\n      if (Array.isArray(arr))\n        return _arrayLikeToArray(arr);\n    }\n    function _iterableToArray(iter) {\n      if (typeof Symbol !== 'undefined' && iter[Symbol.iterator] != null || iter['@@iterator'] != null)\n        return Array.from(iter);\n    }\n    function _unsupportedIterableToArray(o, minLen) {\n      if (!o)\n        return;\n      if (typeof o === 'string')\n        return _arrayLikeToArray(o, minLen);\n      var n = Object.prototype.toString.call(o).slice(8, -1);\n      if (n === 'Object' && o.constructor)\n        n = o.constructor.name;\n      if (n === 'Map' || n === 'Set')\n        return Array.from(o);\n      if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))\n        return _arrayLikeToArray(o, minLen);\n    }\n    function _arrayLikeToArray(arr, len) {\n      if (len == null || len > arr.length)\n        len = arr.length;\n      for (var i = 0, arr2 = new Array(len); i < len; i++)\n        arr2[i] = arr[i];\n      return arr2;\n    }\n    function _nonIterableSpread() {\n      throw new TypeError('Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.');\n    }\n    var hasOwnProperty = Object.hasOwnProperty, setPrototypeOf = Object.setPrototypeOf, isFrozen = Object.isFrozen, getPrototypeOf = Object.getPrototypeOf, getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n    var freeze = Object.freeze, seal = Object.seal, create$7 = Object.create;\n    var _ref = typeof Reflect !== 'undefined' && Reflect, apply = _ref.apply, construct = _ref.construct;\n    if (!apply) {\n      apply = function apply(fun, thisValue, args) {\n        return fun.apply(thisValue, args);\n      };\n    }\n    if (!freeze) {\n      freeze = function freeze(x) {\n        return x;\n      };\n    }\n    if (!seal) {\n      seal = function seal(x) {\n        return x;\n      };\n    }\n    if (!construct) {\n      construct = function construct(Func, args) {\n        return _construct(Func, _toConsumableArray(args));\n      };\n    }\n    var arrayForEach = unapply(Array.prototype.forEach);\n    var arrayPop = unapply(Array.prototype.pop);\n    var arrayPush = unapply(Array.prototype.push);\n    var stringToLowerCase = unapply(String.prototype.toLowerCase);\n    var stringMatch = unapply(String.prototype.match);\n    var stringReplace = unapply(String.prototype.replace);\n    var stringIndexOf = unapply(String.prototype.indexOf);\n    var stringTrim = unapply(String.prototype.trim);\n    var regExpTest = unapply(RegExp.prototype.test);\n    var typeErrorCreate = unconstruct(TypeError);\n    function unapply(func) {\n      return function (thisArg) {\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n        return apply(func, thisArg, args);\n      };\n    }\n    function unconstruct(func) {\n      return function () {\n        for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n          args[_key2] = arguments[_key2];\n        }\n        return construct(func, args);\n      };\n    }\n    function addToSet(set, array) {\n      if (setPrototypeOf) {\n        setPrototypeOf(set, null);\n      }\n      var l = array.length;\n      while (l--) {\n        var element = array[l];\n        if (typeof element === 'string') {\n          var lcElement = stringToLowerCase(element);\n          if (lcElement !== element) {\n            if (!isFrozen(array)) {\n              array[l] = lcElement;\n            }\n            element = lcElement;\n          }\n        }\n        set[element] = true;\n      }\n      return set;\n    }\n    function clone(object) {\n      var newObject = create$7(null);\n      var property;\n      for (property in object) {\n        if (apply(hasOwnProperty, object, [property])) {\n          newObject[property] = object[property];\n        }\n      }\n      return newObject;\n    }\n    function lookupGetter(object, prop) {\n      while (object !== null) {\n        var 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(element) {\n        console.warn('fallback value for', element);\n        return null;\n      }\n      return fallbackValue;\n    }\n    var html$1 = freeze([\n      'a',\n      'abbr',\n      'acronym',\n      'address',\n      'area',\n      'article',\n      'aside',\n      'audio',\n      'b',\n      'bdi',\n      'bdo',\n      'big',\n      'blink',\n      'blockquote',\n      'body',\n      'br',\n      'button',\n      'canvas',\n      'caption',\n      'center',\n      'cite',\n      'code',\n      'col',\n      'colgroup',\n      'content',\n      'data',\n      'datalist',\n      'dd',\n      'decorator',\n      'del',\n      'details',\n      'dfn',\n      'dialog',\n      'dir',\n      'div',\n      'dl',\n      'dt',\n      'element',\n      'em',\n      'fieldset',\n      'figcaption',\n      'figure',\n      'font',\n      'footer',\n      'form',\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6',\n      'head',\n      'header',\n      'hgroup',\n      'hr',\n      'html',\n      'i',\n      'img',\n      'input',\n      'ins',\n      'kbd',\n      'label',\n      'legend',\n      'li',\n      'main',\n      'map',\n      'mark',\n      'marquee',\n      'menu',\n      'menuitem',\n      'meter',\n      'nav',\n      'nobr',\n      'ol',\n      'optgroup',\n      'option',\n      'output',\n      'p',\n      'picture',\n      'pre',\n      'progress',\n      'q',\n      'rp',\n      'rt',\n      'ruby',\n      's',\n      'samp',\n      'section',\n      'select',\n      'shadow',\n      'small',\n      'source',\n      'spacer',\n      'span',\n      'strike',\n      'strong',\n      'style',\n      'sub',\n      'summary',\n      'sup',\n      'table',\n      'tbody',\n      'td',\n      'template',\n      'textarea',\n      'tfoot',\n      'th',\n      'thead',\n      'time',\n      'tr',\n      'track',\n      'tt',\n      'u',\n      'ul',\n      'var',\n      'video',\n      'wbr'\n    ]);\n    var svg$1 = freeze([\n      'svg',\n      'a',\n      'altglyph',\n      'altglyphdef',\n      'altglyphitem',\n      'animatecolor',\n      'animatemotion',\n      'animatetransform',\n      'circle',\n      'clippath',\n      'defs',\n      'desc',\n      'ellipse',\n      'filter',\n      'font',\n      'g',\n      'glyph',\n      'glyphref',\n      'hkern',\n      'image',\n      'line',\n      'lineargradient',\n      'marker',\n      'mask',\n      'metadata',\n      'mpath',\n      'path',\n      'pattern',\n      'polygon',\n      'polyline',\n      'radialgradient',\n      'rect',\n      'stop',\n      'style',\n      'switch',\n      'symbol',\n      'text',\n      'textpath',\n      'title',\n      'tref',\n      'tspan',\n      'view',\n      'vkern'\n    ]);\n    var svgFilters = freeze([\n      'feBlend',\n      'feColorMatrix',\n      'feComponentTransfer',\n      'feComposite',\n      'feConvolveMatrix',\n      'feDiffuseLighting',\n      'feDisplacementMap',\n      'feDistantLight',\n      'feFlood',\n      'feFuncA',\n      'feFuncB',\n      'feFuncG',\n      'feFuncR',\n      'feGaussianBlur',\n      'feImage',\n      'feMerge',\n      'feMergeNode',\n      'feMorphology',\n      'feOffset',\n      'fePointLight',\n      'feSpecularLighting',\n      'feSpotLight',\n      'feTile',\n      'feTurbulence'\n    ]);\n    var svgDisallowed = freeze([\n      'animate',\n      'color-profile',\n      'cursor',\n      'discard',\n      'fedropshadow',\n      'font-face',\n      'font-face-format',\n      'font-face-name',\n      'font-face-src',\n      'font-face-uri',\n      'foreignobject',\n      'hatch',\n      'hatchpath',\n      'mesh',\n      'meshgradient',\n      'meshpatch',\n      'meshrow',\n      'missing-glyph',\n      'script',\n      'set',\n      'solidcolor',\n      'unknown',\n      'use'\n    ]);\n    var mathMl$1 = freeze([\n      'math',\n      'menclose',\n      'merror',\n      'mfenced',\n      'mfrac',\n      'mglyph',\n      'mi',\n      'mlabeledtr',\n      'mmultiscripts',\n      'mn',\n      'mo',\n      'mover',\n      'mpadded',\n      'mphantom',\n      'mroot',\n      'mrow',\n      'ms',\n      'mspace',\n      'msqrt',\n      'mstyle',\n      'msub',\n      'msup',\n      'msubsup',\n      'mtable',\n      'mtd',\n      'mtext',\n      'mtr',\n      'munder',\n      'munderover'\n    ]);\n    var mathMlDisallowed = freeze([\n      'maction',\n      'maligngroup',\n      'malignmark',\n      'mlongdiv',\n      'mscarries',\n      'mscarry',\n      'msgroup',\n      'mstack',\n      'msline',\n      'msrow',\n      'semantics',\n      'annotation',\n      'annotation-xml',\n      'mprescripts',\n      'none'\n    ]);\n    var text = freeze(['#text']);\n    var html = freeze([\n      'accept',\n      'action',\n      'align',\n      'alt',\n      'autocapitalize',\n      'autocomplete',\n      'autopictureinpicture',\n      'autoplay',\n      'background',\n      'bgcolor',\n      'border',\n      'capture',\n      'cellpadding',\n      'cellspacing',\n      'checked',\n      'cite',\n      'class',\n      'clear',\n      'color',\n      'cols',\n      'colspan',\n      'controls',\n      'controlslist',\n      'coords',\n      'crossorigin',\n      'datetime',\n      'decoding',\n      'default',\n      'dir',\n      'disabled',\n      'disablepictureinpicture',\n      'disableremoteplayback',\n      'download',\n      'draggable',\n      'enctype',\n      'enterkeyhint',\n      'face',\n      'for',\n      'headers',\n      'height',\n      'hidden',\n      'high',\n      'href',\n      'hreflang',\n      'id',\n      'inputmode',\n      'integrity',\n      'ismap',\n      'kind',\n      'label',\n      'lang',\n      'list',\n      'loading',\n      'loop',\n      'low',\n      'max',\n      'maxlength',\n      'media',\n      'method',\n      'min',\n      'minlength',\n      'multiple',\n      'muted',\n      'name',\n      'nonce',\n      'noshade',\n      'novalidate',\n      'nowrap',\n      'open',\n      'optimum',\n      'pattern',\n      'placeholder',\n      'playsinline',\n      'poster',\n      'preload',\n      'pubdate',\n      'radiogroup',\n      'readonly',\n      'rel',\n      'required',\n      'rev',\n      'reversed',\n      'role',\n      'rows',\n      'rowspan',\n      'spellcheck',\n      'scope',\n      'selected',\n      'shape',\n      'size',\n      'sizes',\n      'span',\n      'srclang',\n      'start',\n      'src',\n      'srcset',\n      'step',\n      'style',\n      'summary',\n      'tabindex',\n      'title',\n      'translate',\n      'type',\n      'usemap',\n      'valign',\n      'value',\n      'width',\n      'xmlns',\n      'slot'\n    ]);\n    var svg = freeze([\n      'accent-height',\n      'accumulate',\n      'additive',\n      'alignment-baseline',\n      'ascent',\n      'attributename',\n      'attributetype',\n      'azimuth',\n      'basefrequency',\n      'baseline-shift',\n      'begin',\n      'bias',\n      'by',\n      'class',\n      'clip',\n      'clippathunits',\n      'clip-path',\n      'clip-rule',\n      'color',\n      'color-interpolation',\n      'color-interpolation-filters',\n      'color-profile',\n      'color-rendering',\n      'cx',\n      'cy',\n      'd',\n      'dx',\n      'dy',\n      'diffuseconstant',\n      'direction',\n      'display',\n      'divisor',\n      'dur',\n      'edgemode',\n      'elevation',\n      'end',\n      'fill',\n      'fill-opacity',\n      'fill-rule',\n      'filter',\n      'filterunits',\n      'flood-color',\n      'flood-opacity',\n      'font-family',\n      'font-size',\n      'font-size-adjust',\n      'font-stretch',\n      'font-style',\n      'font-variant',\n      'font-weight',\n      'fx',\n      'fy',\n      'g1',\n      'g2',\n      'glyph-name',\n      'glyphref',\n      'gradientunits',\n      'gradienttransform',\n      'height',\n      'href',\n      'id',\n      'image-rendering',\n      'in',\n      'in2',\n      'k',\n      'k1',\n      'k2',\n      'k3',\n      'k4',\n      'kerning',\n      'keypoints',\n      'keysplines',\n      'keytimes',\n      'lang',\n      'lengthadjust',\n      'letter-spacing',\n      'kernelmatrix',\n      'kernelunitlength',\n      'lighting-color',\n      'local',\n      'marker-end',\n      'marker-mid',\n      'marker-start',\n      'markerheight',\n      'markerunits',\n      'markerwidth',\n      'maskcontentunits',\n      'maskunits',\n      'max',\n      'mask',\n      'media',\n      'method',\n      'mode',\n      'min',\n      'name',\n      'numoctaves',\n      'offset',\n      'operator',\n      'opacity',\n      'order',\n      'orient',\n      'orientation',\n      'origin',\n      'overflow',\n      'paint-order',\n      'path',\n      'pathlength',\n      'patterncontentunits',\n      'patterntransform',\n      'patternunits',\n      'points',\n      'preservealpha',\n      'preserveaspectratio',\n      'primitiveunits',\n      'r',\n      'rx',\n      'ry',\n      'radius',\n      'refx',\n      'refy',\n      'repeatcount',\n      'repeatdur',\n      'restart',\n      'result',\n      'rotate',\n      'scale',\n      'seed',\n      'shape-rendering',\n      'specularconstant',\n      'specularexponent',\n      'spreadmethod',\n      'startoffset',\n      'stddeviation',\n      'stitchtiles',\n      'stop-color',\n      'stop-opacity',\n      'stroke-dasharray',\n      'stroke-dashoffset',\n      'stroke-linecap',\n      'stroke-linejoin',\n      'stroke-miterlimit',\n      'stroke-opacity',\n      'stroke',\n      'stroke-width',\n      'style',\n      'surfacescale',\n      'systemlanguage',\n      'tabindex',\n      'targetx',\n      'targety',\n      'transform',\n      'transform-origin',\n      'text-anchor',\n      'text-decoration',\n      'text-rendering',\n      'textlength',\n      'type',\n      'u1',\n      'u2',\n      'unicode',\n      'values',\n      'viewbox',\n      'visibility',\n      'version',\n      'vert-adv-y',\n      'vert-origin-x',\n      'vert-origin-y',\n      'width',\n      'word-spacing',\n      'wrap',\n      'writing-mode',\n      'xchannelselector',\n      'ychannelselector',\n      'x',\n      'x1',\n      'x2',\n      'xmlns',\n      'y',\n      'y1',\n      'y2',\n      'z',\n      'zoomandpan'\n    ]);\n    var mathMl = freeze([\n      'accent',\n      'accentunder',\n      'align',\n      'bevelled',\n      'close',\n      'columnsalign',\n      'columnlines',\n      'columnspan',\n      'denomalign',\n      'depth',\n      'dir',\n      'display',\n      'displaystyle',\n      'encoding',\n      'fence',\n      'frame',\n      'height',\n      'href',\n      'id',\n      'largeop',\n      'length',\n      'linethickness',\n      'lspace',\n      'lquote',\n      'mathbackground',\n      'mathcolor',\n      'mathsize',\n      'mathvariant',\n      'maxsize',\n      'minsize',\n      'movablelimits',\n      'notation',\n      'numalign',\n      'open',\n      'rowalign',\n      'rowlines',\n      'rowspacing',\n      'rowspan',\n      'rspace',\n      'rquote',\n      'scriptlevel',\n      'scriptminsize',\n      'scriptsizemultiplier',\n      'selection',\n      'separator',\n      'separators',\n      'stretchy',\n      'subscriptshift',\n      'supscriptshift',\n      'symmetric',\n      'voffset',\n      'width',\n      'xmlns'\n    ]);\n    var xml = freeze([\n      'xlink:href',\n      'xml:id',\n      'xlink:title',\n      'xml:space',\n      'xmlns:xlink'\n    ]);\n    var MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm);\n    var ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n    var DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/);\n    var ARIA_ATTR = seal(/^aria-[\\-\\w]+$/);\n    var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i);\n    var IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n    var ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g);\n    var DOCTYPE_NAME = seal(/^html$/i);\n    var getGlobal = function getGlobal() {\n      return typeof window === 'undefined' ? null : window;\n    };\n    var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) {\n      if (_typeof(trustedTypes) !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n        return null;\n      }\n      var suffix = null;\n      var ATTR_NAME = 'data-tt-policy-suffix';\n      if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) {\n        suffix = document.currentScript.getAttribute(ATTR_NAME);\n      }\n      var policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n      try {\n        return trustedTypes.createPolicy(policyName, {\n          createHTML: function createHTML(html) {\n            return html;\n          }\n        });\n      } catch (_) {\n        console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n        return null;\n      }\n    };\n    function createDOMPurify() {\n      var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n      var DOMPurify = function DOMPurify(root) {\n        return createDOMPurify(root);\n      };\n      DOMPurify.version = '2.3.8';\n      DOMPurify.removed = [];\n      if (!window || !window.document || window.document.nodeType !== 9) {\n        DOMPurify.isSupported = false;\n        return DOMPurify;\n      }\n      var originalDocument = window.document;\n      var document = window.document;\n      var DocumentFragment = window.DocumentFragment, HTMLTemplateElement = window.HTMLTemplateElement, Node = window.Node, Element = window.Element, NodeFilter = window.NodeFilter, _window$NamedNodeMap = window.NamedNodeMap, NamedNodeMap = _window$NamedNodeMap === void 0 ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap, HTMLFormElement = window.HTMLFormElement, DOMParser = window.DOMParser, trustedTypes = window.trustedTypes;\n      var ElementPrototype = Element.prototype;\n      var cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n      var getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n      var getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n      var getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n      if (typeof HTMLTemplateElement === 'function') {\n        var template = document.createElement('template');\n        if (template.content && template.content.ownerDocument) {\n          document = template.content.ownerDocument;\n        }\n      }\n      var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument);\n      var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n      var _document = document, implementation = _document.implementation, createNodeIterator = _document.createNodeIterator, createDocumentFragment = _document.createDocumentFragment, getElementsByTagName = _document.getElementsByTagName;\n      var importNode = originalDocument.importNode;\n      var documentMode = {};\n      try {\n        documentMode = clone(document).documentMode ? document.documentMode : {};\n      } catch (_) {\n      }\n      var hooks = {};\n      DOMPurify.isSupported = typeof getParentNode === 'function' && implementation && typeof implementation.createHTMLDocument !== 'undefined' && documentMode !== 9;\n      var MUSTACHE_EXPR$1 = MUSTACHE_EXPR, ERB_EXPR$1 = ERB_EXPR, DATA_ATTR$1 = DATA_ATTR, ARIA_ATTR$1 = ARIA_ATTR, IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA, ATTR_WHITESPACE$1 = ATTR_WHITESPACE;\n      var IS_ALLOWED_URI$1 = IS_ALLOWED_URI;\n      var ALLOWED_TAGS = null;\n      var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(svgFilters), _toConsumableArray(mathMl$1), _toConsumableArray(text)));\n      var ALLOWED_ATTR = null;\n      var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(mathMl), _toConsumableArray(xml)));\n      var CUSTOM_ELEMENT_HANDLING = Object.seal(Object.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      var FORBID_TAGS = null;\n      var FORBID_ATTR = null;\n      var ALLOW_ARIA_ATTR = true;\n      var ALLOW_DATA_ATTR = true;\n      var ALLOW_UNKNOWN_PROTOCOLS = false;\n      var SAFE_FOR_TEMPLATES = false;\n      var WHOLE_DOCUMENT = false;\n      var SET_CONFIG = false;\n      var FORCE_BODY = false;\n      var RETURN_DOM = false;\n      var RETURN_DOM_FRAGMENT = false;\n      var RETURN_TRUSTED_TYPE = false;\n      var SANITIZE_DOM = true;\n      var KEEP_CONTENT = true;\n      var IN_PLACE = false;\n      var USE_PROFILES = {};\n      var FORBID_CONTENTS = null;\n      var DEFAULT_FORBID_CONTENTS = addToSet({}, [\n        'annotation-xml',\n        'audio',\n        'colgroup',\n        'desc',\n        'foreignobject',\n        'head',\n        'iframe',\n        'math',\n        'mi',\n        'mn',\n        'mo',\n        'ms',\n        'mtext',\n        'noembed',\n        'noframes',\n        'noscript',\n        'plaintext',\n        'script',\n        'style',\n        'svg',\n        'template',\n        'thead',\n        'title',\n        'video',\n        'xmp'\n      ]);\n      var DATA_URI_TAGS = null;\n      var DEFAULT_DATA_URI_TAGS = addToSet({}, [\n        'audio',\n        'video',\n        'img',\n        'source',\n        'image',\n        'track'\n      ]);\n      var URI_SAFE_ATTRIBUTES = null;\n      var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n        'alt',\n        'class',\n        'for',\n        'id',\n        'label',\n        'name',\n        'pattern',\n        'placeholder',\n        'role',\n        'summary',\n        'title',\n        'value',\n        'style',\n        'xmlns'\n      ]);\n      var MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n      var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n      var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n      var NAMESPACE = HTML_NAMESPACE;\n      var IS_EMPTY_INPUT = false;\n      var PARSER_MEDIA_TYPE;\n      var SUPPORTED_PARSER_MEDIA_TYPES = [\n        'application/xhtml+xml',\n        'text/html'\n      ];\n      var DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n      var transformCaseFunc;\n      var CONFIG = null;\n      var formElement = document.createElement('form');\n      var isRegexOrFunction = function isRegexOrFunction(testValue) {\n        return testValue instanceof RegExp || testValue instanceof Function;\n      };\n      var _parseConfig = function _parseConfig(cfg) {\n        if (CONFIG && CONFIG === cfg) {\n          return;\n        }\n        if (!cfg || _typeof(cfg) !== 'object') {\n          cfg = {};\n        }\n        cfg = clone(cfg);\n        ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;\n        ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;\n        URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR) : DEFAULT_URI_SAFE_ATTRIBUTES;\n        DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS) : DEFAULT_DATA_URI_TAGS;\n        FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS) : DEFAULT_FORBID_CONTENTS;\n        FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};\n        FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};\n        USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n        ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;\n        ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;\n        ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;\n        SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;\n        WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;\n        RETURN_DOM = cfg.RETURN_DOM || false;\n        RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;\n        RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;\n        FORCE_BODY = cfg.FORCE_BODY || false;\n        SANITIZE_DOM = cfg.SANITIZE_DOM !== false;\n        KEEP_CONTENT = cfg.KEEP_CONTENT !== false;\n        IN_PLACE = cfg.IN_PLACE || false;\n        IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$1;\n        NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n        if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n          CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n        }\n        if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n          CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n        }\n        if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n          CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n        }\n        PARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE;\n        transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? function (x) {\n          return x;\n        } : stringToLowerCase;\n        if (SAFE_FOR_TEMPLATES) {\n          ALLOW_DATA_ATTR = false;\n        }\n        if (RETURN_DOM_FRAGMENT) {\n          RETURN_DOM = true;\n        }\n        if (USE_PROFILES) {\n          ALLOWED_TAGS = addToSet({}, _toConsumableArray(text));\n          ALLOWED_ATTR = [];\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        if (cfg.ADD_TAGS) {\n          if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n            ALLOWED_TAGS = clone(ALLOWED_TAGS);\n          }\n          addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);\n        }\n        if (cfg.ADD_ATTR) {\n          if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n            ALLOWED_ATTR = clone(ALLOWED_ATTR);\n          }\n          addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);\n        }\n        if (cfg.ADD_URI_SAFE_ATTR) {\n          addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);\n        }\n        if (cfg.FORBID_CONTENTS) {\n          if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n            FORBID_CONTENTS = clone(FORBID_CONTENTS);\n          }\n          addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS);\n        }\n        if (KEEP_CONTENT) {\n          ALLOWED_TAGS['#text'] = true;\n        }\n        if (WHOLE_DOCUMENT) {\n          addToSet(ALLOWED_TAGS, [\n            'html',\n            'head',\n            'body'\n          ]);\n        }\n        if (ALLOWED_TAGS.table) {\n          addToSet(ALLOWED_TAGS, ['tbody']);\n          delete FORBID_TAGS.tbody;\n        }\n        if (freeze) {\n          freeze(cfg);\n        }\n        CONFIG = cfg;\n      };\n      var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n        'mi',\n        'mo',\n        'mn',\n        'ms',\n        'mtext'\n      ]);\n      var HTML_INTEGRATION_POINTS = addToSet({}, [\n        'foreignobject',\n        'desc',\n        'title',\n        'annotation-xml'\n      ]);\n      var COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n        'title',\n        'style',\n        'font',\n        'a',\n        'script'\n      ]);\n      var ALL_SVG_TAGS = addToSet({}, svg$1);\n      addToSet(ALL_SVG_TAGS, svgFilters);\n      addToSet(ALL_SVG_TAGS, svgDisallowed);\n      var ALL_MATHML_TAGS = addToSet({}, mathMl$1);\n      addToSet(ALL_MATHML_TAGS, mathMlDisallowed);\n      var _checkValidNamespace = function _checkValidNamespace(element) {\n        var parent = getParentNode(element);\n        if (!parent || !parent.tagName) {\n          parent = {\n            namespaceURI: HTML_NAMESPACE,\n            tagName: 'template'\n          };\n        }\n        var tagName = stringToLowerCase(element.tagName);\n        var parentTagName = stringToLowerCase(parent.tagName);\n        if (element.namespaceURI === SVG_NAMESPACE) {\n          if (parent.namespaceURI === HTML_NAMESPACE) {\n            return tagName === 'svg';\n          }\n          if (parent.namespaceURI === MATHML_NAMESPACE) {\n            return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n          }\n          return Boolean(ALL_SVG_TAGS[tagName]);\n        }\n        if (element.namespaceURI === MATHML_NAMESPACE) {\n          if (parent.namespaceURI === HTML_NAMESPACE) {\n            return tagName === 'math';\n          }\n          if (parent.namespaceURI === SVG_NAMESPACE) {\n            return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n          }\n          return Boolean(ALL_MATHML_TAGS[tagName]);\n        }\n        if (element.namespaceURI === HTML_NAMESPACE) {\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          return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n        }\n        return false;\n      };\n      var _forceRemove = function _forceRemove(node) {\n        arrayPush(DOMPurify.removed, { element: node });\n        try {\n          node.parentNode.removeChild(node);\n        } catch (_) {\n          try {\n            node.outerHTML = emptyHTML;\n          } catch (_) {\n            node.remove();\n          }\n        }\n      };\n      var _removeAttribute = function _removeAttribute(name, node) {\n        try {\n          arrayPush(DOMPurify.removed, {\n            attribute: node.getAttributeNode(name),\n            from: node\n          });\n        } catch (_) {\n          arrayPush(DOMPurify.removed, {\n            attribute: null,\n            from: node\n          });\n        }\n        node.removeAttribute(name);\n        if (name === 'is' && !ALLOWED_ATTR[name]) {\n          if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n            try {\n              _forceRemove(node);\n            } catch (_) {\n            }\n          } else {\n            try {\n              node.setAttribute(name, '');\n            } catch (_) {\n            }\n          }\n        }\n      };\n      var _initDocument = function _initDocument(dirty) {\n        var doc;\n        var leadingWhitespace;\n        if (FORCE_BODY) {\n          dirty = '<remove></remove>' + dirty;\n        } else {\n          var matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n          leadingWhitespace = matches && matches[0];\n        }\n        if (PARSER_MEDIA_TYPE === 'application/xhtml+xml') {\n          dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n        }\n        var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n        if (NAMESPACE === HTML_NAMESPACE) {\n          try {\n            doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n          } catch (_) {\n          }\n        }\n        if (!doc || !doc.documentElement) {\n          doc = implementation.createDocument(NAMESPACE, 'template', null);\n          try {\n            doc.documentElement.innerHTML = IS_EMPTY_INPUT ? '' : dirtyPayload;\n          } catch (_) {\n          }\n        }\n        var body = doc.body || doc.documentElement;\n        if (dirty && leadingWhitespace) {\n          body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n        }\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      var _createIterator = function _createIterator(root) {\n        return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null, false);\n      };\n      var _isClobbered = function _isClobbered(elm) {\n        return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function');\n      };\n      var _isNode = function _isNode(object) {\n        return _typeof(Node) === 'object' ? object instanceof Node : object && _typeof(object) === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string';\n      };\n      var _executeHook = function _executeHook(entryPoint, currentNode, data) {\n        if (!hooks[entryPoint]) {\n          return;\n        }\n        arrayForEach(hooks[entryPoint], function (hook) {\n          hook.call(DOMPurify, currentNode, data, CONFIG);\n        });\n      };\n      var _sanitizeElements = function _sanitizeElements(currentNode) {\n        var content;\n        _executeHook('beforeSanitizeElements', currentNode, null);\n        if (_isClobbered(currentNode)) {\n          _forceRemove(currentNode);\n          return true;\n        }\n        if (regExpTest(/[\\u0080-\\uFFFF]/, currentNode.nodeName)) {\n          _forceRemove(currentNode);\n          return true;\n        }\n        var tagName = transformCaseFunc(currentNode.nodeName);\n        _executeHook('uponSanitizeElement', currentNode, {\n          tagName: tagName,\n          allowedTags: ALLOWED_TAGS\n        });\n        if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n          _forceRemove(currentNode);\n          return true;\n        }\n        if (tagName === 'select' && regExpTest(/<template/i, currentNode.innerHTML)) {\n          _forceRemove(currentNode);\n          return true;\n        }\n        if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n          if (!FORBID_TAGS[tagName] && _basicCustomElementTest(tagName)) {\n            if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName))\n              return false;\n            if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName))\n              return false;\n          }\n          if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n            var parentNode = getParentNode(currentNode) || currentNode.parentNode;\n            var childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n            if (childNodes && parentNode) {\n              var childCount = childNodes.length;\n              for (var i = childCount - 1; i >= 0; --i) {\n                parentNode.insertBefore(cloneNode(childNodes[i], true), getNextSibling(currentNode));\n              }\n            }\n          }\n          _forceRemove(currentNode);\n          return true;\n        }\n        if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n          _forceRemove(currentNode);\n          return true;\n        }\n        if ((tagName === 'noscript' || tagName === 'noembed') && regExpTest(/<\\/no(script|embed)/i, currentNode.innerHTML)) {\n          _forceRemove(currentNode);\n          return true;\n        }\n        if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n          content = currentNode.textContent;\n          content = stringReplace(content, MUSTACHE_EXPR$1, ' ');\n          content = stringReplace(content, ERB_EXPR$1, ' ');\n          if (currentNode.textContent !== content) {\n            arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n            currentNode.textContent = content;\n          }\n        }\n        _executeHook('afterSanitizeElements', currentNode, null);\n        return false;\n      };\n      var _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n        if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n          return false;\n        }\n        if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR$1, lcName));\n        else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName));\n        else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n          if (_basicCustomElementTest(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)) || 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)));\n          else {\n            return false;\n          }\n        } else if (URI_SAFE_ATTRIBUTES[lcName]);\n        else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, '')));\n        else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]);\n        else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, '')));\n        else if (!value);\n        else {\n          return false;\n        }\n        return true;\n      };\n      var _basicCustomElementTest = function _basicCustomElementTest(tagName) {\n        return tagName.indexOf('-') > 0;\n      };\n      var _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n        var attr;\n        var value;\n        var lcName;\n        var l;\n        _executeHook('beforeSanitizeAttributes', currentNode, null);\n        var attributes = currentNode.attributes;\n        if (!attributes) {\n          return;\n        }\n        var hookEvent = {\n          attrName: '',\n          attrValue: '',\n          keepAttr: true,\n          allowedAttributes: ALLOWED_ATTR\n        };\n        l = attributes.length;\n        while (l--) {\n          attr = attributes[l];\n          var _attr = attr, name = _attr.name, namespaceURI = _attr.namespaceURI;\n          value = name === 'value' ? attr.value : stringTrim(attr.value);\n          lcName = transformCaseFunc(name);\n          var initValue = value;\n          hookEvent.attrName = lcName;\n          hookEvent.attrValue = value;\n          hookEvent.keepAttr = true;\n          hookEvent.forceKeepAttr = undefined;\n          _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n          value = hookEvent.attrValue;\n          if (hookEvent.forceKeepAttr) {\n            continue;\n          }\n          if (!hookEvent.keepAttr) {\n            _removeAttribute(name, currentNode);\n            continue;\n          }\n          if (regExpTest(/\\/>/i, value)) {\n            _removeAttribute(name, currentNode);\n            continue;\n          }\n          if (SAFE_FOR_TEMPLATES) {\n            value = stringReplace(value, MUSTACHE_EXPR$1, ' ');\n            value = stringReplace(value, ERB_EXPR$1, ' ');\n          }\n          var lcTag = transformCaseFunc(currentNode.nodeName);\n          if (!_isValidAttribute(lcTag, lcName, value)) {\n            _removeAttribute(name, currentNode);\n            continue;\n          }\n          if (value !== initValue) {\n            try {\n              if (namespaceURI) {\n                currentNode.setAttributeNS(namespaceURI, name, value);\n              } else {\n                currentNode.setAttribute(name, value);\n              }\n            } catch (_) {\n              _removeAttribute(name, currentNode);\n            }\n          }\n        }\n        _executeHook('afterSanitizeAttributes', currentNode, null);\n      };\n      var _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n        var shadowNode;\n        var shadowIterator = _createIterator(fragment);\n        _executeHook('beforeSanitizeShadowDOM', fragment, null);\n        while (shadowNode = shadowIterator.nextNode()) {\n          _executeHook('uponSanitizeShadowNode', shadowNode, null);\n          if (_sanitizeElements(shadowNode)) {\n            continue;\n          }\n          if (shadowNode.content instanceof DocumentFragment) {\n            _sanitizeShadowDOM(shadowNode.content);\n          }\n          _sanitizeAttributes(shadowNode);\n        }\n        _executeHook('afterSanitizeShadowDOM', fragment, null);\n      };\n      DOMPurify.sanitize = function (dirty, cfg) {\n        var body;\n        var importedNode;\n        var currentNode;\n        var oldNode;\n        var returnNode;\n        IS_EMPTY_INPUT = !dirty;\n        if (IS_EMPTY_INPUT) {\n          dirty = '<!-->';\n        }\n        if (typeof dirty !== 'string' && !_isNode(dirty)) {\n          if (typeof dirty.toString !== 'function') {\n            throw typeErrorCreate('toString is not a function');\n          } else {\n            dirty = dirty.toString();\n            if (typeof dirty !== 'string') {\n              throw typeErrorCreate('dirty is not a string, aborting');\n            }\n          }\n        }\n        if (!DOMPurify.isSupported) {\n          if (_typeof(window.toStaticHTML) === 'object' || typeof window.toStaticHTML === 'function') {\n            if (typeof dirty === 'string') {\n              return window.toStaticHTML(dirty);\n            }\n            if (_isNode(dirty)) {\n              return window.toStaticHTML(dirty.outerHTML);\n            }\n          }\n          return dirty;\n        }\n        if (!SET_CONFIG) {\n          _parseConfig(cfg);\n        }\n        DOMPurify.removed = [];\n        if (typeof dirty === 'string') {\n          IN_PLACE = false;\n        }\n        if (IN_PLACE) {\n          if (dirty.nodeName) {\n            var tagName = transformCaseFunc(dirty.nodeName);\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          body = _initDocument('<!---->');\n          importedNode = body.ownerDocument.importNode(dirty, true);\n          if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n            body = importedNode;\n          } else if (importedNode.nodeName === 'HTML') {\n            body = importedNode;\n          } else {\n            body.appendChild(importedNode);\n          }\n        } else {\n          if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && dirty.indexOf('<') === -1) {\n            return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n          }\n          body = _initDocument(dirty);\n          if (!body) {\n            return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n          }\n        }\n        if (body && FORCE_BODY) {\n          _forceRemove(body.firstChild);\n        }\n        var nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n        while (currentNode = nodeIterator.nextNode()) {\n          if (currentNode.nodeType === 3 && currentNode === oldNode) {\n            continue;\n          }\n          if (_sanitizeElements(currentNode)) {\n            continue;\n          }\n          if (currentNode.content instanceof DocumentFragment) {\n            _sanitizeShadowDOM(currentNode.content);\n          }\n          _sanitizeAttributes(currentNode);\n          oldNode = currentNode;\n        }\n        oldNode = null;\n        if (IN_PLACE) {\n          return dirty;\n        }\n        if (RETURN_DOM) {\n          if (RETURN_DOM_FRAGMENT) {\n            returnNode = createDocumentFragment.call(body.ownerDocument);\n            while (body.firstChild) {\n              returnNode.appendChild(body.firstChild);\n            }\n          } else {\n            returnNode = body;\n          }\n          if (ALLOWED_ATTR.shadowroot) {\n            returnNode = importNode.call(originalDocument, returnNode, true);\n          }\n          return returnNode;\n        }\n        var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\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        if (SAFE_FOR_TEMPLATES) {\n          serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR$1, ' ');\n          serializedHTML = stringReplace(serializedHTML, ERB_EXPR$1, ' ');\n        }\n        return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n      };\n      DOMPurify.setConfig = function (cfg) {\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        if (!CONFIG) {\n          _parseConfig({});\n        }\n        var lcTag = transformCaseFunc(tag);\n        var 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        hooks[entryPoint] = hooks[entryPoint] || [];\n        arrayPush(hooks[entryPoint], hookFunction);\n      };\n      DOMPurify.removeHook = function (entryPoint) {\n        if (hooks[entryPoint]) {\n          return arrayPop(hooks[entryPoint]);\n        }\n      };\n      DOMPurify.removeHooks = function (entryPoint) {\n        if (hooks[entryPoint]) {\n          hooks[entryPoint] = [];\n        }\n      };\n      DOMPurify.removeAllHooks = function () {\n        hooks = {};\n      };\n      return DOMPurify;\n    }\n    var purify = createDOMPurify();\n\n    const each$4 = Tools.each, trim = Tools.trim;\n    const queryParts = [\n      'source',\n      'protocol',\n      'authority',\n      'userInfo',\n      'user',\n      'password',\n      'host',\n      'port',\n      'relative',\n      'path',\n      'directory',\n      'file',\n      'query',\n      'anchor'\n    ];\n    const DEFAULT_PORTS = {\n      ftp: 21,\n      http: 80,\n      https: 443,\n      mailto: 25\n    };\n    const safeSvgDataUrlElements = [\n      'img',\n      'video'\n    ];\n    const blockSvgDataUris = (allowSvgDataUrls, tagName) => {\n      if (isNonNullable(allowSvgDataUrls)) {\n        return !allowSvgDataUrls;\n      } else {\n        return isNonNullable(tagName) ? !contains$2(safeSvgDataUrlElements, tagName) : true;\n      }\n    };\n    const decodeUri = encodedUri => {\n      try {\n        return decodeURIComponent(encodedUri);\n      } catch (ex) {\n        return unescape(encodedUri);\n      }\n    };\n    const isInvalidUri = (settings, uri, tagName) => {\n      const decodedUri = decodeUri(uri).replace(/\\s/g, '');\n      if (settings.allow_script_urls) {\n        return false;\n      } else if (/((java|vb)script|mhtml):/i.test(decodedUri)) {\n        return true;\n      } else if (settings.allow_html_data_urls) {\n        return false;\n      } else if (/^data:image\\//i.test(decodedUri)) {\n        return blockSvgDataUris(settings.allow_svg_data_urls, tagName) && /^data:image\\/svg\\+xml/i.test(decodedUri);\n      } else {\n        return /^data:/i.test(decodedUri);\n      }\n    };\n    class URI {\n      static parseDataUri(uri) {\n        let type;\n        const uriComponents = decodeURIComponent(uri).split(',');\n        const matches = /data:([^;]+)/.exec(uriComponents[0]);\n        if (matches) {\n          type = matches[1];\n        }\n        return {\n          type,\n          data: uriComponents[1]\n        };\n      }\n      static isDomSafe(uri, context, options = {}) {\n        if (options.allow_script_urls) {\n          return true;\n        } else {\n          const decodedUri = Entities.decode(uri).replace(/[\\s\\u0000-\\u001F]+/g, '');\n          return !isInvalidUri(options, decodedUri, context);\n        }\n      }\n      static getDocumentBaseUrl(loc) {\n        var _a;\n        let baseUrl;\n        if (loc.protocol.indexOf('http') !== 0 && loc.protocol !== 'file:') {\n          baseUrl = (_a = loc.href) !== null && _a !== void 0 ? _a : '';\n        } else {\n          baseUrl = loc.protocol + '//' + loc.host + loc.pathname;\n        }\n        if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(baseUrl)) {\n          baseUrl = baseUrl.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n          if (!/[\\/\\\\]$/.test(baseUrl)) {\n            baseUrl += '/';\n          }\n        }\n        return baseUrl;\n      }\n      constructor(url, settings = {}) {\n        this.path = '';\n        this.directory = '';\n        url = trim(url);\n        this.settings = settings;\n        const baseUri = settings.base_uri;\n        const self = this;\n        if (/^([\\w\\-]+):([^\\/]{2})/i.test(url) || /^\\s*#/.test(url)) {\n          self.source = url;\n          return;\n        }\n        const isProtocolRelative = url.indexOf('//') === 0;\n        if (url.indexOf('/') === 0 && !isProtocolRelative) {\n          url = (baseUri ? baseUri.protocol || 'http' : 'http') + '://mce_host' + url;\n        }\n        if (!/^[\\w\\-]*:?\\/\\//.test(url)) {\n          const baseUrl = baseUri ? baseUri.path : new URI(document.location.href).directory;\n          if ((baseUri === null || baseUri === void 0 ? void 0 : baseUri.protocol) === '') {\n            url = '//mce_host' + self.toAbsPath(baseUrl, url);\n          } else {\n            const match = /([^#?]*)([#?]?.*)/.exec(url);\n            if (match) {\n              url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self.toAbsPath(baseUrl, match[1]) + match[2];\n            }\n          }\n        }\n        url = url.replace(/@@/g, '(mce_at)');\n        const urlMatch = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?(\\[[a-zA-Z0-9:.%]+\\]|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(url);\n        if (urlMatch) {\n          each$4(queryParts, (v, i) => {\n            let part = urlMatch[i];\n            if (part) {\n              part = part.replace(/\\(mce_at\\)/g, '@@');\n            }\n            self[v] = part;\n          });\n        }\n        if (baseUri) {\n          if (!self.protocol) {\n            self.protocol = baseUri.protocol;\n          }\n          if (!self.userInfo) {\n            self.userInfo = baseUri.userInfo;\n          }\n          if (!self.port && self.host === 'mce_host') {\n            self.port = baseUri.port;\n          }\n          if (!self.host || self.host === 'mce_host') {\n            self.host = baseUri.host;\n          }\n          self.source = '';\n        }\n        if (isProtocolRelative) {\n          self.protocol = '';\n        }\n      }\n      setPath(path) {\n        const pathMatch = /^(.*?)\\/?(\\w+)?$/.exec(path);\n        if (pathMatch) {\n          this.path = pathMatch[0];\n          this.directory = pathMatch[1];\n          this.file = pathMatch[2];\n        }\n        this.source = '';\n        this.getURI();\n      }\n      toRelative(uri) {\n        if (uri === './') {\n          return uri;\n        }\n        const relativeUri = new URI(uri, { base_uri: this });\n        if (relativeUri.host !== 'mce_host' && this.host !== relativeUri.host && relativeUri.host || this.port !== relativeUri.port || this.protocol !== relativeUri.protocol && relativeUri.protocol !== '') {\n          return relativeUri.getURI();\n        }\n        const tu = this.getURI(), uu = relativeUri.getURI();\n        if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) {\n          return tu;\n        }\n        let output = this.toRelPath(this.path, relativeUri.path);\n        if (relativeUri.query) {\n          output += '?' + relativeUri.query;\n        }\n        if (relativeUri.anchor) {\n          output += '#' + relativeUri.anchor;\n        }\n        return output;\n      }\n      toAbsolute(uri, noHost) {\n        const absoluteUri = new URI(uri, { base_uri: this });\n        return absoluteUri.getURI(noHost && this.isSameOrigin(absoluteUri));\n      }\n      isSameOrigin(uri) {\n        if (this.host == uri.host && this.protocol == uri.protocol) {\n          if (this.port == uri.port) {\n            return true;\n          }\n          const defaultPort = this.protocol ? DEFAULT_PORTS[this.protocol] : null;\n          if (defaultPort && (this.port || defaultPort) == (uri.port || defaultPort)) {\n            return true;\n          }\n        }\n        return false;\n      }\n      toRelPath(base, path) {\n        let breakPoint = 0, out = '', i, l;\n        const normalizedBase = base.substring(0, base.lastIndexOf('/')).split('/');\n        const items = path.split('/');\n        if (normalizedBase.length >= items.length) {\n          for (i = 0, l = normalizedBase.length; i < l; i++) {\n            if (i >= items.length || normalizedBase[i] !== items[i]) {\n              breakPoint = i + 1;\n              break;\n            }\n          }\n        }\n        if (normalizedBase.length < items.length) {\n          for (i = 0, l = items.length; i < l; i++) {\n            if (i >= normalizedBase.length || normalizedBase[i] !== items[i]) {\n              breakPoint = i + 1;\n              break;\n            }\n          }\n        }\n        if (breakPoint === 1) {\n          return path;\n        }\n        for (i = 0, l = normalizedBase.length - (breakPoint - 1); i < l; i++) {\n          out += '../';\n        }\n        for (i = breakPoint - 1, l = items.length; i < l; i++) {\n          if (i !== breakPoint - 1) {\n            out += '/' + items[i];\n          } else {\n            out += items[i];\n          }\n        }\n        return out;\n      }\n      toAbsPath(base, path) {\n        let nb = 0;\n        const tr = /\\/$/.test(path) ? '/' : '';\n        const normalizedBase = base.split('/');\n        const normalizedPath = path.split('/');\n        const baseParts = [];\n        each$4(normalizedBase, k => {\n          if (k) {\n            baseParts.push(k);\n          }\n        });\n        const pathParts = [];\n        for (let i = normalizedPath.length - 1; i >= 0; i--) {\n          if (normalizedPath[i].length === 0 || normalizedPath[i] === '.') {\n            continue;\n          }\n          if (normalizedPath[i] === '..') {\n            nb++;\n            continue;\n          }\n          if (nb > 0) {\n            nb--;\n            continue;\n          }\n          pathParts.push(normalizedPath[i]);\n        }\n        const i = baseParts.length - nb;\n        let outPath;\n        if (i <= 0) {\n          outPath = reverse(pathParts).join('/');\n        } else {\n          outPath = baseParts.slice(0, i).join('/') + '/' + reverse(pathParts).join('/');\n        }\n        if (outPath.indexOf('/') !== 0) {\n          outPath = '/' + outPath;\n        }\n        if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) {\n          outPath += tr;\n        }\n        return outPath;\n      }\n      getURI(noProtoHost = false) {\n        let s;\n        if (!this.source || noProtoHost) {\n          s = '';\n          if (!noProtoHost) {\n            if (this.protocol) {\n              s += this.protocol + '://';\n            } else {\n              s += '//';\n            }\n            if (this.userInfo) {\n              s += this.userInfo + '@';\n            }\n            if (this.host) {\n              s += this.host;\n            }\n            if (this.port) {\n              s += ':' + this.port;\n            }\n          }\n          if (this.path) {\n            s += this.path;\n          }\n          if (this.query) {\n            s += '?' + this.query;\n          }\n          if (this.anchor) {\n            s += '#' + this.anchor;\n          }\n          this.source = s;\n        }\n        return this.source;\n      }\n    }\n\n    const filteredUrlAttrs = Tools.makeMap('src,href,data,background,action,formaction,poster,xlink:href');\n    const internalElementAttr = 'data-mce-type';\n    let uid = 0;\n    const processNode = (node, settings, schema, evt) => {\n      var _a, _b, _c, _d;\n      const validate = settings.validate;\n      const specialElements = schema.getSpecialElements();\n      if (node.nodeType === COMMENT && !settings.allow_conditional_comments && /^\\[if/i.test((_a = node.nodeValue) !== null && _a !== void 0 ? _a : '')) {\n        node.nodeValue = ' ' + node.nodeValue;\n      }\n      const lcTagName = (_b = evt === null || evt === void 0 ? void 0 : evt.tagName) !== null && _b !== void 0 ? _b : node.nodeName.toLowerCase();\n      if (node.nodeType !== ELEMENT || lcTagName === 'body') {\n        return;\n      }\n      const element = SugarElement.fromDom(node);\n      const isInternalElement = has$1(element, internalElementAttr);\n      const bogus = get$9(element, 'data-mce-bogus');\n      if (!isInternalElement && isString(bogus)) {\n        if (bogus === 'all') {\n          remove$5(element);\n        } else {\n          unwrap(element);\n        }\n        return;\n      }\n      const rule = schema.getElementRule(lcTagName);\n      if (validate && !rule) {\n        if (has$2(specialElements, lcTagName)) {\n          remove$5(element);\n        } else {\n          unwrap(element);\n        }\n        return;\n      } else {\n        if (isNonNullable(evt)) {\n          evt.allowedTags[lcTagName] = true;\n        }\n      }\n      if (validate && rule && !isInternalElement) {\n        each$e((_c = rule.attributesForced) !== null && _c !== void 0 ? _c : [], attr => {\n          set$3(element, attr.name, attr.value === '{$uid}' ? `mce_${ uid++ }` : attr.value);\n        });\n        each$e((_d = rule.attributesDefault) !== null && _d !== void 0 ? _d : [], attr => {\n          if (!has$1(element, attr.name)) {\n            set$3(element, attr.name, attr.value === '{$uid}' ? `mce_${ uid++ }` : attr.value);\n          }\n        });\n        if (rule.attributesRequired && !exists(rule.attributesRequired, attr => has$1(element, attr))) {\n          unwrap(element);\n          return;\n        }\n        if (rule.removeEmptyAttrs && hasNone(element)) {\n          unwrap(element);\n          return;\n        }\n        if (rule.outputName && rule.outputName !== lcTagName) {\n          mutate(element, rule.outputName);\n        }\n      }\n    };\n    const shouldKeepAttribute = (settings, schema, tagName, attrName, attrValue) => !(attrName in filteredUrlAttrs && isInvalidUri(settings, attrValue, tagName)) && (!settings.validate || schema.isValid(tagName, attrName) || startsWith(attrName, 'data-') || startsWith(attrName, 'aria-'));\n    const isRequiredAttributeOfInternalElement = (ele, attrName) => ele.hasAttribute(internalElementAttr) && (attrName === 'id' || attrName === 'class' || attrName === 'style');\n    const isBooleanAttribute = (attrName, schema) => attrName in schema.getBoolAttrs();\n    const filterAttributes = (ele, settings, schema) => {\n      const {attributes} = ele;\n      for (let i = attributes.length - 1; i >= 0; i--) {\n        const attr = attributes[i];\n        const attrName = attr.name;\n        const attrValue = attr.value;\n        if (!shouldKeepAttribute(settings, schema, ele.tagName.toLowerCase(), attrName, attrValue) && !isRequiredAttributeOfInternalElement(ele, attrName)) {\n          ele.removeAttribute(attrName);\n        } else if (isBooleanAttribute(attrName, schema)) {\n          ele.setAttribute(attrName, attrName);\n        }\n      }\n    };\n    const setupPurify = (settings, schema) => {\n      const purify$1 = purify();\n      purify$1.addHook('uponSanitizeElement', (ele, evt) => {\n        processNode(ele, settings, schema, evt);\n      });\n      purify$1.addHook('uponSanitizeAttribute', (ele, evt) => {\n        const tagName = ele.tagName.toLowerCase();\n        const {attrName, attrValue} = evt;\n        evt.keepAttr = shouldKeepAttribute(settings, schema, tagName, attrName, attrValue);\n        if (evt.keepAttr) {\n          evt.allowedAttributes[attrName] = true;\n          if (isBooleanAttribute(attrName, schema)) {\n            evt.attrValue = attrName;\n          }\n          if (settings.allow_svg_data_urls && startsWith(attrValue, 'data:image/svg+xml')) {\n            evt.forceKeepAttr = true;\n          }\n        } else if (isRequiredAttributeOfInternalElement(ele, attrName)) {\n          evt.forceKeepAttr = true;\n        }\n      });\n      return purify$1;\n    };\n    const getPurifyConfig = (settings, mimeType) => {\n      const basePurifyConfig = {\n        IN_PLACE: true,\n        ALLOW_UNKNOWN_PROTOCOLS: true,\n        ALLOWED_TAGS: [\n          '#comment',\n          '#cdata-section',\n          'body'\n        ],\n        ALLOWED_ATTR: []\n      };\n      const config = { ...basePurifyConfig };\n      config.PARSER_MEDIA_TYPE = mimeType;\n      if (settings.allow_script_urls) {\n        config.ALLOWED_URI_REGEXP = /.*/;\n      } else if (settings.allow_html_data_urls) {\n        config.ALLOWED_URI_REGEXP = /^(?!(\\w+script|mhtml):)/i;\n      }\n      return config;\n    };\n    const getSanitizer = (settings, schema) => {\n      if (settings.sanitize) {\n        const purify = setupPurify(settings, schema);\n        return (body, mimeType) => {\n          purify.sanitize(body, getPurifyConfig(settings, mimeType));\n          purify.removed = [];\n        };\n      } else {\n        return (body, _) => {\n          const nodeIterator = document.createNodeIterator(body, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT);\n          let node;\n          while (node = nodeIterator.nextNode()) {\n            processNode(node, settings, schema);\n            if (isElement$6(node)) {\n              filterAttributes(node, settings, schema);\n            }\n          }\n        };\n      }\n    };\n\n    const makeMap = Tools.makeMap, extend$1 = Tools.extend;\n    const transferChildren = (parent, nativeParent, specialElements) => {\n      const parentName = parent.name;\n      const isSpecial = parentName in specialElements && parentName !== 'title' && parentName !== 'textarea';\n      const childNodes = nativeParent.childNodes;\n      for (let ni = 0, nl = childNodes.length; ni < nl; ni++) {\n        const nativeChild = childNodes[ni];\n        const child = new AstNode(nativeChild.nodeName.toLowerCase(), nativeChild.nodeType);\n        if (isElement$6(nativeChild)) {\n          const attributes = nativeChild.attributes;\n          for (let ai = 0, al = attributes.length; ai < al; ai++) {\n            const attr = attributes[ai];\n            child.attr(attr.name, attr.value);\n          }\n        } else if (isText$a(nativeChild)) {\n          child.value = nativeChild.data;\n          if (isSpecial) {\n            child.raw = true;\n          }\n        } else if (isComment(nativeChild) || isCData(nativeChild) || isPi(nativeChild)) {\n          child.value = nativeChild.data;\n        }\n        transferChildren(child, nativeChild, specialElements);\n        parent.append(child);\n      }\n    };\n    const walkTree = (root, preprocessors, postprocessors) => {\n      const traverseOrder = [];\n      for (let node = root, lastNode = node; node; lastNode = node, node = node.walk()) {\n        const tempNode = node;\n        each$e(preprocessors, preprocess => preprocess(tempNode));\n        if (isNullable(tempNode.parent) && tempNode !== root) {\n          node = lastNode;\n        } else {\n          traverseOrder.push(tempNode);\n        }\n      }\n      for (let i = traverseOrder.length - 1; i >= 0; i--) {\n        const node = traverseOrder[i];\n        each$e(postprocessors, postprocess => postprocess(node));\n      }\n    };\n    const whitespaceCleaner = (root, schema, settings, args) => {\n      const validate = settings.validate;\n      const nonEmptyElements = schema.getNonEmptyElements();\n      const whitespaceElements = schema.getWhitespaceElements();\n      const blockElements = extend$1(makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n      const textRootBlockElements = getTextRootBlockElements(schema);\n      const allWhiteSpaceRegExp = /[ \\t\\r\\n]+/g;\n      const startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n      const endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n      const hasWhitespaceParent = node => {\n        let tempNode = node.parent;\n        while (isNonNullable(tempNode)) {\n          if (tempNode.name in whitespaceElements) {\n            return true;\n          } else {\n            tempNode = tempNode.parent;\n          }\n        }\n        return false;\n      };\n      const isTextRootBlockEmpty = node => {\n        let tempNode = node;\n        while (isNonNullable(tempNode)) {\n          if (tempNode.name in textRootBlockElements) {\n            return isEmpty(schema, nonEmptyElements, whitespaceElements, tempNode);\n          } else {\n            tempNode = tempNode.parent;\n          }\n        }\n        return false;\n      };\n      const isBlock = node => node.name in blockElements || isTransparentAstBlock(schema, node);\n      const isAtEdgeOfBlock = (node, start) => {\n        const neighbour = start ? node.prev : node.next;\n        if (isNonNullable(neighbour) || isNullable(node.parent)) {\n          return false;\n        }\n        return isBlock(node.parent) && (node.parent !== root || args.isRootContent === true);\n      };\n      const preprocess = node => {\n        var _a;\n        if (node.type === 3) {\n          if (!hasWhitespaceParent(node)) {\n            let text = (_a = node.value) !== null && _a !== void 0 ? _a : '';\n            text = text.replace(allWhiteSpaceRegExp, ' ');\n            if (isLineBreakNode(node.prev, isBlock) || isAtEdgeOfBlock(node, true)) {\n              text = text.replace(startWhiteSpaceRegExp, '');\n            }\n            if (text.length === 0) {\n              node.remove();\n            } else {\n              node.value = text;\n            }\n          }\n        }\n      };\n      const postprocess = node => {\n        var _a;\n        if (node.type === 1) {\n          const elementRule = schema.getElementRule(node.name);\n          if (validate && elementRule) {\n            const isNodeEmpty = isEmpty(schema, nonEmptyElements, whitespaceElements, node);\n            if (elementRule.paddInEmptyBlock && isNodeEmpty && isTextRootBlockEmpty(node)) {\n              paddEmptyNode(args, isBlock, node);\n            } else if (elementRule.removeEmpty && isNodeEmpty) {\n              if (isBlock(node)) {\n                node.remove();\n              } else {\n                node.unwrap();\n              }\n            } else if (elementRule.paddEmpty && (isNodeEmpty || isPaddedWithNbsp(node))) {\n              paddEmptyNode(args, isBlock, node);\n            }\n          }\n        } else if (node.type === 3) {\n          if (!hasWhitespaceParent(node)) {\n            let text = (_a = node.value) !== null && _a !== void 0 ? _a : '';\n            if (node.next && isBlock(node.next) || isAtEdgeOfBlock(node, false)) {\n              text = text.replace(endWhiteSpaceRegExp, '');\n            }\n            if (text.length === 0) {\n              node.remove();\n            } else {\n              node.value = text;\n            }\n          }\n        }\n      };\n      return [\n        preprocess,\n        postprocess\n      ];\n    };\n    const getRootBlockName = (settings, args) => {\n      var _a;\n      const name = (_a = args.forced_root_block) !== null && _a !== void 0 ? _a : settings.forced_root_block;\n      if (name === false) {\n        return '';\n      } else if (name === true) {\n        return 'p';\n      } else {\n        return name;\n      }\n    };\n    const DomParser = (settings = {}, schema = Schema()) => {\n      const nodeFilterRegistry = create$8();\n      const attributeFilterRegistry = create$8();\n      const defaultedSettings = {\n        validate: true,\n        root_name: 'body',\n        sanitize: true,\n        ...settings\n      };\n      const parser = new DOMParser();\n      const sanitize = getSanitizer(defaultedSettings, schema);\n      const parseAndSanitizeWithContext = (html, rootName, format = 'html') => {\n        const mimeType = format === 'xhtml' ? 'application/xhtml+xml' : 'text/html';\n        const isSpecialRoot = has$2(schema.getSpecialElements(), rootName.toLowerCase());\n        const content = isSpecialRoot ? `<${ rootName }>${ html }</${ rootName }>` : html;\n        const wrappedHtml = format === 'xhtml' ? `<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>${ content }</body></html>` : `<body>${ content }</body>`;\n        const body = parser.parseFromString(wrappedHtml, mimeType).body;\n        sanitize(body, mimeType);\n        return isSpecialRoot ? body.firstChild : body;\n      };\n      const addNodeFilter = nodeFilterRegistry.addFilter;\n      const getNodeFilters = nodeFilterRegistry.getFilters;\n      const removeNodeFilter = nodeFilterRegistry.removeFilter;\n      const addAttributeFilter = attributeFilterRegistry.addFilter;\n      const getAttributeFilters = attributeFilterRegistry.getFilters;\n      const removeAttributeFilter = attributeFilterRegistry.removeFilter;\n      const findInvalidChildren = (node, invalidChildren) => {\n        if (isInvalid(schema, node)) {\n          invalidChildren.push(node);\n        }\n      };\n      const isWrappableNode = (blockElements, node) => {\n        const isInternalElement = isString(node.attr(internalElementAttr));\n        const isInlineElement = node.type === 1 && (!has$2(blockElements, node.name) && !isTransparentAstBlock(schema, node));\n        return node.type === 3 || isInlineElement && !isInternalElement;\n      };\n      const addRootBlocks = (rootNode, rootBlockName) => {\n        const blockElements = extend$1(makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n        const startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n        const endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n        let node = rootNode.firstChild, rootBlockNode = null;\n        const trim = rootBlock => {\n          var _a, _b;\n          if (rootBlock) {\n            node = rootBlock.firstChild;\n            if (node && node.type === 3) {\n              node.value = (_a = node.value) === null || _a === void 0 ? void 0 : _a.replace(startWhiteSpaceRegExp, '');\n            }\n            node = rootBlock.lastChild;\n            if (node && node.type === 3) {\n              node.value = (_b = node.value) === null || _b === void 0 ? void 0 : _b.replace(endWhiteSpaceRegExp, '');\n            }\n          }\n        };\n        if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) {\n          return;\n        }\n        while (node) {\n          const next = node.next;\n          if (isWrappableNode(blockElements, node)) {\n            if (!rootBlockNode) {\n              rootBlockNode = new AstNode(rootBlockName, 1);\n              rootBlockNode.attr(defaultedSettings.forced_root_block_attrs);\n              rootNode.insert(rootBlockNode, node);\n              rootBlockNode.append(node);\n            } else {\n              rootBlockNode.append(node);\n            }\n          } else {\n            trim(rootBlockNode);\n            rootBlockNode = null;\n          }\n          node = next;\n        }\n        trim(rootBlockNode);\n      };\n      const parse = (html, args = {}) => {\n        var _a;\n        const validate = defaultedSettings.validate;\n        const rootName = (_a = args.context) !== null && _a !== void 0 ? _a : defaultedSettings.root_name;\n        const element = parseAndSanitizeWithContext(html, rootName, args.format);\n        updateChildren(schema, element);\n        const rootNode = new AstNode(rootName, 11);\n        transferChildren(rootNode, element, schema.getSpecialElements());\n        element.innerHTML = '';\n        const [whitespacePre, whitespacePost] = whitespaceCleaner(rootNode, schema, defaultedSettings, args);\n        const invalidChildren = [];\n        const invalidFinder = validate ? node => findInvalidChildren(node, invalidChildren) : noop;\n        const matches = {\n          nodes: {},\n          attributes: {}\n        };\n        const matchFinder = node => matchNode$1(getNodeFilters(), getAttributeFilters(), node, matches);\n        walkTree(rootNode, [\n          whitespacePre,\n          matchFinder\n        ], [\n          whitespacePost,\n          invalidFinder\n        ]);\n        invalidChildren.reverse();\n        if (validate && invalidChildren.length > 0) {\n          if (args.context) {\n            const {\n              pass: topLevelChildren,\n              fail: otherChildren\n            } = partition$2(invalidChildren, child => child.parent === rootNode);\n            cleanInvalidNodes(otherChildren, schema, rootNode, matchFinder);\n            args.invalid = topLevelChildren.length > 0;\n          } else {\n            cleanInvalidNodes(invalidChildren, schema, rootNode, matchFinder);\n          }\n        }\n        const rootBlockName = getRootBlockName(defaultedSettings, args);\n        if (rootBlockName && (rootNode.name === 'body' || args.isRootContent)) {\n          addRootBlocks(rootNode, rootBlockName);\n        }\n        if (!args.invalid) {\n          runFilters(matches, args);\n        }\n        return rootNode;\n      };\n      const exports = {\n        schema,\n        addAttributeFilter,\n        getAttributeFilters,\n        removeAttributeFilter,\n        addNodeFilter,\n        getNodeFilters,\n        removeNodeFilter,\n        parse\n      };\n      register$4(exports, defaultedSettings);\n      register$5(exports, defaultedSettings, schema);\n      return exports;\n    };\n\n    const serializeContent = content => isTreeNode(content) ? HtmlSerializer({ validate: false }).serialize(content) : content;\n    const withSerializedContent = (content, fireEvent, sanitize) => {\n      const serializedContent = serializeContent(content);\n      const eventArgs = fireEvent(serializedContent);\n      if (eventArgs.isDefaultPrevented()) {\n        return eventArgs;\n      } else if (isTreeNode(content)) {\n        if (eventArgs.content !== serializedContent) {\n          const rootNode = DomParser({\n            validate: false,\n            forced_root_block: false,\n            sanitize\n          }).parse(eventArgs.content, { context: content.name });\n          return {\n            ...eventArgs,\n            content: rootNode\n          };\n        } else {\n          return {\n            ...eventArgs,\n            content\n          };\n        }\n      } else {\n        return eventArgs;\n      }\n    };\n    const preProcessGetContent = (editor, args) => {\n      if (args.no_events) {\n        return Result.value(args);\n      } else {\n        const eventArgs = fireBeforeGetContent(editor, args);\n        if (eventArgs.isDefaultPrevented()) {\n          return Result.error(fireGetContent(editor, {\n            content: '',\n            ...eventArgs\n          }).content);\n        } else {\n          return Result.value(eventArgs);\n        }\n      }\n    };\n    const postProcessGetContent = (editor, content, args) => {\n      if (args.no_events) {\n        return content;\n      } else {\n        const processedEventArgs = withSerializedContent(content, content => fireGetContent(editor, {\n          ...args,\n          content\n        }), shouldSanitizeXss(editor));\n        return processedEventArgs.content;\n      }\n    };\n    const preProcessSetContent = (editor, args) => {\n      if (args.no_events) {\n        return Result.value(args);\n      } else {\n        const processedEventArgs = withSerializedContent(args.content, content => fireBeforeSetContent(editor, {\n          ...args,\n          content\n        }), shouldSanitizeXss(editor));\n        if (processedEventArgs.isDefaultPrevented()) {\n          fireSetContent(editor, processedEventArgs);\n          return Result.error(undefined);\n        } else {\n          return Result.value(processedEventArgs);\n        }\n      }\n    };\n    const postProcessSetContent = (editor, content, args) => {\n      if (!args.no_events) {\n        fireSetContent(editor, {\n          ...args,\n          content\n        });\n      }\n    };\n\n    const tableModel = (element, width, rows) => ({\n      element,\n      width,\n      rows\n    });\n    const tableRow = (element, cells) => ({\n      element,\n      cells\n    });\n    const cellPosition = (x, y) => ({\n      x,\n      y\n    });\n    const getSpan = (td, key) => {\n      return getOpt(td, key).bind(toInt).getOr(1);\n    };\n    const fillout = (table, x, y, tr, td) => {\n      const rowspan = getSpan(td, 'rowspan');\n      const colspan = getSpan(td, 'colspan');\n      const rows = table.rows;\n      for (let y2 = y; y2 < y + rowspan; y2++) {\n        if (!rows[y2]) {\n          rows[y2] = tableRow(deep$1(tr), []);\n        }\n        for (let x2 = x; x2 < x + colspan; x2++) {\n          const cells = rows[y2].cells;\n          cells[x2] = y2 === y && x2 === x ? td : shallow$1(td);\n        }\n      }\n    };\n    const cellExists = (table, x, y) => {\n      const rows = table.rows;\n      const cells = rows[y] ? rows[y].cells : [];\n      return !!cells[x];\n    };\n    const skipCellsX = (table, x, y) => {\n      while (cellExists(table, x, y)) {\n        x++;\n      }\n      return x;\n    };\n    const getWidth = rows => {\n      return foldl(rows, (acc, row) => {\n        return row.cells.length > acc ? row.cells.length : acc;\n      }, 0);\n    };\n    const findElementPos = (table, element) => {\n      const rows = table.rows;\n      for (let y = 0; y < rows.length; y++) {\n        const cells = rows[y].cells;\n        for (let x = 0; x < cells.length; x++) {\n          if (eq(cells[x], element)) {\n            return Optional.some(cellPosition(x, y));\n          }\n        }\n      }\n      return Optional.none();\n    };\n    const extractRows = (table, sx, sy, ex, ey) => {\n      const newRows = [];\n      const rows = table.rows;\n      for (let y = sy; y <= ey; y++) {\n        const cells = rows[y].cells;\n        const slice = sx < ex ? cells.slice(sx, ex + 1) : cells.slice(ex, sx + 1);\n        newRows.push(tableRow(rows[y].element, slice));\n      }\n      return newRows;\n    };\n    const subTable = (table, startPos, endPos) => {\n      const sx = startPos.x, sy = startPos.y;\n      const ex = endPos.x, ey = endPos.y;\n      const newRows = sy < ey ? extractRows(table, sx, sy, ex, ey) : extractRows(table, sx, ey, ex, sy);\n      return tableModel(table.element, getWidth(newRows), newRows);\n    };\n    const createDomTable = (table, rows) => {\n      const tableElement = shallow$1(table.element);\n      const tableBody = SugarElement.fromTag('tbody');\n      append(tableBody, rows);\n      append$1(tableElement, tableBody);\n      return tableElement;\n    };\n    const modelRowsToDomRows = table => {\n      return map$3(table.rows, row => {\n        const cells = map$3(row.cells, cell => {\n          const td = deep$1(cell);\n          remove$a(td, 'colspan');\n          remove$a(td, 'rowspan');\n          return td;\n        });\n        const tr = shallow$1(row.element);\n        append(tr, cells);\n        return tr;\n      });\n    };\n    const fromDom = tableElm => {\n      const table = tableModel(shallow$1(tableElm), 0, []);\n      each$e(descendants(tableElm, 'tr'), (tr, y) => {\n        each$e(descendants(tr, 'td,th'), (td, x) => {\n          fillout(table, skipCellsX(table, x, y), y, tr, td);\n        });\n      });\n      return tableModel(table.element, getWidth(table.rows), table.rows);\n    };\n    const toDom = table => {\n      return createDomTable(table, modelRowsToDomRows(table));\n    };\n    const subsection = (table, startElement, endElement) => {\n      return findElementPos(table, startElement).bind(startPos => {\n        return findElementPos(table, endElement).map(endPos => {\n          return subTable(table, startPos, endPos);\n        });\n      });\n    };\n\n    const findParentListContainer = parents => find$2(parents, elm => name(elm) === 'ul' || name(elm) === 'ol');\n    const getFullySelectedListWrappers = (parents, rng) => find$2(parents, elm => name(elm) === 'li' && hasAllContentsSelected(elm, rng)).fold(constant([]), _li => findParentListContainer(parents).map(listCont => {\n      const listElm = SugarElement.fromTag(name(listCont));\n      const listStyles = filter$4(getAllRaw(listCont), (_style, name) => startsWith(name, 'list-style'));\n      setAll(listElm, listStyles);\n      return [\n        SugarElement.fromTag('li'),\n        listElm\n      ];\n    }).getOr([]));\n    const wrap = (innerElm, elms) => {\n      const wrapped = foldl(elms, (acc, elm) => {\n        append$1(elm, acc);\n        return elm;\n      }, innerElm);\n      return elms.length > 0 ? fromElements([wrapped]) : wrapped;\n    };\n    const directListWrappers = commonAnchorContainer => {\n      if (isListItem$1(commonAnchorContainer)) {\n        return parent(commonAnchorContainer).filter(isList).fold(constant([]), listElm => [\n          commonAnchorContainer,\n          listElm\n        ]);\n      } else {\n        return isList(commonAnchorContainer) ? [commonAnchorContainer] : [];\n      }\n    };\n    const getWrapElements = (rootNode, rng) => {\n      const commonAnchorContainer = SugarElement.fromDom(rng.commonAncestorContainer);\n      const parents = parentsAndSelf(commonAnchorContainer, rootNode);\n      const wrapElements = filter$5(parents, isWrapElement);\n      const listWrappers = getFullySelectedListWrappers(parents, rng);\n      const allWrappers = wrapElements.concat(listWrappers.length ? listWrappers : directListWrappers(commonAnchorContainer));\n      return map$3(allWrappers, shallow$1);\n    };\n    const emptyFragment = () => fromElements([]);\n    const getFragmentFromRange = (rootNode, rng) => wrap(SugarElement.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng));\n    const getParentTable = (rootElm, cell) => ancestor$3(cell, 'table', curry(eq, rootElm));\n    const getTableFragment = (rootNode, selectedTableCells) => getParentTable(rootNode, selectedTableCells[0]).bind(tableElm => {\n      const firstCell = selectedTableCells[0];\n      const lastCell = selectedTableCells[selectedTableCells.length - 1];\n      const fullTableModel = fromDom(tableElm);\n      return subsection(fullTableModel, firstCell, lastCell).map(sectionedTableModel => fromElements([toDom(sectionedTableModel)]));\n    }).getOrThunk(emptyFragment);\n    const getSelectionFragment = (rootNode, ranges) => ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]);\n    const read$3 = (rootNode, ranges) => {\n      const selectedCells = getCellsFromElementOrRanges(ranges, rootNode);\n      return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges);\n    };\n\n    const isCollapsibleWhitespace = (text, index) => index >= 0 && index < text.length && isWhiteSpace(text.charAt(index));\n    const getInnerText = bin => {\n      return trim$1(bin.innerText);\n    };\n    const getContextNodeName = parentBlockOpt => parentBlockOpt.map(block => block.nodeName).getOr('div').toLowerCase();\n    const getTextContent = editor => Optional.from(editor.selection.getRng()).map(rng => {\n      var _a;\n      const parentBlockOpt = Optional.from(editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock));\n      const body = editor.getBody();\n      const contextNodeName = getContextNodeName(parentBlockOpt);\n      const rangeContentClone = SugarElement.fromDom(rng.cloneContents());\n      cleanupBogusElements(rangeContentClone);\n      cleanupInputNames(rangeContentClone);\n      const bin = editor.dom.add(body, contextNodeName, {\n        'data-mce-bogus': 'all',\n        'style': 'overflow: hidden; opacity: 0;'\n      }, rangeContentClone.dom);\n      const text = getInnerText(bin);\n      const nonRenderedText = trim$1((_a = bin.textContent) !== null && _a !== void 0 ? _a : '');\n      editor.dom.remove(bin);\n      if (isCollapsibleWhitespace(nonRenderedText, 0) || isCollapsibleWhitespace(nonRenderedText, nonRenderedText.length - 1)) {\n        const parentBlock = parentBlockOpt.getOr(body);\n        const parentBlockText = getInnerText(parentBlock);\n        const textIndex = parentBlockText.indexOf(text);\n        if (textIndex === -1) {\n          return text;\n        } else {\n          const hasProceedingSpace = isCollapsibleWhitespace(parentBlockText, textIndex - 1);\n          const hasTrailingSpace = isCollapsibleWhitespace(parentBlockText, textIndex + text.length);\n          return (hasProceedingSpace ? ' ' : '') + text + (hasTrailingSpace ? ' ' : '');\n        }\n      } else {\n        return text;\n      }\n    }).getOr('');\n    const getSerializedContent = (editor, args) => {\n      const rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');\n      const sel = editor.selection.getSel();\n      const ranges = processRanges(editor, getRanges$1(sel));\n      const fragment = args.contextual ? read$3(SugarElement.fromDom(editor.getBody()), ranges).dom : rng.cloneContents();\n      if (fragment) {\n        tmpElm.appendChild(fragment);\n      }\n      return editor.selection.serializer.serialize(tmpElm, args);\n    };\n    const extractSelectedContent = (editor, args) => {\n      if (args.format === 'text') {\n        return getTextContent(editor);\n      } else {\n        const content = getSerializedContent(editor, args);\n        if (args.format === 'tree') {\n          return content;\n        } else {\n          return editor.selection.isCollapsed() ? '' : content;\n        }\n      }\n    };\n    const setupArgs$3 = (args, format) => ({\n      ...args,\n      format,\n      get: true,\n      selection: true,\n      getInner: true\n    });\n    const getSelectedContentInternal = (editor, format, args = {}) => {\n      const defaultedArgs = setupArgs$3(args, format);\n      return preProcessGetContent(editor, defaultedArgs).fold(identity, updatedArgs => {\n        const content = extractSelectedContent(editor, updatedArgs);\n        return postProcessGetContent(editor, content, updatedArgs);\n      });\n    };\n\n    const KEEP = 0, INSERT = 1, DELETE = 2;\n    const diff = (left, right) => {\n      const size = left.length + right.length + 2;\n      const vDown = new Array(size);\n      const vUp = new Array(size);\n      const snake = (start, end, diag) => {\n        return {\n          start,\n          end,\n          diag\n        };\n      };\n      const buildScript = (start1, end1, start2, end2, script) => {\n        const middle = getMiddleSnake(start1, end1, start2, end2);\n        if (middle === null || middle.start === end1 && middle.diag === end1 - end2 || middle.end === start1 && middle.diag === start1 - start2) {\n          let i = start1;\n          let j = start2;\n          while (i < end1 || j < end2) {\n            if (i < end1 && j < end2 && left[i] === right[j]) {\n              script.push([\n                KEEP,\n                left[i]\n              ]);\n              ++i;\n              ++j;\n            } else {\n              if (end1 - start1 > end2 - start2) {\n                script.push([\n                  DELETE,\n                  left[i]\n                ]);\n                ++i;\n              } else {\n                script.push([\n                  INSERT,\n                  right[j]\n                ]);\n                ++j;\n              }\n            }\n          }\n        } else {\n          buildScript(start1, middle.start, start2, middle.start - middle.diag, script);\n          for (let i2 = middle.start; i2 < middle.end; ++i2) {\n            script.push([\n              KEEP,\n              left[i2]\n            ]);\n          }\n          buildScript(middle.end, end1, middle.end - middle.diag, end2, script);\n        }\n      };\n      const buildSnake = (start, diag, end1, end2) => {\n        let end = start;\n        while (end - diag < end2 && end < end1 && left[end] === right[end - diag]) {\n          ++end;\n        }\n        return snake(start, end, diag);\n      };\n      const getMiddleSnake = (start1, end1, start2, end2) => {\n        const m = end1 - start1;\n        const n = end2 - start2;\n        if (m === 0 || n === 0) {\n          return null;\n        }\n        const delta = m - n;\n        const sum = n + m;\n        const offset = (sum % 2 === 0 ? sum : sum + 1) / 2;\n        vDown[1 + offset] = start1;\n        vUp[1 + offset] = end1 + 1;\n        let d, k, i, x, y;\n        for (d = 0; d <= offset; ++d) {\n          for (k = -d; k <= d; k += 2) {\n            i = k + offset;\n            if (k === -d || k !== d && vDown[i - 1] < vDown[i + 1]) {\n              vDown[i] = vDown[i + 1];\n            } else {\n              vDown[i] = vDown[i - 1] + 1;\n            }\n            x = vDown[i];\n            y = x - start1 + start2 - k;\n            while (x < end1 && y < end2 && left[x] === right[y]) {\n              vDown[i] = ++x;\n              ++y;\n            }\n            if (delta % 2 !== 0 && delta - d <= k && k <= delta + d) {\n              if (vUp[i - delta] <= vDown[i]) {\n                return buildSnake(vUp[i - delta], k + start1 - start2, end1, end2);\n              }\n            }\n          }\n          for (k = delta - d; k <= delta + d; k += 2) {\n            i = k + offset - delta;\n            if (k === delta - d || k !== delta + d && vUp[i + 1] <= vUp[i - 1]) {\n              vUp[i] = vUp[i + 1] - 1;\n            } else {\n              vUp[i] = vUp[i - 1];\n            }\n            x = vUp[i] - 1;\n            y = x - start1 + start2 - k;\n            while (x >= start1 && y >= start2 && left[x] === right[y]) {\n              vUp[i] = x--;\n              y--;\n            }\n            if (delta % 2 === 0 && -d <= k && k <= d) {\n              if (vUp[i] <= vDown[i + delta]) {\n                return buildSnake(vUp[i], k + start1 - start2, end1, end2);\n              }\n            }\n          }\n        }\n        return null;\n      };\n      const script = [];\n      buildScript(0, left.length, 0, right.length, script);\n      return script;\n    };\n\n    const getOuterHtml = elm => {\n      if (isElement$6(elm)) {\n        return elm.outerHTML;\n      } else if (isText$a(elm)) {\n        return Entities.encodeRaw(elm.data, false);\n      } else if (isComment(elm)) {\n        return '<!--' + elm.data + '-->';\n      }\n      return '';\n    };\n    const createFragment = html => {\n      let node;\n      const container = document.createElement('div');\n      const frag = document.createDocumentFragment();\n      if (html) {\n        container.innerHTML = html;\n      }\n      while (node = container.firstChild) {\n        frag.appendChild(node);\n      }\n      return frag;\n    };\n    const insertAt = (elm, html, index) => {\n      const fragment = createFragment(html);\n      if (elm.hasChildNodes() && index < elm.childNodes.length) {\n        const target = elm.childNodes[index];\n        elm.insertBefore(fragment, target);\n      } else {\n        elm.appendChild(fragment);\n      }\n    };\n    const removeAt = (elm, index) => {\n      if (elm.hasChildNodes() && index < elm.childNodes.length) {\n        const target = elm.childNodes[index];\n        elm.removeChild(target);\n      }\n    };\n    const applyDiff = (diff, elm) => {\n      let index = 0;\n      each$e(diff, action => {\n        if (action[0] === KEEP) {\n          index++;\n        } else if (action[0] === INSERT) {\n          insertAt(elm, action[1], index);\n          index++;\n        } else if (action[0] === DELETE) {\n          removeAt(elm, index);\n        }\n      });\n    };\n    const read$2 = elm => {\n      return filter$5(map$3(from(elm.childNodes), getOuterHtml), item => {\n        return item.length > 0;\n      });\n    };\n    const write = (fragments, elm) => {\n      const currentFragments = map$3(from(elm.childNodes), getOuterHtml);\n      applyDiff(diff(currentFragments, fragments), elm);\n      return elm;\n    };\n\n    const lazyTempDocument = cached(() => document.implementation.createHTMLDocument('undo'));\n    const hasIframes = html => {\n      return html.indexOf('</iframe>') !== -1;\n    };\n    const createFragmentedLevel = fragments => {\n      return {\n        type: 'fragmented',\n        fragments,\n        content: '',\n        bookmark: null,\n        beforeBookmark: null\n      };\n    };\n    const createCompleteLevel = content => {\n      return {\n        type: 'complete',\n        fragments: null,\n        content,\n        bookmark: null,\n        beforeBookmark: null\n      };\n    };\n    const createFromEditor = editor => {\n      const fragments = read$2(editor.getBody());\n      const trimmedFragments = bind$3(fragments, html => {\n        const trimmed = trimInternal(editor.serializer, html);\n        return trimmed.length > 0 ? [trimmed] : [];\n      });\n      const content = trimmedFragments.join('');\n      return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content);\n    };\n    const applyToEditor = (editor, level, before) => {\n      const bookmark = before ? level.beforeBookmark : level.bookmark;\n      if (level.type === 'fragmented') {\n        write(level.fragments, editor.getBody());\n      } else {\n        editor.setContent(level.content, {\n          format: 'raw',\n          no_selection: isNonNullable(bookmark) && isPathBookmark(bookmark) ? !bookmark.isFakeCaret : true\n        });\n      }\n      if (bookmark) {\n        editor.selection.moveToBookmark(bookmark);\n        editor.selection.scrollIntoView();\n      }\n    };\n    const getLevelContent = level => {\n      return level.type === 'fragmented' ? level.fragments.join('') : level.content;\n    };\n    const getCleanLevelContent = level => {\n      const elm = SugarElement.fromTag('body', lazyTempDocument());\n      set$1(elm, getLevelContent(level));\n      each$e(descendants(elm, '*[data-mce-bogus]'), unwrap);\n      return get$6(elm);\n    };\n    const hasEqualContent = (level1, level2) => getLevelContent(level1) === getLevelContent(level2);\n    const hasEqualCleanedContent = (level1, level2) => getCleanLevelContent(level1) === getCleanLevelContent(level2);\n    const isEq$1 = (level1, level2) => {\n      if (!level1 || !level2) {\n        return false;\n      } else if (hasEqualContent(level1, level2)) {\n        return true;\n      } else {\n        return hasEqualCleanedContent(level1, level2);\n      }\n    };\n\n    const isUnlocked = locks => locks.get() === 0;\n\n    const setTyping = (undoManager, typing, locks) => {\n      if (isUnlocked(locks)) {\n        undoManager.typing = typing;\n      }\n    };\n    const endTyping = (undoManager, locks) => {\n      if (undoManager.typing) {\n        setTyping(undoManager, false, locks);\n        undoManager.add();\n      }\n    };\n    const endTypingLevelIgnoreLocks = undoManager => {\n      if (undoManager.typing) {\n        undoManager.typing = false;\n        undoManager.add();\n      }\n    };\n\n    const beforeChange$1 = (editor, locks, beforeBookmark) => {\n      if (isUnlocked(locks)) {\n        beforeBookmark.set(getUndoBookmark(editor.selection));\n      }\n    };\n    const addUndoLevel$1 = (editor, undoManager, index, locks, beforeBookmark, level, event) => {\n      const currentLevel = createFromEditor(editor);\n      const newLevel = Tools.extend(level || {}, currentLevel);\n      if (!isUnlocked(locks) || editor.removed) {\n        return null;\n      }\n      const lastLevel = undoManager.data[index.get()];\n      if (editor.dispatch('BeforeAddUndo', {\n          level: newLevel,\n          lastLevel,\n          originalEvent: event\n        }).isDefaultPrevented()) {\n        return null;\n      }\n      if (lastLevel && isEq$1(lastLevel, newLevel)) {\n        return null;\n      }\n      if (undoManager.data[index.get()]) {\n        beforeBookmark.get().each(bm => {\n          undoManager.data[index.get()].beforeBookmark = bm;\n        });\n      }\n      const customUndoRedoLevels = getCustomUndoRedoLevels(editor);\n      if (customUndoRedoLevels) {\n        if (undoManager.data.length > customUndoRedoLevels) {\n          for (let i = 0; i < undoManager.data.length - 1; i++) {\n            undoManager.data[i] = undoManager.data[i + 1];\n          }\n          undoManager.data.length--;\n          index.set(undoManager.data.length);\n        }\n      }\n      newLevel.bookmark = getUndoBookmark(editor.selection);\n      if (index.get() < undoManager.data.length - 1) {\n        undoManager.data.length = index.get() + 1;\n      }\n      undoManager.data.push(newLevel);\n      index.set(undoManager.data.length - 1);\n      const args = {\n        level: newLevel,\n        lastLevel,\n        originalEvent: event\n      };\n      if (index.get() > 0) {\n        editor.setDirty(true);\n        editor.dispatch('AddUndo', args);\n        editor.dispatch('change', args);\n      } else {\n        editor.dispatch('AddUndo', args);\n      }\n      return newLevel;\n    };\n    const clear$1 = (editor, undoManager, index) => {\n      undoManager.data = [];\n      index.set(0);\n      undoManager.typing = false;\n      editor.dispatch('ClearUndos');\n    };\n    const extra$1 = (editor, undoManager, index, callback1, callback2) => {\n      if (undoManager.transact(callback1)) {\n        const bookmark = undoManager.data[index.get()].bookmark;\n        const lastLevel = undoManager.data[index.get() - 1];\n        applyToEditor(editor, lastLevel, true);\n        if (undoManager.transact(callback2)) {\n          undoManager.data[index.get() - 1].beforeBookmark = bookmark;\n        }\n      }\n    };\n    const redo$1 = (editor, index, data) => {\n      let level;\n      if (index.get() < data.length - 1) {\n        index.set(index.get() + 1);\n        level = data[index.get()];\n        applyToEditor(editor, level, false);\n        editor.setDirty(true);\n        editor.dispatch('Redo', { level });\n      }\n      return level;\n    };\n    const undo$1 = (editor, undoManager, locks, index) => {\n      let level;\n      if (undoManager.typing) {\n        undoManager.add();\n        undoManager.typing = false;\n        setTyping(undoManager, false, locks);\n      }\n      if (index.get() > 0) {\n        index.set(index.get() - 1);\n        level = undoManager.data[index.get()];\n        applyToEditor(editor, level, true);\n        editor.setDirty(true);\n        editor.dispatch('Undo', { level });\n      }\n      return level;\n    };\n    const reset$1 = undoManager => {\n      undoManager.clear();\n      undoManager.add();\n    };\n    const hasUndo$1 = (editor, undoManager, index) => index.get() > 0 || undoManager.typing && undoManager.data[0] && !isEq$1(createFromEditor(editor), undoManager.data[0]);\n    const hasRedo$1 = (undoManager, index) => index.get() < undoManager.data.length - 1 && !undoManager.typing;\n    const transact$1 = (undoManager, locks, callback) => {\n      endTyping(undoManager, locks);\n      undoManager.beforeChange();\n      undoManager.ignore(callback);\n      return undoManager.add();\n    };\n    const ignore$1 = (locks, callback) => {\n      try {\n        locks.set(locks.get() + 1);\n        callback();\n      } finally {\n        locks.set(locks.get() - 1);\n      }\n    };\n\n    const addVisualInternal = (editor, elm) => {\n      const dom = editor.dom;\n      const scope = isNonNullable(elm) ? elm : editor.getBody();\n      each$e(dom.select('table,a', scope), matchedElm => {\n        switch (matchedElm.nodeName) {\n        case 'TABLE':\n          const cls = getVisualAidsTableClass(editor);\n          const value = dom.getAttrib(matchedElm, 'border');\n          if ((!value || value === '0') && editor.hasVisual) {\n            dom.addClass(matchedElm, cls);\n          } else {\n            dom.removeClass(matchedElm, cls);\n          }\n          break;\n        case 'A':\n          if (!dom.getAttrib(matchedElm, 'href')) {\n            const value = dom.getAttrib(matchedElm, 'name') || matchedElm.id;\n            const cls = getVisualAidsAnchorClass(editor);\n            if (value && editor.hasVisual) {\n              dom.addClass(matchedElm, cls);\n            } else {\n              dom.removeClass(matchedElm, cls);\n            }\n          }\n          break;\n        }\n      });\n      editor.dispatch('VisualAid', {\n        element: elm,\n        hasVisual: editor.hasVisual\n      });\n    };\n\n    const makePlainAdaptor = editor => ({\n      init: { bindEvents: noop },\n      undoManager: {\n        beforeChange: (locks, beforeBookmark) => beforeChange$1(editor, locks, beforeBookmark),\n        add: (undoManager, index, locks, beforeBookmark, level, event) => addUndoLevel$1(editor, undoManager, index, locks, beforeBookmark, level, event),\n        undo: (undoManager, locks, index) => undo$1(editor, undoManager, locks, index),\n        redo: (index, data) => redo$1(editor, index, data),\n        clear: (undoManager, index) => clear$1(editor, undoManager, index),\n        reset: undoManager => reset$1(undoManager),\n        hasUndo: (undoManager, index) => hasUndo$1(editor, undoManager, index),\n        hasRedo: (undoManager, index) => hasRedo$1(undoManager, index),\n        transact: (undoManager, locks, callback) => transact$1(undoManager, locks, callback),\n        ignore: (locks, callback) => ignore$1(locks, callback),\n        extra: (undoManager, index, callback1, callback2) => extra$1(editor, undoManager, index, callback1, callback2)\n      },\n      formatter: {\n        match: (name, vars, node, similar) => match$2(editor, name, vars, node, similar),\n        matchAll: (names, vars) => matchAll(editor, names, vars),\n        matchNode: (node, name, vars, similar) => matchNode(editor, node, name, vars, similar),\n        canApply: name => canApply(editor, name),\n        closest: names => closest(editor, names),\n        apply: (name, vars, node) => applyFormat$1(editor, name, vars, node),\n        remove: (name, vars, node, similar) => removeFormat$1(editor, name, vars, node, similar),\n        toggle: (name, vars, node) => toggle(editor, name, vars, node),\n        formatChanged: (registeredFormatListeners, formats, callback, similar, vars) => formatChangedInternal(editor, registeredFormatListeners, formats, callback, similar, vars)\n      },\n      editor: {\n        getContent: args => getContentInternal(editor, args),\n        setContent: (content, args) => setContentInternal(editor, content, args),\n        insertContent: (value, details) => insertHtmlAtCaret(editor, value, details),\n        addVisual: elm => addVisualInternal(editor, elm)\n      },\n      selection: { getContent: (format, args) => getSelectedContentInternal(editor, format, args) },\n      autocompleter: {\n        addDecoration: range => create$9(editor, range),\n        removeDecoration: () => remove$2(editor, SugarElement.fromDom(editor.getBody()))\n      },\n      raw: { getModel: () => Optional.none() }\n    });\n    const makeRtcAdaptor = rtcEditor => {\n      const defaultVars = vars => isObject(vars) ? vars : {};\n      const {init, undoManager, formatter, editor, selection, autocompleter, raw} = rtcEditor;\n      return {\n        init: { bindEvents: init.bindEvents },\n        undoManager: {\n          beforeChange: undoManager.beforeChange,\n          add: undoManager.add,\n          undo: undoManager.undo,\n          redo: undoManager.redo,\n          clear: undoManager.clear,\n          reset: undoManager.reset,\n          hasUndo: undoManager.hasUndo,\n          hasRedo: undoManager.hasRedo,\n          transact: (_undoManager, _locks, fn) => undoManager.transact(fn),\n          ignore: (_locks, callback) => undoManager.ignore(callback),\n          extra: (_undoManager, _index, callback1, callback2) => undoManager.extra(callback1, callback2)\n        },\n        formatter: {\n          match: (name, vars, _node, similar) => formatter.match(name, defaultVars(vars), similar),\n          matchAll: formatter.matchAll,\n          matchNode: formatter.matchNode,\n          canApply: name => formatter.canApply(name),\n          closest: names => formatter.closest(names),\n          apply: (name, vars, _node) => formatter.apply(name, defaultVars(vars)),\n          remove: (name, vars, _node, _similar) => formatter.remove(name, defaultVars(vars)),\n          toggle: (name, vars, _node) => formatter.toggle(name, defaultVars(vars)),\n          formatChanged: (_rfl, formats, callback, similar, vars) => formatter.formatChanged(formats, callback, similar, vars)\n        },\n        editor: {\n          getContent: args => editor.getContent(args),\n          setContent: (content, args) => {\n            return {\n              content: editor.setContent(content, args),\n              html: ''\n            };\n          },\n          insertContent: (content, _details) => {\n            editor.insertContent(content);\n            return '';\n          },\n          addVisual: editor.addVisual\n        },\n        selection: { getContent: (_format, args) => selection.getContent(args) },\n        autocompleter: {\n          addDecoration: autocompleter.addDecoration,\n          removeDecoration: autocompleter.removeDecoration\n        },\n        raw: { getModel: () => Optional.some(raw.getRawModel()) }\n      };\n    };\n    const makeNoopAdaptor = () => {\n      const nul = constant(null);\n      const empty = constant('');\n      return {\n        init: { bindEvents: noop },\n        undoManager: {\n          beforeChange: noop,\n          add: nul,\n          undo: nul,\n          redo: nul,\n          clear: noop,\n          reset: noop,\n          hasUndo: never,\n          hasRedo: never,\n          transact: nul,\n          ignore: noop,\n          extra: noop\n        },\n        formatter: {\n          match: never,\n          matchAll: constant([]),\n          matchNode: constant(undefined),\n          canApply: never,\n          closest: empty,\n          apply: noop,\n          remove: noop,\n          toggle: noop,\n          formatChanged: constant({ unbind: noop })\n        },\n        editor: {\n          getContent: empty,\n          setContent: constant({\n            content: '',\n            html: ''\n          }),\n          insertContent: constant(''),\n          addVisual: noop\n        },\n        selection: { getContent: empty },\n        autocompleter: {\n          addDecoration: noop,\n          removeDecoration: noop\n        },\n        raw: { getModel: constant(Optional.none()) }\n      };\n    };\n    const isRtc = editor => has$2(editor.plugins, 'rtc');\n    const getRtcSetup = editor => get$a(editor.plugins, 'rtc').bind(rtcPlugin => Optional.from(rtcPlugin.setup));\n    const setup$s = editor => {\n      const editorCast = editor;\n      return getRtcSetup(editor).fold(() => {\n        editorCast.rtcInstance = makePlainAdaptor(editor);\n        return Optional.none();\n      }, setup => {\n        editorCast.rtcInstance = makeNoopAdaptor();\n        return Optional.some(() => setup().then(rtcEditor => {\n          editorCast.rtcInstance = makeRtcAdaptor(rtcEditor);\n          return rtcEditor.rtc.isRemote;\n        }));\n      });\n    };\n    const getRtcInstanceWithFallback = editor => editor.rtcInstance ? editor.rtcInstance : makePlainAdaptor(editor);\n    const getRtcInstanceWithError = editor => {\n      const rtcInstance = editor.rtcInstance;\n      if (!rtcInstance) {\n        throw new Error('Failed to get RTC instance not yet initialized.');\n      } else {\n        return rtcInstance;\n      }\n    };\n    const beforeChange = (editor, locks, beforeBookmark) => {\n      getRtcInstanceWithError(editor).undoManager.beforeChange(locks, beforeBookmark);\n    };\n    const addUndoLevel = (editor, undoManager, index, locks, beforeBookmark, level, event) => getRtcInstanceWithError(editor).undoManager.add(undoManager, index, locks, beforeBookmark, level, event);\n    const undo = (editor, undoManager, locks, index) => getRtcInstanceWithError(editor).undoManager.undo(undoManager, locks, index);\n    const redo = (editor, index, data) => getRtcInstanceWithError(editor).undoManager.redo(index, data);\n    const clear = (editor, undoManager, index) => {\n      getRtcInstanceWithError(editor).undoManager.clear(undoManager, index);\n    };\n    const reset = (editor, undoManager) => {\n      getRtcInstanceWithError(editor).undoManager.reset(undoManager);\n    };\n    const hasUndo = (editor, undoManager, index) => getRtcInstanceWithError(editor).undoManager.hasUndo(undoManager, index);\n    const hasRedo = (editor, undoManager, index) => getRtcInstanceWithError(editor).undoManager.hasRedo(undoManager, index);\n    const transact = (editor, undoManager, locks, callback) => getRtcInstanceWithError(editor).undoManager.transact(undoManager, locks, callback);\n    const ignore = (editor, locks, callback) => {\n      getRtcInstanceWithError(editor).undoManager.ignore(locks, callback);\n    };\n    const extra = (editor, undoManager, index, callback1, callback2) => {\n      getRtcInstanceWithError(editor).undoManager.extra(undoManager, index, callback1, callback2);\n    };\n    const matchFormat = (editor, name, vars, node, similar) => getRtcInstanceWithError(editor).formatter.match(name, vars, node, similar);\n    const matchAllFormats = (editor, names, vars) => getRtcInstanceWithError(editor).formatter.matchAll(names, vars);\n    const matchNodeFormat = (editor, node, name, vars, similar) => getRtcInstanceWithError(editor).formatter.matchNode(node, name, vars, similar);\n    const canApplyFormat = (editor, name) => getRtcInstanceWithError(editor).formatter.canApply(name);\n    const closestFormat = (editor, names) => getRtcInstanceWithError(editor).formatter.closest(names);\n    const applyFormat = (editor, name, vars, node) => {\n      getRtcInstanceWithError(editor).formatter.apply(name, vars, node);\n    };\n    const removeFormat = (editor, name, vars, node, similar) => {\n      getRtcInstanceWithError(editor).formatter.remove(name, vars, node, similar);\n    };\n    const toggleFormat = (editor, name, vars, node) => {\n      getRtcInstanceWithError(editor).formatter.toggle(name, vars, node);\n    };\n    const formatChanged = (editor, registeredFormatListeners, formats, callback, similar, vars) => getRtcInstanceWithError(editor).formatter.formatChanged(registeredFormatListeners, formats, callback, similar, vars);\n    const getContent$2 = (editor, args) => getRtcInstanceWithFallback(editor).editor.getContent(args);\n    const setContent$2 = (editor, content, args) => getRtcInstanceWithFallback(editor).editor.setContent(content, args);\n    const insertContent$1 = (editor, value, details) => getRtcInstanceWithFallback(editor).editor.insertContent(value, details);\n    const getSelectedContent = (editor, format, args) => getRtcInstanceWithError(editor).selection.getContent(format, args);\n    const addVisual$1 = (editor, elm) => getRtcInstanceWithError(editor).editor.addVisual(elm);\n    const bindEvents = editor => getRtcInstanceWithError(editor).init.bindEvents();\n    const addAutocompleterDecoration = (editor, range) => getRtcInstanceWithError(editor).autocompleter.addDecoration(range);\n    const removeAutocompleterDecoration = editor => getRtcInstanceWithError(editor).autocompleter.removeDecoration();\n\n    const getContent$1 = (editor, args = {}) => {\n      const format = args.format ? args.format : 'html';\n      return getSelectedContent(editor, format, args);\n    };\n\n    const removeEmpty = text => {\n      if (text.dom.length === 0) {\n        remove$5(text);\n        return Optional.none();\n      } else {\n        return Optional.some(text);\n      }\n    };\n    const walkPastBookmark = (node, start) => node.filter(elm => BookmarkManager.isBookmarkNode(elm.dom)).bind(start ? nextSibling : prevSibling);\n    const merge$1 = (outer, inner, rng, start) => {\n      const outerElm = outer.dom;\n      const innerElm = inner.dom;\n      const oldLength = start ? outerElm.length : innerElm.length;\n      if (start) {\n        mergeTextNodes(outerElm, innerElm, false, !start);\n        rng.setStart(innerElm, oldLength);\n      } else {\n        mergeTextNodes(innerElm, outerElm, false, !start);\n        rng.setEnd(innerElm, oldLength);\n      }\n    };\n    const normalizeTextIfRequired = (inner, start) => {\n      parent(inner).each(root => {\n        const text = inner.dom;\n        if (start && needsToBeNbspLeft(root, CaretPosition(text, 0))) {\n          normalizeWhitespaceAfter(text, 0);\n        } else if (!start && needsToBeNbspRight(root, CaretPosition(text, text.length))) {\n          normalizeWhitespaceBefore(text, text.length);\n        }\n      });\n    };\n    const mergeAndNormalizeText = (outerNode, innerNode, rng, start) => {\n      outerNode.bind(outer => {\n        const normalizer = start ? normalizeWhitespaceBefore : normalizeWhitespaceAfter;\n        normalizer(outer.dom, start ? outer.dom.length : 0);\n        return innerNode.filter(isText$b).map(inner => merge$1(outer, inner, rng, start));\n      }).orThunk(() => {\n        const innerTextNode = walkPastBookmark(innerNode, start).or(innerNode).filter(isText$b);\n        return innerTextNode.map(inner => normalizeTextIfRequired(inner, start));\n      });\n    };\n    const rngSetContent = (rng, fragment) => {\n      const firstChild = Optional.from(fragment.firstChild).map(SugarElement.fromDom);\n      const lastChild = Optional.from(fragment.lastChild).map(SugarElement.fromDom);\n      rng.deleteContents();\n      rng.insertNode(fragment);\n      const prevText = firstChild.bind(prevSibling).filter(isText$b).bind(removeEmpty);\n      const nextText = lastChild.bind(nextSibling).filter(isText$b).bind(removeEmpty);\n      mergeAndNormalizeText(prevText, firstChild, rng, true);\n      mergeAndNormalizeText(nextText, lastChild, rng, false);\n      rng.collapse(false);\n    };\n    const setupArgs$2 = (args, content) => ({\n      format: 'html',\n      ...args,\n      set: true,\n      selection: true,\n      content\n    });\n    const cleanContent = (editor, args) => {\n      if (args.format !== 'raw') {\n        const rng = editor.selection.getRng();\n        const contextBlock = editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock);\n        const contextArgs = contextBlock ? { context: contextBlock.nodeName.toLowerCase() } : {};\n        const node = editor.parser.parse(args.content, {\n          forced_root_block: false,\n          ...contextArgs,\n          ...args\n        });\n        return HtmlSerializer({ validate: false }, editor.schema).serialize(node);\n      } else {\n        return args.content;\n      }\n    };\n    const setContent$1 = (editor, content, args = {}) => {\n      const defaultedArgs = setupArgs$2(args, content);\n      preProcessSetContent(editor, defaultedArgs).each(updatedArgs => {\n        const cleanedContent = cleanContent(editor, updatedArgs);\n        const rng = editor.selection.getRng();\n        rngSetContent(rng, rng.createContextualFragment(cleanedContent));\n        editor.selection.setRng(rng);\n        scrollRangeIntoView(editor, rng);\n        postProcessSetContent(editor, cleanedContent, updatedArgs);\n      });\n    };\n\n    const deleteFromCallbackMap = (callbackMap, selector, callback) => {\n      if (has$2(callbackMap, selector)) {\n        const newCallbacks = filter$5(callbackMap[selector], cb => cb !== callback);\n        if (newCallbacks.length === 0) {\n          delete callbackMap[selector];\n        } else {\n          callbackMap[selector] = newCallbacks;\n        }\n      }\n    };\n    var SelectorChanged = (dom, editor) => {\n      let selectorChangedData;\n      let currentSelectors;\n      const findMatchingNode = (selector, nodes) => find$2(nodes, node => dom.is(node, selector));\n      const getParents = elem => dom.getParents(elem, undefined, dom.getRoot());\n      const setup = () => {\n        selectorChangedData = {};\n        currentSelectors = {};\n        editor.on('NodeChange', e => {\n          const node = e.element;\n          const parents = getParents(node);\n          const matchedSelectors = {};\n          each$d(selectorChangedData, (callbacks, selector) => {\n            findMatchingNode(selector, parents).each(node => {\n              if (!currentSelectors[selector]) {\n                each$e(callbacks, callback => {\n                  callback(true, {\n                    node,\n                    selector,\n                    parents\n                  });\n                });\n                currentSelectors[selector] = callbacks;\n              }\n              matchedSelectors[selector] = callbacks;\n            });\n          });\n          each$d(currentSelectors, (callbacks, selector) => {\n            if (!matchedSelectors[selector]) {\n              delete currentSelectors[selector];\n              each$e(callbacks, callback => {\n                callback(false, {\n                  node,\n                  selector,\n                  parents\n                });\n              });\n            }\n          });\n        });\n      };\n      return {\n        selectorChangedWithUnbind: (selector, callback) => {\n          if (!selectorChangedData) {\n            setup();\n          }\n          if (!selectorChangedData[selector]) {\n            selectorChangedData[selector] = [];\n          }\n          selectorChangedData[selector].push(callback);\n          findMatchingNode(selector, getParents(editor.selection.getStart())).each(() => {\n            currentSelectors[selector] = selectorChangedData[selector];\n          });\n          return {\n            unbind: () => {\n              deleteFromCallbackMap(selectorChangedData, selector, callback);\n              deleteFromCallbackMap(currentSelectors, selector, callback);\n            }\n          };\n        }\n      };\n    };\n\n    const isAttachedToDom = node => {\n      return !!(node && node.ownerDocument) && contains(SugarElement.fromDom(node.ownerDocument), SugarElement.fromDom(node));\n    };\n    const isValidRange = rng => {\n      if (!rng) {\n        return false;\n      } else {\n        return isAttachedToDom(rng.startContainer) && isAttachedToDom(rng.endContainer);\n      }\n    };\n    const EditorSelection = (dom, win, serializer, editor) => {\n      let selectedRange;\n      let explicitRange;\n      const {selectorChangedWithUnbind} = SelectorChanged(dom, editor);\n      const setCursorLocation = (node, offset) => {\n        const rng = dom.createRng();\n        if (isNonNullable(node) && isNonNullable(offset)) {\n          rng.setStart(node, offset);\n          rng.setEnd(node, offset);\n          setRng(rng);\n          collapse(false);\n        } else {\n          moveEndPoint(dom, rng, editor.getBody(), true);\n          setRng(rng);\n        }\n      };\n      const getContent = args => getContent$1(editor, args);\n      const setContent = (content, args) => setContent$1(editor, content, args);\n      const getStart$1 = real => getStart(editor.getBody(), getRng$1(), real);\n      const getEnd = real => getEnd$1(editor.getBody(), getRng$1(), real);\n      const getBookmark = (type, normalized) => bookmarkManager.getBookmark(type, normalized);\n      const moveToBookmark = bookmark => bookmarkManager.moveToBookmark(bookmark);\n      const select$1 = (node, content) => {\n        select(dom, node, content).each(setRng);\n        return node;\n      };\n      const isCollapsed = () => {\n        const rng = getRng$1(), sel = getSel();\n        if (!rng || rng.item) {\n          return false;\n        }\n        if (rng.compareEndPoints) {\n          return rng.compareEndPoints('StartToEnd', rng) === 0;\n        }\n        return !sel || rng.collapsed;\n      };\n      const isEditable = () => {\n        const rng = getRng$1();\n        const fakeSelectedElements = editor.getBody().querySelectorAll('[data-mce-selected=\"1\"]');\n        if (fakeSelectedElements.length > 0) {\n          return forall(fakeSelectedElements, el => dom.isEditable(el.parentElement));\n        } else if (rng.startContainer === rng.endContainer) {\n          return dom.isEditable(rng.startContainer);\n        } else {\n          return dom.isEditable(rng.startContainer) && dom.isEditable(rng.endContainer);\n        }\n      };\n      const collapse = toStart => {\n        const rng = getRng$1();\n        rng.collapse(!!toStart);\n        setRng(rng);\n      };\n      const getSel = () => win.getSelection ? win.getSelection() : win.document.selection;\n      const getRng$1 = () => {\n        let rng;\n        const tryCompareBoundaryPoints = (how, sourceRange, destinationRange) => {\n          try {\n            return sourceRange.compareBoundaryPoints(how, destinationRange);\n          } catch (ex) {\n            return -1;\n          }\n        };\n        const doc = win.document;\n        if (isNonNullable(editor.bookmark) && !hasFocus(editor)) {\n          const bookmark = getRng(editor);\n          if (bookmark.isSome()) {\n            return bookmark.map(r => processRanges(editor, [r])[0]).getOr(doc.createRange());\n          }\n        }\n        try {\n          const selection = getSel();\n          if (selection && !isRestrictedNode(selection.anchorNode)) {\n            if (selection.rangeCount > 0) {\n              rng = selection.getRangeAt(0);\n            } else {\n              rng = doc.createRange();\n            }\n            rng = processRanges(editor, [rng])[0];\n          }\n        } catch (ex) {\n        }\n        if (!rng) {\n          rng = doc.createRange();\n        }\n        if (isDocument$1(rng.startContainer) && rng.collapsed) {\n          const elm = dom.getRoot();\n          rng.setStart(elm, 0);\n          rng.setEnd(elm, 0);\n        }\n        if (selectedRange && explicitRange) {\n          if (tryCompareBoundaryPoints(rng.START_TO_START, rng, selectedRange) === 0 && tryCompareBoundaryPoints(rng.END_TO_END, rng, selectedRange) === 0) {\n            rng = explicitRange;\n          } else {\n            selectedRange = null;\n            explicitRange = null;\n          }\n        }\n        return rng;\n      };\n      const setRng = (rng, forward) => {\n        if (!isValidRange(rng)) {\n          return;\n        }\n        const sel = getSel();\n        const evt = editor.dispatch('SetSelectionRange', {\n          range: rng,\n          forward\n        });\n        rng = evt.range;\n        if (sel) {\n          explicitRange = rng;\n          try {\n            sel.removeAllRanges();\n            sel.addRange(rng);\n          } catch (ex) {\n          }\n          if (forward === false && sel.extend) {\n            sel.collapse(rng.endContainer, rng.endOffset);\n            sel.extend(rng.startContainer, rng.startOffset);\n          }\n          selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n        }\n        if (!rng.collapsed && rng.startContainer === rng.endContainer && (sel === null || sel === void 0 ? void 0 : sel.setBaseAndExtent)) {\n          if (rng.endOffset - rng.startOffset < 2) {\n            if (rng.startContainer.hasChildNodes()) {\n              const node = rng.startContainer.childNodes[rng.startOffset];\n              if (node && node.nodeName === 'IMG') {\n                sel.setBaseAndExtent(rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset);\n                if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {\n                  sel.setBaseAndExtent(node, 0, node, 1);\n                }\n              }\n            }\n          }\n        }\n        editor.dispatch('AfterSetSelectionRange', {\n          range: rng,\n          forward\n        });\n      };\n      const setNode = elm => {\n        setContent(dom.getOuterHTML(elm));\n        return elm;\n      };\n      const getNode$1 = () => getNode(editor.getBody(), getRng$1());\n      const getSelectedBlocks$1 = (startElm, endElm) => getSelectedBlocks(dom, getRng$1(), startElm, endElm);\n      const isForward = () => {\n        const sel = getSel();\n        const anchorNode = sel === null || sel === void 0 ? void 0 : sel.anchorNode;\n        const focusNode = sel === null || sel === void 0 ? void 0 : sel.focusNode;\n        if (!sel || !anchorNode || !focusNode || isRestrictedNode(anchorNode) || isRestrictedNode(focusNode)) {\n          return true;\n        }\n        const anchorRange = dom.createRng();\n        const focusRange = dom.createRng();\n        try {\n          anchorRange.setStart(anchorNode, sel.anchorOffset);\n          anchorRange.collapse(true);\n          focusRange.setStart(focusNode, sel.focusOffset);\n          focusRange.collapse(true);\n        } catch (e) {\n          return true;\n        }\n        return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;\n      };\n      const normalize = () => {\n        const rng = getRng$1();\n        const sel = getSel();\n        if (!hasMultipleRanges(sel) && hasAnyRanges(editor)) {\n          const normRng = normalize$2(dom, rng);\n          normRng.each(normRng => {\n            setRng(normRng, isForward());\n          });\n          return normRng.getOr(rng);\n        }\n        return rng;\n      };\n      const selectorChanged = (selector, callback) => {\n        selectorChangedWithUnbind(selector, callback);\n        return exports;\n      };\n      const getScrollContainer = () => {\n        let scrollContainer;\n        let node = dom.getRoot();\n        while (node && node.nodeName !== 'BODY') {\n          if (node.scrollHeight > node.clientHeight) {\n            scrollContainer = node;\n            break;\n          }\n          node = node.parentNode;\n        }\n        return scrollContainer;\n      };\n      const scrollIntoView = (elm, alignToTop) => {\n        if (isNonNullable(elm)) {\n          scrollElementIntoView(editor, elm, alignToTop);\n        } else {\n          scrollRangeIntoView(editor, getRng$1(), alignToTop);\n        }\n      };\n      const placeCaretAt = (clientX, clientY) => setRng(fromPoint(clientX, clientY, editor.getDoc()));\n      const getBoundingClientRect = () => {\n        const rng = getRng$1();\n        return rng.collapsed ? CaretPosition.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect();\n      };\n      const destroy = () => {\n        win = selectedRange = explicitRange = null;\n        controlSelection.destroy();\n      };\n      const expand = (options = { type: 'word' }) => setRng(RangeUtils(dom).expand(getRng$1(), options));\n      const exports = {\n        dom,\n        win,\n        serializer,\n        editor,\n        expand,\n        collapse,\n        setCursorLocation,\n        getContent,\n        setContent,\n        getBookmark,\n        moveToBookmark,\n        select: select$1,\n        isCollapsed,\n        isEditable,\n        isForward,\n        setNode,\n        getNode: getNode$1,\n        getSel,\n        setRng,\n        getRng: getRng$1,\n        getStart: getStart$1,\n        getEnd,\n        getSelectedBlocks: getSelectedBlocks$1,\n        normalize,\n        selectorChanged,\n        selectorChangedWithUnbind,\n        getScrollContainer,\n        scrollIntoView,\n        placeCaretAt,\n        getBoundingClientRect,\n        destroy\n      };\n      const bookmarkManager = BookmarkManager(exports);\n      const controlSelection = ControlSelection(exports, editor);\n      exports.bookmarkManager = bookmarkManager;\n      exports.controlSelection = controlSelection;\n      return exports;\n    };\n\n    const register$3 = (htmlParser, settings, dom) => {\n      htmlParser.addAttributeFilter('data-mce-tabindex', (nodes, name) => {\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          node.attr('tabindex', node.attr('data-mce-tabindex'));\n          node.attr(name, null);\n        }\n      });\n      htmlParser.addAttributeFilter('src,href,style', (nodes, name) => {\n        const internalName = 'data-mce-' + name;\n        const urlConverter = settings.url_converter;\n        const urlConverterScope = settings.url_converter_scope;\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          let value = node.attr(internalName);\n          if (value !== undefined) {\n            node.attr(name, value.length > 0 ? value : null);\n            node.attr(internalName, null);\n          } else {\n            value = node.attr(name);\n            if (name === 'style') {\n              value = dom.serializeStyle(dom.parseStyle(value), node.name);\n            } else if (urlConverter) {\n              value = urlConverter.call(urlConverterScope, value, name, node.name);\n            }\n            node.attr(name, value.length > 0 ? value : null);\n          }\n        }\n      });\n      htmlParser.addAttributeFilter('class', nodes => {\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          let value = node.attr('class');\n          if (value) {\n            value = value.replace(/(?:^|\\s)mce-item-\\w+(?!\\S)/g, '');\n            node.attr('class', value.length > 0 ? value : null);\n          }\n        }\n      });\n      htmlParser.addAttributeFilter('data-mce-type', (nodes, name, args) => {\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          if (node.attr('data-mce-type') === 'bookmark' && !args.cleanup) {\n            const hasChildren = Optional.from(node.firstChild).exists(firstChild => {\n              var _a;\n              return !isZwsp$1((_a = firstChild.value) !== null && _a !== void 0 ? _a : '');\n            });\n            if (hasChildren) {\n              node.unwrap();\n            } else {\n              node.remove();\n            }\n          }\n        }\n      });\n      htmlParser.addNodeFilter('noscript', nodes => {\n        var _a;\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i].firstChild;\n          if (node) {\n            node.value = Entities.decode((_a = node.value) !== null && _a !== void 0 ? _a : '');\n          }\n        }\n      });\n      htmlParser.addNodeFilter('script,style', (nodes, name) => {\n        var _a;\n        const trim = value => {\n          return value.replace(/(<!--\\[CDATA\\[|\\]\\]-->)/g, '\\n').replace(/^[\\r\\n]*|[\\r\\n]*$/g, '').replace(/^\\s*((<!--)?(\\s*\\/\\/)?\\s*<!\\[CDATA\\[|(<!--\\s*)?\\/\\*\\s*<!\\[CDATA\\[\\s*\\*\\/|(\\/\\/)?\\s*<!--|\\/\\*\\s*<!--\\s*\\*\\/)\\s*[\\r\\n]*/gi, '').replace(/\\s*(\\/\\*\\s*\\]\\]>\\s*\\*\\/(-->)?|\\s*\\/\\/\\s*\\]\\]>(-->)?|\\/\\/\\s*(-->)?|\\]\\]>|\\/\\*\\s*-->\\s*\\*\\/|\\s*-->\\s*)\\s*$/g, '');\n        };\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          const firstChild = node.firstChild;\n          const value = (_a = firstChild === null || firstChild === void 0 ? void 0 : firstChild.value) !== null && _a !== void 0 ? _a : '';\n          if (name === 'script') {\n            const type = node.attr('type');\n            if (type) {\n              node.attr('type', type === 'mce-no/type' ? null : type.replace(/^mce\\-/, ''));\n            }\n            if (settings.element_format === 'xhtml' && firstChild && value.length > 0) {\n              firstChild.value = '// <![CDATA[\\n' + trim(value) + '\\n// ]]>';\n            }\n          } else {\n            if (settings.element_format === 'xhtml' && firstChild && value.length > 0) {\n              firstChild.value = '<!--\\n' + trim(value) + '\\n-->';\n            }\n          }\n        }\n      });\n      htmlParser.addNodeFilter('#comment', nodes => {\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          const value = node.value;\n          if (settings.preserve_cdata && (value === null || value === void 0 ? void 0 : value.indexOf('[CDATA[')) === 0) {\n            node.name = '#cdata';\n            node.type = 4;\n            node.value = dom.decode(value.replace(/^\\[CDATA\\[|\\]\\]$/g, ''));\n          } else if ((value === null || value === void 0 ? void 0 : value.indexOf('mce:protected ')) === 0) {\n            node.name = '#text';\n            node.type = 3;\n            node.raw = true;\n            node.value = unescape(value).substr(14);\n          }\n        }\n      });\n      htmlParser.addNodeFilter('xml:namespace,input', (nodes, name) => {\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          if (node.type === 7) {\n            node.remove();\n          } else if (node.type === 1) {\n            if (name === 'input' && !node.attr('type')) {\n              node.attr('type', 'text');\n            }\n          }\n        }\n      });\n      htmlParser.addAttributeFilter('data-mce-type', nodes => {\n        each$e(nodes, node => {\n          if (node.attr('data-mce-type') === 'format-caret') {\n            if (node.isEmpty(htmlParser.schema.getNonEmptyElements())) {\n              node.remove();\n            } else {\n              node.unwrap();\n            }\n          }\n        });\n      });\n      htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style,' + 'data-mce-selected,data-mce-expando,data-mce-block,' + 'data-mce-type,data-mce-resize,data-mce-placeholder', (nodes, name) => {\n        let i = nodes.length;\n        while (i--) {\n          nodes[i].attr(name, null);\n        }\n      });\n      if (settings.remove_trailing_brs) {\n        addNodeFilter(htmlParser, htmlParser.schema);\n      }\n    };\n    const trimTrailingBr = rootNode => {\n      const isBr = node => {\n        return (node === null || node === void 0 ? void 0 : node.name) === 'br';\n      };\n      const brNode1 = rootNode.lastChild;\n      if (isBr(brNode1)) {\n        const brNode2 = brNode1.prev;\n        if (isBr(brNode2)) {\n          brNode1.remove();\n          brNode2.remove();\n        }\n      }\n    };\n\n    const preProcess$1 = (editor, node, args) => {\n      let oldDoc;\n      const dom = editor.dom;\n      let clonedNode = node.cloneNode(true);\n      const impl = document.implementation;\n      if (impl.createHTMLDocument) {\n        const doc = impl.createHTMLDocument('');\n        Tools.each(clonedNode.nodeName === 'BODY' ? clonedNode.childNodes : [clonedNode], node => {\n          doc.body.appendChild(doc.importNode(node, true));\n        });\n        if (clonedNode.nodeName !== 'BODY') {\n          clonedNode = doc.body.firstChild;\n        } else {\n          clonedNode = doc.body;\n        }\n        oldDoc = dom.doc;\n        dom.doc = doc;\n      }\n      firePreProcess(editor, {\n        ...args,\n        node: clonedNode\n      });\n      if (oldDoc) {\n        dom.doc = oldDoc;\n      }\n      return clonedNode;\n    };\n    const shouldFireEvent = (editor, args) => {\n      return isNonNullable(editor) && editor.hasEventListeners('PreProcess') && !args.no_events;\n    };\n    const process$1 = (editor, node, args) => {\n      return shouldFireEvent(editor, args) ? preProcess$1(editor, node, args) : node;\n    };\n\n    const addTempAttr = (htmlParser, tempAttrs, name) => {\n      if (Tools.inArray(tempAttrs, name) === -1) {\n        htmlParser.addAttributeFilter(name, (nodes, name) => {\n          let i = nodes.length;\n          while (i--) {\n            nodes[i].attr(name, null);\n          }\n        });\n        tempAttrs.push(name);\n      }\n    };\n    const postProcess = (editor, args, content) => {\n      if (!args.no_events && editor) {\n        const outArgs = firePostProcess(editor, {\n          ...args,\n          content\n        });\n        return outArgs.content;\n      } else {\n        return content;\n      }\n    };\n    const getHtmlFromNode = (dom, node, args) => {\n      const html = trim$1(args.getInner ? node.innerHTML : dom.getOuterHTML(node));\n      return args.selection || isWsPreserveElement(SugarElement.fromDom(node)) ? html : Tools.trim(html);\n    };\n    const parseHtml = (htmlParser, html, args) => {\n      const parserArgs = args.selection ? {\n        forced_root_block: false,\n        ...args\n      } : args;\n      const rootNode = htmlParser.parse(html, parserArgs);\n      trimTrailingBr(rootNode);\n      return rootNode;\n    };\n    const serializeNode = (settings, schema, node) => {\n      const htmlSerializer = HtmlSerializer(settings, schema);\n      return htmlSerializer.serialize(node);\n    };\n    const toHtml = (editor, settings, schema, rootNode, args) => {\n      const content = serializeNode(settings, schema, rootNode);\n      return postProcess(editor, args, content);\n    };\n    const DomSerializerImpl = (settings, editor) => {\n      const tempAttrs = ['data-mce-selected'];\n      const defaultedSettings = {\n        entity_encoding: 'named',\n        remove_trailing_brs: true,\n        ...settings\n      };\n      const dom = editor && editor.dom ? editor.dom : DOMUtils.DOM;\n      const schema = editor && editor.schema ? editor.schema : Schema(defaultedSettings);\n      const htmlParser = DomParser(defaultedSettings, schema);\n      register$3(htmlParser, defaultedSettings, dom);\n      const serialize = (node, parserArgs = {}) => {\n        const args = {\n          format: 'html',\n          ...parserArgs\n        };\n        const targetNode = process$1(editor, node, args);\n        const html = getHtmlFromNode(dom, targetNode, args);\n        const rootNode = parseHtml(htmlParser, html, args);\n        return args.format === 'tree' ? rootNode : toHtml(editor, defaultedSettings, schema, rootNode, args);\n      };\n      return {\n        schema,\n        addNodeFilter: htmlParser.addNodeFilter,\n        addAttributeFilter: htmlParser.addAttributeFilter,\n        serialize: serialize,\n        addRules: schema.addValidElements,\n        setRules: schema.setValidElements,\n        addTempAttr: curry(addTempAttr, htmlParser, tempAttrs),\n        getTempAttrs: constant(tempAttrs),\n        getNodeFilters: htmlParser.getNodeFilters,\n        getAttributeFilters: htmlParser.getAttributeFilters,\n        removeNodeFilter: htmlParser.removeNodeFilter,\n        removeAttributeFilter: htmlParser.removeAttributeFilter\n      };\n    };\n\n    const DomSerializer = (settings, editor) => {\n      const domSerializer = DomSerializerImpl(settings, editor);\n      return {\n        schema: domSerializer.schema,\n        addNodeFilter: domSerializer.addNodeFilter,\n        addAttributeFilter: domSerializer.addAttributeFilter,\n        serialize: domSerializer.serialize,\n        addRules: domSerializer.addRules,\n        setRules: domSerializer.setRules,\n        addTempAttr: domSerializer.addTempAttr,\n        getTempAttrs: domSerializer.getTempAttrs,\n        getNodeFilters: domSerializer.getNodeFilters,\n        getAttributeFilters: domSerializer.getAttributeFilters,\n        removeNodeFilter: domSerializer.removeNodeFilter,\n        removeAttributeFilter: domSerializer.removeAttributeFilter\n      };\n    };\n\n    const defaultFormat$1 = 'html';\n    const setupArgs$1 = (args, format) => ({\n      ...args,\n      format,\n      get: true,\n      getInner: true\n    });\n    const getContent = (editor, args = {}) => {\n      const format = args.format ? args.format : defaultFormat$1;\n      const defaultedArgs = setupArgs$1(args, format);\n      return preProcessGetContent(editor, defaultedArgs).fold(identity, updatedArgs => {\n        const content = getContent$2(editor, updatedArgs);\n        return postProcessGetContent(editor, content, updatedArgs);\n      });\n    };\n\n    const defaultFormat = 'html';\n    const setupArgs = (args, content) => ({\n      format: defaultFormat,\n      ...args,\n      set: true,\n      content\n    });\n    const setContent = (editor, content, args = {}) => {\n      const defaultedArgs = setupArgs(args, content);\n      return preProcessSetContent(editor, defaultedArgs).map(updatedArgs => {\n        const result = setContent$2(editor, updatedArgs.content, updatedArgs);\n        postProcessSetContent(editor, result.html, updatedArgs);\n        return result.content;\n      }).getOr(content);\n    };\n\n    const removedOptions = ('autoresize_on_init,content_editable_state,padd_empty_with_br,block_elements,' + 'boolean_attributes,editor_deselector,editor_selector,elements,file_browser_callback_types,filepicker_validator_handler,' + 'force_hex_style_colors,force_p_newlines,gecko_spellcheck,images_dataimg_filter,media_scripts,mode,move_caret_before_on_enter_elements,' + 'non_empty_elements,self_closing_elements,short_ended_elements,special,spellchecker_select_languages,spellchecker_whitelist,' + 'tab_focus,tabfocus_elements,table_responsive_width,text_block_elements,text_inline_elements,toolbar_drawer,types,validate,whitespace_elements,' + 'paste_enable_default_filters,paste_filter_drop,paste_word_valid_elements,paste_retain_style_properties,paste_convert_word_fake_lists').split(',');\n    const deprecatedOptions = 'template_cdate_classes,template_mdate_classes,template_selected_content_classes,template_preview_replace_values,template_replace_values,templates,template_cdate_format,template_mdate_format'.split(',');\n    const removedPlugins = 'bbcode,colorpicker,contextmenu,fullpage,legacyoutput,spellchecker,textcolor'.split(',');\n    const deprecatedPlugins = [\n      {\n        name: 'template',\n        replacedWith: 'Advanced Template'\n      },\n      { name: 'rtc' }\n    ];\n    const getMatchingOptions = (options, searchingFor) => {\n      const settingNames = filter$5(searchingFor, setting => has$2(options, setting));\n      return sort(settingNames);\n    };\n    const getRemovedOptions = options => {\n      const settingNames = getMatchingOptions(options, removedOptions);\n      const forcedRootBlock = options.forced_root_block;\n      if (forcedRootBlock === false || forcedRootBlock === '') {\n        settingNames.push('forced_root_block (false only)');\n      }\n      return sort(settingNames);\n    };\n    const getDeprecatedOptions = options => getMatchingOptions(options, deprecatedOptions);\n    const getMatchingPlugins = (options, searchingFor) => {\n      const plugins = Tools.makeMap(options.plugins, ' ');\n      const hasPlugin = plugin => has$2(plugins, plugin);\n      const pluginNames = filter$5(searchingFor, hasPlugin);\n      return sort(pluginNames);\n    };\n    const getRemovedPlugins = options => getMatchingPlugins(options, removedPlugins);\n    const getDeprecatedPlugins = options => getMatchingPlugins(options, deprecatedPlugins.map(entry => entry.name));\n    const logRemovedWarnings = (rawOptions, normalizedOptions) => {\n      const removedOptions = getRemovedOptions(rawOptions);\n      const removedPlugins = getRemovedPlugins(normalizedOptions);\n      const hasRemovedPlugins = removedPlugins.length > 0;\n      const hasRemovedOptions = removedOptions.length > 0;\n      const isLegacyMobileTheme = normalizedOptions.theme === 'mobile';\n      if (hasRemovedPlugins || hasRemovedOptions || isLegacyMobileTheme) {\n        const listJoiner = '\\n- ';\n        const themesMessage = isLegacyMobileTheme ? `\\n\\nThemes:${ listJoiner }mobile` : '';\n        const pluginsMessage = hasRemovedPlugins ? `\\n\\nPlugins:${ listJoiner }${ removedPlugins.join(listJoiner) }` : '';\n        const optionsMessage = hasRemovedOptions ? `\\n\\nOptions:${ listJoiner }${ removedOptions.join(listJoiner) }` : '';\n        console.warn('The following deprecated features are currently enabled and have been removed in TinyMCE 6.0. These features will no longer work and should be removed from the TinyMCE configuration. ' + 'See https://www.tiny.cloud/docs/tinymce/6/migration-from-5x/ for more information.' + themesMessage + pluginsMessage + optionsMessage);\n      }\n    };\n    const getPluginDescription = name => find$2(deprecatedPlugins, entry => entry.name === name).fold(() => name, entry => {\n      if (entry.replacedWith) {\n        return `${ name }, replaced by ${ entry.replacedWith }`;\n      } else {\n        return name;\n      }\n    });\n    const logDeprecatedWarnings = (rawOptions, normalizedOptions) => {\n      const deprecatedOptions = getDeprecatedOptions(rawOptions);\n      const deprecatedPlugins = getDeprecatedPlugins(normalizedOptions);\n      const hasDeprecatedPlugins = deprecatedPlugins.length > 0;\n      const hasDeprecatedOptions = deprecatedOptions.length > 0;\n      if (hasDeprecatedPlugins || hasDeprecatedOptions) {\n        const listJoiner = '\\n- ';\n        const pluginsMessage = hasDeprecatedPlugins ? `\\n\\nPlugins:${ listJoiner }${ deprecatedPlugins.map(getPluginDescription).join(listJoiner) }` : '';\n        const optionsMessage = hasDeprecatedOptions ? `\\n\\nOptions:${ listJoiner }${ deprecatedOptions.join(listJoiner) }` : '';\n        console.warn('The following deprecated features are currently enabled but will be removed soon.' + pluginsMessage + optionsMessage);\n      }\n    };\n    const logWarnings = (rawOptions, normalizedOptions) => {\n      logRemovedWarnings(rawOptions, normalizedOptions);\n      logDeprecatedWarnings(rawOptions, normalizedOptions);\n    };\n\n    const DOM$8 = DOMUtils.DOM;\n    const restoreOriginalStyles = editor => {\n      DOM$8.setStyle(editor.id, 'display', editor.orgDisplay);\n    };\n    const safeDestroy = x => Optional.from(x).each(x => x.destroy());\n    const clearDomReferences = editor => {\n      const ed = editor;\n      ed.contentAreaContainer = ed.formElement = ed.container = ed.editorContainer = null;\n      ed.bodyElement = ed.contentDocument = ed.contentWindow = null;\n      ed.iframeElement = ed.targetElm = null;\n      const selection = editor.selection;\n      if (selection) {\n        const dom = selection.dom;\n        ed.selection = selection.win = selection.dom = dom.doc = null;\n      }\n    };\n    const restoreForm = editor => {\n      const form = editor.formElement;\n      if (form) {\n        if (form._mceOldSubmit) {\n          form.submit = form._mceOldSubmit;\n          delete form._mceOldSubmit;\n        }\n        DOM$8.unbind(form, 'submit reset', editor.formEventDelegate);\n      }\n    };\n    const remove$1 = editor => {\n      if (!editor.removed) {\n        const {_selectionOverrides, editorUpload} = editor;\n        const body = editor.getBody();\n        const element = editor.getElement();\n        if (body) {\n          editor.save({ is_removing: true });\n        }\n        editor.removed = true;\n        editor.unbindAllNativeEvents();\n        if (editor.hasHiddenInput && isNonNullable(element === null || element === void 0 ? void 0 : element.nextSibling)) {\n          DOM$8.remove(element.nextSibling);\n        }\n        fireRemove(editor);\n        editor.editorManager.remove(editor);\n        if (!editor.inline && body) {\n          restoreOriginalStyles(editor);\n        }\n        fireDetach(editor);\n        DOM$8.remove(editor.getContainer());\n        safeDestroy(_selectionOverrides);\n        safeDestroy(editorUpload);\n        editor.destroy();\n      }\n    };\n    const destroy = (editor, automatic) => {\n      const {selection, dom} = editor;\n      if (editor.destroyed) {\n        return;\n      }\n      if (!automatic && !editor.removed) {\n        editor.remove();\n        return;\n      }\n      if (!automatic) {\n        editor.editorManager.off('beforeunload', editor._beforeUnload);\n        if (editor.theme && editor.theme.destroy) {\n          editor.theme.destroy();\n        }\n        safeDestroy(selection);\n        safeDestroy(dom);\n      }\n      restoreForm(editor);\n      clearDomReferences(editor);\n      editor.destroyed = true;\n    };\n\n    const CreateIconManager = () => {\n      const lookup = {};\n      const add = (id, iconPack) => {\n        lookup[id] = iconPack;\n      };\n      const get = id => {\n        if (lookup[id]) {\n          return lookup[id];\n        } else {\n          return { icons: {} };\n        }\n      };\n      const has = id => has$2(lookup, id);\n      return {\n        add,\n        get,\n        has\n      };\n    };\n    const IconManager = CreateIconManager();\n\n    const ModelManager = AddOnManager.ModelManager;\n\n    const getProp = (propName, elm) => {\n      const rawElm = elm.dom;\n      return rawElm[propName];\n    };\n    const getComputedSizeProp = (propName, elm) => parseInt(get$7(elm, propName), 10);\n    const getClientWidth = curry(getProp, 'clientWidth');\n    const getClientHeight = curry(getProp, 'clientHeight');\n    const getMarginTop = curry(getComputedSizeProp, 'margin-top');\n    const getMarginLeft = curry(getComputedSizeProp, 'margin-left');\n    const getBoundingClientRect = elm => elm.dom.getBoundingClientRect();\n    const isInsideElementContentArea = (bodyElm, clientX, clientY) => {\n      const clientWidth = getClientWidth(bodyElm);\n      const clientHeight = getClientHeight(bodyElm);\n      return clientX >= 0 && clientY >= 0 && clientX <= clientWidth && clientY <= clientHeight;\n    };\n    const transpose = (inline, elm, clientX, clientY) => {\n      const clientRect = getBoundingClientRect(elm);\n      const deltaX = inline ? clientRect.left + elm.dom.clientLeft + getMarginLeft(elm) : 0;\n      const deltaY = inline ? clientRect.top + elm.dom.clientTop + getMarginTop(elm) : 0;\n      const x = clientX - deltaX;\n      const y = clientY - deltaY;\n      return {\n        x,\n        y\n      };\n    };\n    const isXYInContentArea = (editor, clientX, clientY) => {\n      const bodyElm = SugarElement.fromDom(editor.getBody());\n      const targetElm = editor.inline ? bodyElm : documentElement(bodyElm);\n      const transposedPoint = transpose(editor.inline, targetElm, clientX, clientY);\n      return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y);\n    };\n    const fromDomSafe = node => Optional.from(node).map(SugarElement.fromDom);\n    const isEditorAttachedToDom = editor => {\n      const rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();\n      return fromDomSafe(rawContainer).map(inBody).getOr(false);\n    };\n\n    var NotificationManagerImpl = () => {\n      const unimplemented = () => {\n        throw new Error('Theme did not provide a NotificationManager implementation.');\n      };\n      return {\n        open: unimplemented,\n        close: unimplemented,\n        getArgs: unimplemented\n      };\n    };\n\n    const NotificationManager = editor => {\n      const notifications = [];\n      const getImplementation = () => {\n        const theme = editor.theme;\n        return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl();\n      };\n      const getTopNotification = () => {\n        return Optional.from(notifications[0]);\n      };\n      const isEqual = (a, b) => {\n        return a.type === b.type && a.text === b.text && !a.progressBar && !a.timeout && !b.progressBar && !b.timeout;\n      };\n      const reposition = () => {\n        each$e(notifications, notification => {\n          notification.reposition();\n        });\n      };\n      const addNotification = notification => {\n        notifications.push(notification);\n      };\n      const closeNotification = notification => {\n        findIndex$2(notifications, otherNotification => {\n          return otherNotification === notification;\n        }).each(index => {\n          notifications.splice(index, 1);\n        });\n      };\n      const open = (spec, fireEvent = true) => {\n        if (editor.removed || !isEditorAttachedToDom(editor)) {\n          return {};\n        }\n        if (fireEvent) {\n          editor.dispatch('BeforeOpenNotification', { notification: spec });\n        }\n        return find$2(notifications, notification => {\n          return isEqual(getImplementation().getArgs(notification), spec);\n        }).getOrThunk(() => {\n          editor.editorManager.setActive(editor);\n          const notification = getImplementation().open(spec, () => {\n            closeNotification(notification);\n            reposition();\n            getTopNotification().fold(() => editor.focus(), top => focus$1(SugarElement.fromDom(top.getEl())));\n          });\n          addNotification(notification);\n          reposition();\n          editor.dispatch('OpenNotification', { notification: { ...notification } });\n          return notification;\n        });\n      };\n      const close = () => {\n        getTopNotification().each(notification => {\n          getImplementation().close(notification);\n          closeNotification(notification);\n          reposition();\n        });\n      };\n      const getNotifications = constant(notifications);\n      const registerEvents = editor => {\n        editor.on('SkinLoaded', () => {\n          const serviceMessage = getServiceMessage(editor);\n          if (serviceMessage) {\n            open({\n              text: serviceMessage,\n              type: 'warning',\n              timeout: 0\n            }, false);\n          }\n          reposition();\n        });\n        editor.on('show ResizeEditor ResizeWindow NodeChange', () => {\n          requestAnimationFrame(reposition);\n        });\n        editor.on('remove', () => {\n          each$e(notifications.slice(), notification => {\n            getImplementation().close(notification);\n          });\n        });\n      };\n      registerEvents(editor);\n      return {\n        open,\n        close,\n        getNotifications\n      };\n    };\n\n    const PluginManager = AddOnManager.PluginManager;\n\n    const ThemeManager = AddOnManager.ThemeManager;\n\n    var WindowManagerImpl = () => {\n      const unimplemented = () => {\n        throw new Error('Theme did not provide a WindowManager implementation.');\n      };\n      return {\n        open: unimplemented,\n        openUrl: unimplemented,\n        alert: unimplemented,\n        confirm: unimplemented,\n        close: unimplemented\n      };\n    };\n\n    const WindowManager = editor => {\n      let dialogs = [];\n      const getImplementation = () => {\n        const theme = editor.theme;\n        return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl();\n      };\n      const funcBind = (scope, f) => {\n        return (...args) => {\n          return f ? f.apply(scope, args) : undefined;\n        };\n      };\n      const fireOpenEvent = dialog => {\n        editor.dispatch('OpenWindow', { dialog });\n      };\n      const fireCloseEvent = dialog => {\n        editor.dispatch('CloseWindow', { dialog });\n      };\n      const addDialog = dialog => {\n        dialogs.push(dialog);\n        fireOpenEvent(dialog);\n      };\n      const closeDialog = dialog => {\n        fireCloseEvent(dialog);\n        dialogs = filter$5(dialogs, otherDialog => {\n          return otherDialog !== dialog;\n        });\n        if (dialogs.length === 0) {\n          editor.focus();\n        }\n      };\n      const getTopDialog = () => {\n        return Optional.from(dialogs[dialogs.length - 1]);\n      };\n      const storeSelectionAndOpenDialog = openDialog => {\n        editor.editorManager.setActive(editor);\n        store(editor);\n        editor.ui.show();\n        const dialog = openDialog();\n        addDialog(dialog);\n        return dialog;\n      };\n      const open = (args, params) => {\n        return storeSelectionAndOpenDialog(() => getImplementation().open(args, params, closeDialog));\n      };\n      const openUrl = args => {\n        return storeSelectionAndOpenDialog(() => getImplementation().openUrl(args, closeDialog));\n      };\n      const alert = (message, callback, scope) => {\n        const windowManagerImpl = getImplementation();\n        windowManagerImpl.alert(message, funcBind(scope ? scope : windowManagerImpl, callback));\n      };\n      const confirm = (message, callback, scope) => {\n        const windowManagerImpl = getImplementation();\n        windowManagerImpl.confirm(message, funcBind(scope ? scope : windowManagerImpl, callback));\n      };\n      const close = () => {\n        getTopDialog().each(dialog => {\n          getImplementation().close(dialog);\n          closeDialog(dialog);\n        });\n      };\n      editor.on('remove', () => {\n        each$e(dialogs, dialog => {\n          getImplementation().close(dialog);\n        });\n      });\n      return {\n        open,\n        openUrl,\n        alert,\n        confirm,\n        close\n      };\n    };\n\n    const displayNotification = (editor, message) => {\n      editor.notificationManager.open({\n        type: 'error',\n        text: message\n      });\n    };\n    const displayError = (editor, message) => {\n      if (editor._skinLoaded) {\n        displayNotification(editor, message);\n      } else {\n        editor.on('SkinLoaded', () => {\n          displayNotification(editor, message);\n        });\n      }\n    };\n    const uploadError = (editor, message) => {\n      displayError(editor, I18n.translate([\n        'Failed to upload image: {0}',\n        message\n      ]));\n    };\n    const logError = (editor, errorType, msg) => {\n      fireError(editor, errorType, { message: msg });\n      console.error(msg);\n    };\n    const createLoadError = (type, url, name) => name ? `Failed to load ${ type }: ${ name } from url ${ url }` : `Failed to load ${ type } url: ${ url }`;\n    const pluginLoadError = (editor, url, name) => {\n      logError(editor, 'PluginLoadError', createLoadError('plugin', url, name));\n    };\n    const iconsLoadError = (editor, url, name) => {\n      logError(editor, 'IconsLoadError', createLoadError('icons', url, name));\n    };\n    const languageLoadError = (editor, url, name) => {\n      logError(editor, 'LanguageLoadError', createLoadError('language', url, name));\n    };\n    const themeLoadError = (editor, url, name) => {\n      logError(editor, 'ThemeLoadError', createLoadError('theme', url, name));\n    };\n    const modelLoadError = (editor, url, name) => {\n      logError(editor, 'ModelLoadError', createLoadError('model', url, name));\n    };\n    const pluginInitError = (editor, name, err) => {\n      const message = I18n.translate([\n        'Failed to initialize plugin: {0}',\n        name\n      ]);\n      fireError(editor, 'PluginLoadError', { message });\n      initError(message, err);\n      displayError(editor, message);\n    };\n    const initError = (message, ...x) => {\n      const console = window.console;\n      if (console) {\n        if (console.error) {\n          console.error(message, ...x);\n        } else {\n          console.log(message, ...x);\n        }\n      }\n    };\n\n    const isContentCssSkinName = url => /^[a-z0-9\\-]+$/i.test(url);\n    const getContentCssUrls = editor => {\n      return transformToUrls(editor, getContentCss(editor));\n    };\n    const getFontCssUrls = editor => {\n      return transformToUrls(editor, getFontCss(editor));\n    };\n    const transformToUrls = (editor, cssLinks) => {\n      const skinUrl = editor.editorManager.baseURL + '/skins/content';\n      const suffix = editor.editorManager.suffix;\n      const contentCssFile = `content${ suffix }.css`;\n      return map$3(cssLinks, url => {\n        if (isContentCssSkinName(url) && !editor.inline) {\n          return `${ skinUrl }/${ url }/${ contentCssFile }`;\n        } else {\n          return editor.documentBaseURI.toAbsolute(url);\n        }\n      });\n    };\n    const appendContentCssFromSettings = editor => {\n      editor.contentCSS = editor.contentCSS.concat(getContentCssUrls(editor), getFontCssUrls(editor));\n    };\n\n    const getAllImages = elm => {\n      return elm ? from(elm.getElementsByTagName('img')) : [];\n    };\n    const ImageScanner = (uploadStatus, blobCache) => {\n      const cachedPromises = {};\n      const findAll = (elm, predicate = always) => {\n        const images = filter$5(getAllImages(elm), img => {\n          const src = img.src;\n          if (img.hasAttribute('data-mce-bogus')) {\n            return false;\n          }\n          if (img.hasAttribute('data-mce-placeholder')) {\n            return false;\n          }\n          if (!src || src === Env.transparentSrc) {\n            return false;\n          }\n          if (startsWith(src, 'blob:')) {\n            return !uploadStatus.isUploaded(src) && predicate(img);\n          }\n          if (startsWith(src, 'data:')) {\n            return predicate(img);\n          }\n          return false;\n        });\n        const promises = map$3(images, img => {\n          const imageSrc = img.src;\n          if (has$2(cachedPromises, imageSrc)) {\n            return cachedPromises[imageSrc].then(imageInfo => {\n              if (isString(imageInfo)) {\n                return imageInfo;\n              } else {\n                return {\n                  image: img,\n                  blobInfo: imageInfo.blobInfo\n                };\n              }\n            });\n          } else {\n            const newPromise = imageToBlobInfo(blobCache, imageSrc).then(blobInfo => {\n              delete cachedPromises[imageSrc];\n              return {\n                image: img,\n                blobInfo\n              };\n            }).catch(error => {\n              delete cachedPromises[imageSrc];\n              return error;\n            });\n            cachedPromises[imageSrc] = newPromise;\n            return newPromise;\n          }\n        });\n        return Promise.all(promises);\n      };\n      return { findAll };\n    };\n\n    const UploadStatus = () => {\n      const PENDING = 1, UPLOADED = 2;\n      let blobUriStatuses = {};\n      const createStatus = (status, resultUri) => {\n        return {\n          status,\n          resultUri\n        };\n      };\n      const hasBlobUri = blobUri => {\n        return blobUri in blobUriStatuses;\n      };\n      const getResultUri = blobUri => {\n        const result = blobUriStatuses[blobUri];\n        return result ? result.resultUri : null;\n      };\n      const isPending = blobUri => {\n        return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === PENDING : false;\n      };\n      const isUploaded = blobUri => {\n        return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === UPLOADED : false;\n      };\n      const markPending = blobUri => {\n        blobUriStatuses[blobUri] = createStatus(PENDING, null);\n      };\n      const markUploaded = (blobUri, resultUri) => {\n        blobUriStatuses[blobUri] = createStatus(UPLOADED, resultUri);\n      };\n      const removeFailed = blobUri => {\n        delete blobUriStatuses[blobUri];\n      };\n      const destroy = () => {\n        blobUriStatuses = {};\n      };\n      return {\n        hasBlobUri,\n        getResultUri,\n        isPending,\n        isUploaded,\n        markPending,\n        markUploaded,\n        removeFailed,\n        destroy\n      };\n    };\n\n    let count = 0;\n    const seed = () => {\n      const rnd = () => {\n        return Math.round(Math.random() * 4294967295).toString(36);\n      };\n      const now = new Date().getTime();\n      return 's' + now.toString(36) + rnd() + rnd() + rnd();\n    };\n    const uuid = prefix => {\n      return prefix + count++ + seed();\n    };\n\n    const BlobCache = () => {\n      let cache = [];\n      const mimeToExt = mime => {\n        const mimes = {\n          'image/jpeg': 'jpg',\n          'image/jpg': 'jpg',\n          'image/gif': 'gif',\n          'image/png': 'png',\n          'image/apng': 'apng',\n          'image/avif': 'avif',\n          'image/svg+xml': 'svg',\n          'image/webp': 'webp',\n          'image/bmp': 'bmp',\n          'image/tiff': 'tiff'\n        };\n        return mimes[mime.toLowerCase()] || 'dat';\n      };\n      const create = (o, blob, base64, name, filename) => {\n        if (isString(o)) {\n          const id = o;\n          return toBlobInfo({\n            id,\n            name,\n            filename,\n            blob: blob,\n            base64: base64\n          });\n        } else if (isObject(o)) {\n          return toBlobInfo(o);\n        } else {\n          throw new Error('Unknown input type');\n        }\n      };\n      const toBlobInfo = o => {\n        if (!o.blob || !o.base64) {\n          throw new Error('blob and base64 representations of the image are required for BlobInfo to be created');\n        }\n        const id = o.id || uuid('blobid');\n        const name = o.name || id;\n        const blob = o.blob;\n        return {\n          id: constant(id),\n          name: constant(name),\n          filename: constant(o.filename || name + '.' + mimeToExt(blob.type)),\n          blob: constant(blob),\n          base64: constant(o.base64),\n          blobUri: constant(o.blobUri || URL.createObjectURL(blob)),\n          uri: constant(o.uri)\n        };\n      };\n      const add = blobInfo => {\n        if (!get(blobInfo.id())) {\n          cache.push(blobInfo);\n        }\n      };\n      const findFirst = predicate => find$2(cache, predicate).getOrUndefined();\n      const get = id => findFirst(cachedBlobInfo => cachedBlobInfo.id() === id);\n      const getByUri = blobUri => findFirst(blobInfo => blobInfo.blobUri() === blobUri);\n      const getByData = (base64, type) => findFirst(blobInfo => blobInfo.base64() === base64 && blobInfo.blob().type === type);\n      const removeByUri = blobUri => {\n        cache = filter$5(cache, blobInfo => {\n          if (blobInfo.blobUri() === blobUri) {\n            URL.revokeObjectURL(blobInfo.blobUri());\n            return false;\n          }\n          return true;\n        });\n      };\n      const destroy = () => {\n        each$e(cache, cachedBlobInfo => {\n          URL.revokeObjectURL(cachedBlobInfo.blobUri());\n        });\n        cache = [];\n      };\n      return {\n        create,\n        add,\n        get,\n        getByUri,\n        getByData,\n        findFirst,\n        removeByUri,\n        destroy\n      };\n    };\n\n    const Uploader = (uploadStatus, settings) => {\n      const pendingPromises = {};\n      const pathJoin = (path1, path2) => {\n        if (path1) {\n          return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\n        }\n        return path2;\n      };\n      const defaultHandler = (blobInfo, progress) => new Promise((success, failure) => {\n        const xhr = new XMLHttpRequest();\n        xhr.open('POST', settings.url);\n        xhr.withCredentials = settings.credentials;\n        xhr.upload.onprogress = e => {\n          progress(e.loaded / e.total * 100);\n        };\n        xhr.onerror = () => {\n          failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);\n        };\n        xhr.onload = () => {\n          if (xhr.status < 200 || xhr.status >= 300) {\n            failure('HTTP Error: ' + xhr.status);\n            return;\n          }\n          const json = JSON.parse(xhr.responseText);\n          if (!json || !isString(json.location)) {\n            failure('Invalid JSON: ' + xhr.responseText);\n            return;\n          }\n          success(pathJoin(settings.basePath, json.location));\n        };\n        const formData = new FormData();\n        formData.append('file', blobInfo.blob(), blobInfo.filename());\n        xhr.send(formData);\n      });\n      const uploadHandler = isFunction(settings.handler) ? settings.handler : defaultHandler;\n      const noUpload = () => new Promise(resolve => {\n        resolve([]);\n      });\n      const handlerSuccess = (blobInfo, url) => ({\n        url,\n        blobInfo,\n        status: true\n      });\n      const handlerFailure = (blobInfo, error) => ({\n        url: '',\n        blobInfo,\n        status: false,\n        error\n      });\n      const resolvePending = (blobUri, result) => {\n        Tools.each(pendingPromises[blobUri], resolve => {\n          resolve(result);\n        });\n        delete pendingPromises[blobUri];\n      };\n      const uploadBlobInfo = (blobInfo, handler, openNotification) => {\n        uploadStatus.markPending(blobInfo.blobUri());\n        return new Promise(resolve => {\n          let notification;\n          let progress;\n          try {\n            const closeNotification = () => {\n              if (notification) {\n                notification.close();\n                progress = noop;\n              }\n            };\n            const success = url => {\n              closeNotification();\n              uploadStatus.markUploaded(blobInfo.blobUri(), url);\n              resolvePending(blobInfo.blobUri(), handlerSuccess(blobInfo, url));\n              resolve(handlerSuccess(blobInfo, url));\n            };\n            const failure = error => {\n              closeNotification();\n              uploadStatus.removeFailed(blobInfo.blobUri());\n              resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error));\n              resolve(handlerFailure(blobInfo, error));\n            };\n            progress = percent => {\n              if (percent < 0 || percent > 100) {\n                return;\n              }\n              Optional.from(notification).orThunk(() => Optional.from(openNotification).map(apply$1)).each(n => {\n                notification = n;\n                n.progressBar.value(percent);\n              });\n            };\n            handler(blobInfo, progress).then(success, err => {\n              failure(isString(err) ? { message: err } : err);\n            });\n          } catch (ex) {\n            resolve(handlerFailure(blobInfo, ex));\n          }\n        });\n      };\n      const isDefaultHandler = handler => handler === defaultHandler;\n      const pendingUploadBlobInfo = blobInfo => {\n        const blobUri = blobInfo.blobUri();\n        return new Promise(resolve => {\n          pendingPromises[blobUri] = pendingPromises[blobUri] || [];\n          pendingPromises[blobUri].push(resolve);\n        });\n      };\n      const uploadBlobs = (blobInfos, openNotification) => {\n        blobInfos = Tools.grep(blobInfos, blobInfo => !uploadStatus.isUploaded(blobInfo.blobUri()));\n        return Promise.all(Tools.map(blobInfos, blobInfo => uploadStatus.isPending(blobInfo.blobUri()) ? pendingUploadBlobInfo(blobInfo) : uploadBlobInfo(blobInfo, uploadHandler, openNotification)));\n      };\n      const upload = (blobInfos, openNotification) => !settings.url && isDefaultHandler(uploadHandler) ? noUpload() : uploadBlobs(blobInfos, openNotification);\n      return { upload };\n    };\n\n    const openNotification = editor => () => editor.notificationManager.open({\n      text: editor.translate('Image uploading...'),\n      type: 'info',\n      timeout: -1,\n      progressBar: true\n    });\n    const createUploader = (editor, uploadStatus) => Uploader(uploadStatus, {\n      url: getImageUploadUrl(editor),\n      basePath: getImageUploadBasePath(editor),\n      credentials: getImagesUploadCredentials(editor),\n      handler: getImagesUploadHandler(editor)\n    });\n    const ImageUploader = editor => {\n      const uploadStatus = UploadStatus();\n      const uploader = createUploader(editor, uploadStatus);\n      return { upload: (blobInfos, showNotification = true) => uploader.upload(blobInfos, showNotification ? openNotification(editor) : undefined) };\n    };\n\n    const isEmptyForPadding = (editor, element) => editor.dom.isEmpty(element.dom) && isNonNullable(editor.schema.getTextBlockElements()[name(element)]);\n    const addPaddingToEmpty = editor => element => {\n      if (isEmptyForPadding(editor, element)) {\n        append$1(element, SugarElement.fromHtml('<br data-mce-bogus=\"1\" />'));\n      }\n    };\n    const EditorUpload = editor => {\n      const blobCache = BlobCache();\n      let uploader, imageScanner;\n      const uploadStatus = UploadStatus();\n      const urlFilters = [];\n      const aliveGuard = callback => {\n        return result => {\n          if (editor.selection) {\n            return callback(result);\n          }\n          return [];\n        };\n      };\n      const cacheInvalidator = url => url + (url.indexOf('?') === -1 ? '?' : '&') + new Date().getTime();\n      const replaceString = (content, search, replace) => {\n        let index = 0;\n        do {\n          index = content.indexOf(search, index);\n          if (index !== -1) {\n            content = content.substring(0, index) + replace + content.substr(index + search.length);\n            index += replace.length - search.length + 1;\n          }\n        } while (index !== -1);\n        return content;\n      };\n      const replaceImageUrl = (content, targetUrl, replacementUrl) => {\n        const replacementString = `src=\"${ replacementUrl }\"${ replacementUrl === Env.transparentSrc ? ' data-mce-placeholder=\"1\"' : '' }`;\n        content = replaceString(content, `src=\"${ targetUrl }\"`, replacementString);\n        content = replaceString(content, 'data-mce-src=\"' + targetUrl + '\"', 'data-mce-src=\"' + replacementUrl + '\"');\n        return content;\n      };\n      const replaceUrlInUndoStack = (targetUrl, replacementUrl) => {\n        each$e(editor.undoManager.data, level => {\n          if (level.type === 'fragmented') {\n            level.fragments = map$3(level.fragments, fragment => replaceImageUrl(fragment, targetUrl, replacementUrl));\n          } else {\n            level.content = replaceImageUrl(level.content, targetUrl, replacementUrl);\n          }\n        });\n      };\n      const replaceImageUriInView = (image, resultUri) => {\n        const src = editor.convertURL(resultUri, 'src');\n        replaceUrlInUndoStack(image.src, resultUri);\n        setAll$1(SugarElement.fromDom(image), {\n          'src': shouldReuseFileName(editor) ? cacheInvalidator(resultUri) : resultUri,\n          'data-mce-src': src\n        });\n      };\n      const uploadImages = () => {\n        if (!uploader) {\n          uploader = createUploader(editor, uploadStatus);\n        }\n        return scanForImages().then(aliveGuard(imageInfos => {\n          const blobInfos = map$3(imageInfos, imageInfo => imageInfo.blobInfo);\n          return uploader.upload(blobInfos, openNotification(editor)).then(aliveGuard(result => {\n            const imagesToRemove = [];\n            let shouldDispatchChange = false;\n            const filteredResult = map$3(result, (uploadInfo, index) => {\n              const {blobInfo, image} = imageInfos[index];\n              let removed = false;\n              if (uploadInfo.status && shouldReplaceBlobUris(editor)) {\n                if (uploadInfo.url && !contains$1(image.src, uploadInfo.url)) {\n                  shouldDispatchChange = true;\n                }\n                blobCache.removeByUri(image.src);\n                if (isRtc(editor)) ; else {\n                  replaceImageUriInView(image, uploadInfo.url);\n                }\n              } else if (uploadInfo.error) {\n                if (uploadInfo.error.remove) {\n                  replaceUrlInUndoStack(image.src, Env.transparentSrc);\n                  imagesToRemove.push(image);\n                  removed = true;\n                }\n                uploadError(editor, uploadInfo.error.message);\n              }\n              return {\n                element: image,\n                status: uploadInfo.status,\n                uploadUri: uploadInfo.url,\n                blobInfo,\n                removed\n              };\n            });\n            if (imagesToRemove.length > 0 && !isRtc(editor)) {\n              editor.undoManager.transact(() => {\n                each$e(fromDom$1(imagesToRemove), sugarElement => {\n                  const parentOpt = parent(sugarElement);\n                  remove$5(sugarElement);\n                  parentOpt.each(addPaddingToEmpty(editor));\n                  blobCache.removeByUri(sugarElement.dom.src);\n                });\n              });\n            } else if (shouldDispatchChange) {\n              editor.undoManager.dispatchChange();\n            }\n            return filteredResult;\n          }));\n        }));\n      };\n      const uploadImagesAuto = () => isAutomaticUploadsEnabled(editor) ? uploadImages() : Promise.resolve([]);\n      const isValidDataUriImage = imgElm => forall(urlFilters, filter => filter(imgElm));\n      const addFilter = filter => {\n        urlFilters.push(filter);\n      };\n      const scanForImages = () => {\n        if (!imageScanner) {\n          imageScanner = ImageScanner(uploadStatus, blobCache);\n        }\n        return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard(result => {\n          const filteredResult = filter$5(result, resultItem => {\n            if (isString(resultItem)) {\n              displayError(editor, resultItem);\n              return false;\n            } else if (resultItem.uriType === 'blob') {\n              return false;\n            } else {\n              return true;\n            }\n          });\n          if (isRtc(editor)) ; else {\n            each$e(filteredResult, resultItem => {\n              replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri());\n              resultItem.image.src = resultItem.blobInfo.blobUri();\n              resultItem.image.removeAttribute('data-mce-src');\n            });\n          }\n          return filteredResult;\n        }));\n      };\n      const destroy = () => {\n        blobCache.destroy();\n        uploadStatus.destroy();\n        imageScanner = uploader = null;\n      };\n      const replaceBlobUris = content => {\n        return content.replace(/src=\"(blob:[^\"]+)\"/g, (match, blobUri) => {\n          const resultUri = uploadStatus.getResultUri(blobUri);\n          if (resultUri) {\n            return 'src=\"' + resultUri + '\"';\n          }\n          let blobInfo = blobCache.getByUri(blobUri);\n          if (!blobInfo) {\n            blobInfo = foldl(editor.editorManager.get(), (result, editor) => {\n              return result || editor.editorUpload && editor.editorUpload.blobCache.getByUri(blobUri);\n            }, undefined);\n          }\n          if (blobInfo) {\n            const blob = blobInfo.blob();\n            return 'src=\"data:' + blob.type + ';base64,' + blobInfo.base64() + '\"';\n          }\n          return match;\n        });\n      };\n      editor.on('SetContent', () => {\n        if (isAutomaticUploadsEnabled(editor)) {\n          uploadImagesAuto();\n        } else {\n          scanForImages();\n        }\n      });\n      editor.on('RawSaveContent', e => {\n        e.content = replaceBlobUris(e.content);\n      });\n      editor.on('GetContent', e => {\n        if (e.source_view || e.format === 'raw' || e.format === 'tree') {\n          return;\n        }\n        e.content = replaceBlobUris(e.content);\n      });\n      editor.on('PostRender', () => {\n        editor.parser.addNodeFilter('img', images => {\n          each$e(images, img => {\n            const src = img.attr('src');\n            if (!src || blobCache.getByUri(src)) {\n              return;\n            }\n            const resultUri = uploadStatus.getResultUri(src);\n            if (resultUri) {\n              img.attr('src', resultUri);\n            }\n          });\n        });\n      });\n      return {\n        blobCache,\n        addFilter,\n        uploadImages,\n        uploadImagesAuto,\n        scanForImages,\n        destroy\n      };\n    };\n\n    const get$1 = editor => {\n      const dom = editor.dom;\n      const schemaType = editor.schema.type;\n      const formats = {\n        valigntop: [{\n            selector: 'td,th',\n            styles: { verticalAlign: 'top' }\n          }],\n        valignmiddle: [{\n            selector: 'td,th',\n            styles: { verticalAlign: 'middle' }\n          }],\n        valignbottom: [{\n            selector: 'td,th',\n            styles: { verticalAlign: 'bottom' }\n          }],\n        alignleft: [\n          {\n            selector: 'figure.image',\n            collapsed: false,\n            classes: 'align-left',\n            ceFalseOverride: true,\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n            styles: { textAlign: 'left' },\n            inherit: false,\n            preview: false\n          },\n          {\n            selector: 'img,audio,video',\n            collapsed: false,\n            styles: { float: 'left' },\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'table',\n            collapsed: false,\n            styles: {\n              marginLeft: '0px',\n              marginRight: 'auto'\n            },\n            onformat: table => {\n              dom.setStyle(table, 'float', null);\n            },\n            preview: 'font-family font-size'\n          },\n          {\n            selector: '.mce-preview-object,[data-ephox-embed-iri]',\n            ceFalseOverride: true,\n            styles: { float: 'left' }\n          }\n        ],\n        aligncenter: [\n          {\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n            styles: { textAlign: 'center' },\n            inherit: false,\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'figure.image',\n            collapsed: false,\n            classes: 'align-center',\n            ceFalseOverride: true,\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'img,audio,video',\n            collapsed: false,\n            styles: {\n              display: 'block',\n              marginLeft: 'auto',\n              marginRight: 'auto'\n            },\n            preview: false\n          },\n          {\n            selector: 'table',\n            collapsed: false,\n            styles: {\n              marginLeft: 'auto',\n              marginRight: 'auto'\n            },\n            preview: 'font-family font-size'\n          },\n          {\n            selector: '.mce-preview-object',\n            ceFalseOverride: true,\n            styles: {\n              display: 'table',\n              marginLeft: 'auto',\n              marginRight: 'auto'\n            },\n            preview: false\n          },\n          {\n            selector: '[data-ephox-embed-iri]',\n            ceFalseOverride: true,\n            styles: {\n              marginLeft: 'auto',\n              marginRight: 'auto'\n            },\n            preview: false\n          }\n        ],\n        alignright: [\n          {\n            selector: 'figure.image',\n            collapsed: false,\n            classes: 'align-right',\n            ceFalseOverride: true,\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n            styles: { textAlign: 'right' },\n            inherit: false,\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'img,audio,video',\n            collapsed: false,\n            styles: { float: 'right' },\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'table',\n            collapsed: false,\n            styles: {\n              marginRight: '0px',\n              marginLeft: 'auto'\n            },\n            onformat: table => {\n              dom.setStyle(table, 'float', null);\n            },\n            preview: 'font-family font-size'\n          },\n          {\n            selector: '.mce-preview-object,[data-ephox-embed-iri]',\n            ceFalseOverride: true,\n            styles: { float: 'right' },\n            preview: false\n          }\n        ],\n        alignjustify: [{\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n            styles: { textAlign: 'justify' },\n            inherit: false,\n            preview: 'font-family font-size'\n          }],\n        bold: [\n          {\n            inline: 'strong',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          },\n          {\n            inline: 'span',\n            styles: { fontWeight: 'bold' }\n          },\n          {\n            inline: 'b',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          }\n        ],\n        italic: [\n          {\n            inline: 'em',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          },\n          {\n            inline: 'span',\n            styles: { fontStyle: 'italic' }\n          },\n          {\n            inline: 'i',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          }\n        ],\n        underline: [\n          {\n            inline: 'span',\n            styles: { textDecoration: 'underline' },\n            exact: true\n          },\n          {\n            inline: 'u',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          }\n        ],\n        strikethrough: (() => {\n          const span = {\n            inline: 'span',\n            styles: { textDecoration: 'line-through' },\n            exact: true\n          };\n          const strike = {\n            inline: 'strike',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          };\n          const s = {\n            inline: 's',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          };\n          return schemaType !== 'html4' ? [\n            s,\n            span,\n            strike\n          ] : [\n            span,\n            s,\n            strike\n          ];\n        })(),\n        forecolor: {\n          inline: 'span',\n          styles: { color: '%value' },\n          links: true,\n          remove_similar: true,\n          clear_child_styles: true\n        },\n        hilitecolor: {\n          inline: 'span',\n          styles: { backgroundColor: '%value' },\n          links: true,\n          remove_similar: true,\n          clear_child_styles: true\n        },\n        fontname: {\n          inline: 'span',\n          toggle: false,\n          styles: { fontFamily: '%value' },\n          clear_child_styles: true\n        },\n        fontsize: {\n          inline: 'span',\n          toggle: false,\n          styles: { fontSize: '%value' },\n          clear_child_styles: true\n        },\n        lineheight: {\n          selector: 'h1,h2,h3,h4,h5,h6,p,li,td,th,div',\n          styles: { lineHeight: '%value' }\n        },\n        fontsize_class: {\n          inline: 'span',\n          attributes: { class: '%value' }\n        },\n        blockquote: {\n          block: 'blockquote',\n          wrapper: true,\n          remove: 'all'\n        },\n        subscript: { inline: 'sub' },\n        superscript: { inline: 'sup' },\n        code: { inline: 'code' },\n        link: {\n          inline: 'a',\n          selector: 'a',\n          remove: 'all',\n          split: true,\n          deep: true,\n          onmatch: (node, _fmt, _itemName) => {\n            return isElement$6(node) && node.hasAttribute('href');\n          },\n          onformat: (elm, _fmt, vars) => {\n            Tools.each(vars, (value, key) => {\n              dom.setAttrib(elm, key, value);\n            });\n          }\n        },\n        lang: {\n          inline: 'span',\n          clear_child_styles: true,\n          remove_similar: true,\n          attributes: {\n            'lang': '%value',\n            'data-mce-lang': vars => {\n              var _a;\n              return (_a = vars === null || vars === void 0 ? void 0 : vars.customValue) !== null && _a !== void 0 ? _a : null;\n            }\n          }\n        },\n        removeformat: [\n          {\n            selector: 'b,strong,em,i,font,u,strike,s,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins,small',\n            remove: 'all',\n            split: true,\n            expand: false,\n            block_expand: true,\n            deep: true\n          },\n          {\n            selector: 'span',\n            attributes: [\n              'style',\n              'class'\n            ],\n            remove: 'empty',\n            split: true,\n            expand: false,\n            deep: true\n          },\n          {\n            selector: '*',\n            attributes: [\n              'style',\n              'class'\n            ],\n            split: false,\n            expand: false,\n            deep: true\n          }\n        ]\n      };\n      Tools.each('p h1 h2 h3 h4 h5 h6 div address pre dt dd samp'.split(/\\s/), name => {\n        formats[name] = {\n          block: name,\n          remove: 'all'\n        };\n      });\n      return formats;\n    };\n\n    const genericBase = {\n      remove_similar: true,\n      inherit: false\n    };\n    const cellBase = {\n      selector: 'td,th',\n      ...genericBase\n    };\n    const cellFormats = {\n      tablecellbackgroundcolor: {\n        styles: { backgroundColor: '%value' },\n        ...cellBase\n      },\n      tablecellverticalalign: {\n        styles: { 'vertical-align': '%value' },\n        ...cellBase\n      },\n      tablecellbordercolor: {\n        styles: { borderColor: '%value' },\n        ...cellBase\n      },\n      tablecellclass: {\n        classes: ['%value'],\n        ...cellBase\n      },\n      tableclass: {\n        selector: 'table',\n        classes: ['%value'],\n        ...genericBase\n      },\n      tablecellborderstyle: {\n        styles: { borderStyle: '%value' },\n        ...cellBase\n      },\n      tablecellborderwidth: {\n        styles: { borderWidth: '%value' },\n        ...cellBase\n      }\n    };\n    const get = constant(cellFormats);\n\n    const FormatRegistry = editor => {\n      const formats = {};\n      const get$2 = name => isNonNullable(name) ? formats[name] : formats;\n      const has = name => has$2(formats, name);\n      const register = (name, format) => {\n        if (name) {\n          if (!isString(name)) {\n            each$d(name, (format, name) => {\n              register(name, format);\n            });\n          } else {\n            if (!isArray$1(format)) {\n              format = [format];\n            }\n            each$e(format, format => {\n              if (isUndefined(format.deep)) {\n                format.deep = !isSelectorFormat(format);\n              }\n              if (isUndefined(format.split)) {\n                format.split = !isSelectorFormat(format) || isInlineFormat(format);\n              }\n              if (isUndefined(format.remove) && isSelectorFormat(format) && !isInlineFormat(format)) {\n                format.remove = 'none';\n              }\n              if (isSelectorFormat(format) && isInlineFormat(format)) {\n                format.mixed = true;\n                format.block_expand = true;\n              }\n              if (isString(format.classes)) {\n                format.classes = format.classes.split(/\\s+/);\n              }\n            });\n            formats[name] = format;\n          }\n        }\n      };\n      const unregister = name => {\n        if (name && formats[name]) {\n          delete formats[name];\n        }\n        return formats;\n      };\n      register(get$1(editor));\n      register(get());\n      register(getFormats(editor));\n      return {\n        get: get$2,\n        has,\n        register,\n        unregister\n      };\n    };\n\n    const each$3 = Tools.each;\n    const dom = DOMUtils.DOM;\n    const isPreviewItem = item => isNonNullable(item) && isObject(item);\n    const parsedSelectorToHtml = (ancestry, editor) => {\n      const schema = editor && editor.schema || Schema({});\n      const decorate = (elm, item) => {\n        if (item.classes.length > 0) {\n          dom.addClass(elm, item.classes.join(' '));\n        }\n        dom.setAttribs(elm, item.attrs);\n      };\n      const createElement = sItem => {\n        const item = isString(sItem) ? {\n          name: sItem,\n          classes: [],\n          attrs: {}\n        } : sItem;\n        const elm = dom.create(item.name);\n        decorate(elm, item);\n        return elm;\n      };\n      const getRequiredParent = (elm, candidate) => {\n        const elmRule = schema.getElementRule(elm.nodeName.toLowerCase());\n        const parentsRequired = elmRule === null || elmRule === void 0 ? void 0 : elmRule.parentsRequired;\n        if (parentsRequired && parentsRequired.length) {\n          return candidate && contains$2(parentsRequired, candidate) ? candidate : parentsRequired[0];\n        } else {\n          return false;\n        }\n      };\n      const wrapInHtml = (elm, ancestors, siblings) => {\n        let parentCandidate;\n        const ancestor = ancestors[0];\n        const ancestorName = isPreviewItem(ancestor) ? ancestor.name : undefined;\n        const parentRequired = getRequiredParent(elm, ancestorName);\n        if (parentRequired) {\n          if (ancestorName === parentRequired) {\n            parentCandidate = ancestor;\n            ancestors = ancestors.slice(1);\n          } else {\n            parentCandidate = parentRequired;\n          }\n        } else if (ancestor) {\n          parentCandidate = ancestor;\n          ancestors = ancestors.slice(1);\n        } else if (!siblings) {\n          return elm;\n        }\n        const parent = parentCandidate ? createElement(parentCandidate) : dom.create('div');\n        parent.appendChild(elm);\n        if (siblings) {\n          Tools.each(siblings, sibling => {\n            const siblingElm = createElement(sibling);\n            parent.insertBefore(siblingElm, elm);\n          });\n        }\n        const parentSiblings = isPreviewItem(parentCandidate) ? parentCandidate.siblings : undefined;\n        return wrapInHtml(parent, ancestors, parentSiblings);\n      };\n      const fragment = dom.create('div');\n      if (ancestry.length > 0) {\n        const item = ancestry[0];\n        const elm = createElement(item);\n        const siblings = isPreviewItem(item) ? item.siblings : undefined;\n        fragment.appendChild(wrapInHtml(elm, ancestry.slice(1), siblings));\n      }\n      return fragment;\n    };\n    const parseSelectorItem = item => {\n      item = Tools.trim(item);\n      let tagName = 'div';\n      const obj = {\n        name: tagName,\n        classes: [],\n        attrs: {},\n        selector: item\n      };\n      if (item !== '*') {\n        tagName = item.replace(/(?:([#\\.]|::?)([\\w\\-]+)|(\\[)([^\\]]+)\\]?)/g, ($0, $1, $2, $3, $4) => {\n          switch ($1) {\n          case '#':\n            obj.attrs.id = $2;\n            break;\n          case '.':\n            obj.classes.push($2);\n            break;\n          case ':':\n            if (Tools.inArray('checked disabled enabled read-only required'.split(' '), $2) !== -1) {\n              obj.attrs[$2] = $2;\n            }\n            break;\n          }\n          if ($3 === '[') {\n            const m = $4.match(/([\\w\\-]+)(?:\\=\\\"([^\\\"]+))?/);\n            if (m) {\n              obj.attrs[m[1]] = m[2];\n            }\n          }\n          return '';\n        });\n      }\n      obj.name = tagName || 'div';\n      return obj;\n    };\n    const parseSelector = selector => {\n      if (!isString(selector)) {\n        return [];\n      }\n      selector = selector.split(/\\s*,\\s*/)[0];\n      selector = selector.replace(/\\s*(~\\+|~|\\+|>)\\s*/g, '$1');\n      return Tools.map(selector.split(/(?:>|\\s+(?![^\\[\\]]+\\]))/), item => {\n        const siblings = Tools.map(item.split(/(?:~\\+|~|\\+)/), parseSelectorItem);\n        const obj = siblings.pop();\n        if (siblings.length) {\n          obj.siblings = siblings;\n        }\n        return obj;\n      }).reverse();\n    };\n    const getCssText = (editor, format) => {\n      let previewCss = '';\n      let previewStyles = getPreviewStyles(editor);\n      if (previewStyles === '') {\n        return '';\n      }\n      const removeVars = val => {\n        return isString(val) ? val.replace(/%(\\w+)/g, '') : '';\n      };\n      const getComputedStyle = (name, elm) => {\n        return dom.getStyle(elm !== null && elm !== void 0 ? elm : editor.getBody(), name, true);\n      };\n      if (isString(format)) {\n        const formats = editor.formatter.get(format);\n        if (!formats) {\n          return '';\n        }\n        format = formats[0];\n      }\n      if ('preview' in format) {\n        const preview = format.preview;\n        if (preview === false) {\n          return '';\n        } else {\n          previewStyles = preview || previewStyles;\n        }\n      }\n      let name = format.block || format.inline || 'span';\n      let previewFrag;\n      const items = parseSelector(format.selector);\n      if (items.length > 0) {\n        if (!items[0].name) {\n          items[0].name = name;\n        }\n        name = format.selector;\n        previewFrag = parsedSelectorToHtml(items, editor);\n      } else {\n        previewFrag = parsedSelectorToHtml([name], editor);\n      }\n      const previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;\n      each$3(format.styles, (value, name) => {\n        const newValue = removeVars(value);\n        if (newValue) {\n          dom.setStyle(previewElm, name, newValue);\n        }\n      });\n      each$3(format.attributes, (value, name) => {\n        const newValue = removeVars(value);\n        if (newValue) {\n          dom.setAttrib(previewElm, name, newValue);\n        }\n      });\n      each$3(format.classes, value => {\n        const newValue = removeVars(value);\n        if (!dom.hasClass(previewElm, newValue)) {\n          dom.addClass(previewElm, newValue);\n        }\n      });\n      editor.dispatch('PreviewFormats');\n      dom.setStyles(previewFrag, {\n        position: 'absolute',\n        left: -65535\n      });\n      editor.getBody().appendChild(previewFrag);\n      const rawParentFontSize = getComputedStyle('fontSize');\n      const parentFontSize = /px$/.test(rawParentFontSize) ? parseInt(rawParentFontSize, 10) : 0;\n      each$3(previewStyles.split(' '), name => {\n        let value = getComputedStyle(name, previewElm);\n        if (name === 'background-color' && /transparent|rgba\\s*\\([^)]+,\\s*0\\)/.test(value)) {\n          value = getComputedStyle(name);\n          if (rgbaToHexString(value).toLowerCase() === '#ffffff') {\n            return;\n          }\n        }\n        if (name === 'color') {\n          if (rgbaToHexString(value).toLowerCase() === '#000000') {\n            return;\n          }\n        }\n        if (name === 'font-size') {\n          if (/em|%$/.test(value)) {\n            if (parentFontSize === 0) {\n              return;\n            }\n            const numValue = parseFloat(value) / (/%$/.test(value) ? 100 : 1);\n            value = numValue * parentFontSize + 'px';\n          }\n        }\n        if (name === 'border' && value) {\n          previewCss += 'padding:0 2px;';\n        }\n        previewCss += name + ':' + value + ';';\n      });\n      editor.dispatch('AfterPreviewFormats');\n      dom.remove(previewFrag);\n      return previewCss;\n    };\n\n    const setup$r = editor => {\n      editor.addShortcut('meta+b', '', 'Bold');\n      editor.addShortcut('meta+i', '', 'Italic');\n      editor.addShortcut('meta+u', '', 'Underline');\n      for (let i = 1; i <= 6; i++) {\n        editor.addShortcut('access+' + i, '', [\n          'FormatBlock',\n          false,\n          'h' + i\n        ]);\n      }\n      editor.addShortcut('access+7', '', [\n        'FormatBlock',\n        false,\n        'p'\n      ]);\n      editor.addShortcut('access+8', '', [\n        'FormatBlock',\n        false,\n        'div'\n      ]);\n      editor.addShortcut('access+9', '', [\n        'FormatBlock',\n        false,\n        'address'\n      ]);\n    };\n\n    const Formatter = editor => {\n      const formats = FormatRegistry(editor);\n      const formatChangeState = Cell({});\n      setup$r(editor);\n      setup$u(editor);\n      if (!isRtc(editor)) {\n        setup$t(formatChangeState, editor);\n      }\n      return {\n        get: formats.get,\n        has: formats.has,\n        register: formats.register,\n        unregister: formats.unregister,\n        apply: (name, vars, node) => {\n          applyFormat(editor, name, vars, node);\n        },\n        remove: (name, vars, node, similar) => {\n          removeFormat(editor, name, vars, node, similar);\n        },\n        toggle: (name, vars, node) => {\n          toggleFormat(editor, name, vars, node);\n        },\n        match: (name, vars, node, similar) => matchFormat(editor, name, vars, node, similar),\n        closest: names => closestFormat(editor, names),\n        matchAll: (names, vars) => matchAllFormats(editor, names, vars),\n        matchNode: (node, name, vars, similar) => matchNodeFormat(editor, node, name, vars, similar),\n        canApply: name => canApplyFormat(editor, name),\n        formatChanged: (formats, callback, similar, vars) => formatChanged(editor, formatChangeState, formats, callback, similar, vars),\n        getCssText: curry(getCssText, editor)\n      };\n    };\n\n    const shouldIgnoreCommand = cmd => {\n      switch (cmd.toLowerCase()) {\n      case 'undo':\n      case 'redo':\n      case 'mcefocus':\n        return true;\n      default:\n        return false;\n      }\n    };\n    const registerEvents = (editor, undoManager, locks) => {\n      const isFirstTypedCharacter = Cell(false);\n      const addNonTypingUndoLevel = e => {\n        setTyping(undoManager, false, locks);\n        undoManager.add({}, e);\n      };\n      editor.on('init', () => {\n        undoManager.add();\n      });\n      editor.on('BeforeExecCommand', e => {\n        const cmd = e.command;\n        if (!shouldIgnoreCommand(cmd)) {\n          endTyping(undoManager, locks);\n          undoManager.beforeChange();\n        }\n      });\n      editor.on('ExecCommand', e => {\n        const cmd = e.command;\n        if (!shouldIgnoreCommand(cmd)) {\n          addNonTypingUndoLevel(e);\n        }\n      });\n      editor.on('ObjectResizeStart cut', () => {\n        undoManager.beforeChange();\n      });\n      editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel);\n      editor.on('dragend', addNonTypingUndoLevel);\n      editor.on('keyup', e => {\n        const keyCode = e.keyCode;\n        if (e.isDefaultPrevented()) {\n          return;\n        }\n        const isMeta = Env.os.isMacOS() && e.key === 'Meta';\n        if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45 || e.ctrlKey || isMeta) {\n          addNonTypingUndoLevel();\n          editor.nodeChanged();\n        }\n        if (keyCode === 46 || keyCode === 8) {\n          editor.nodeChanged();\n        }\n        if (isFirstTypedCharacter.get() && undoManager.typing && !isEq$1(createFromEditor(editor), undoManager.data[0])) {\n          if (!editor.isDirty()) {\n            editor.setDirty(true);\n          }\n          editor.dispatch('TypingUndo');\n          isFirstTypedCharacter.set(false);\n          editor.nodeChanged();\n        }\n      });\n      editor.on('keydown', e => {\n        const keyCode = e.keyCode;\n        if (e.isDefaultPrevented()) {\n          return;\n        }\n        if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45) {\n          if (undoManager.typing) {\n            addNonTypingUndoLevel(e);\n          }\n          return;\n        }\n        const modKey = e.ctrlKey && !e.altKey || e.metaKey;\n        if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !undoManager.typing && !modKey) {\n          undoManager.beforeChange();\n          setTyping(undoManager, true, locks);\n          undoManager.add({}, e);\n          isFirstTypedCharacter.set(true);\n          return;\n        }\n        const hasOnlyMetaOrCtrlModifier = Env.os.isMacOS() ? e.metaKey : e.ctrlKey && !e.altKey;\n        if (hasOnlyMetaOrCtrlModifier) {\n          undoManager.beforeChange();\n        }\n      });\n      editor.on('mousedown', e => {\n        if (undoManager.typing) {\n          addNonTypingUndoLevel(e);\n        }\n      });\n      const isInsertReplacementText = event => event.inputType === 'insertReplacementText';\n      const isInsertTextDataNull = event => event.inputType === 'insertText' && event.data === null;\n      const isInsertFromPasteOrDrop = event => event.inputType === 'insertFromPaste' || event.inputType === 'insertFromDrop';\n      editor.on('input', e => {\n        if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e) || isInsertFromPasteOrDrop(e))) {\n          addNonTypingUndoLevel(e);\n        }\n      });\n      editor.on('AddUndo Undo Redo ClearUndos', e => {\n        if (!e.isDefaultPrevented()) {\n          editor.nodeChanged();\n        }\n      });\n    };\n    const addKeyboardShortcuts = editor => {\n      editor.addShortcut('meta+z', '', 'Undo');\n      editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');\n    };\n\n    const UndoManager = editor => {\n      const beforeBookmark = value$2();\n      const locks = Cell(0);\n      const index = Cell(0);\n      const undoManager = {\n        data: [],\n        typing: false,\n        beforeChange: () => {\n          beforeChange(editor, locks, beforeBookmark);\n        },\n        add: (level, event) => {\n          return addUndoLevel(editor, undoManager, index, locks, beforeBookmark, level, event);\n        },\n        dispatchChange: () => {\n          editor.setDirty(true);\n          const level = createFromEditor(editor);\n          level.bookmark = getUndoBookmark(editor.selection);\n          editor.dispatch('change', {\n            level,\n            lastLevel: get$b(undoManager.data, index.get()).getOrUndefined()\n          });\n        },\n        undo: () => {\n          return undo(editor, undoManager, locks, index);\n        },\n        redo: () => {\n          return redo(editor, index, undoManager.data);\n        },\n        clear: () => {\n          clear(editor, undoManager, index);\n        },\n        reset: () => {\n          reset(editor, undoManager);\n        },\n        hasUndo: () => {\n          return hasUndo(editor, undoManager, index);\n        },\n        hasRedo: () => {\n          return hasRedo(editor, undoManager, index);\n        },\n        transact: callback => {\n          return transact(editor, undoManager, locks, callback);\n        },\n        ignore: callback => {\n          ignore(editor, locks, callback);\n        },\n        extra: (callback1, callback2) => {\n          extra(editor, undoManager, index, callback1, callback2);\n        }\n      };\n      if (!isRtc(editor)) {\n        registerEvents(editor, undoManager, locks);\n      }\n      addKeyboardShortcuts(editor);\n      return undoManager;\n    };\n\n    const nonTypingKeycodes = [\n      9,\n      27,\n      VK.HOME,\n      VK.END,\n      19,\n      20,\n      44,\n      144,\n      145,\n      33,\n      34,\n      45,\n      16,\n      17,\n      18,\n      91,\n      92,\n      93,\n      VK.DOWN,\n      VK.UP,\n      VK.LEFT,\n      VK.RIGHT\n    ].concat(Env.browser.isFirefox() ? [224] : []);\n    const placeholderAttr = 'data-mce-placeholder';\n    const isKeyboardEvent = e => e.type === 'keydown' || e.type === 'keyup';\n    const isDeleteEvent = e => {\n      const keyCode = e.keyCode;\n      return keyCode === VK.BACKSPACE || keyCode === VK.DELETE;\n    };\n    const isNonTypingKeyboardEvent = e => {\n      if (isKeyboardEvent(e)) {\n        const keyCode = e.keyCode;\n        return !isDeleteEvent(e) && (VK.metaKeyPressed(e) || e.altKey || keyCode >= 112 && keyCode <= 123 || contains$2(nonTypingKeycodes, keyCode));\n      } else {\n        return false;\n      }\n    };\n    const isTypingKeyboardEvent = e => isKeyboardEvent(e) && !(isDeleteEvent(e) || e.type === 'keyup' && e.keyCode === 229);\n    const isVisuallyEmpty = (dom, rootElm, forcedRootBlock) => {\n      if (isEmpty$2(SugarElement.fromDom(rootElm), false)) {\n        const firstElement = rootElm.firstElementChild;\n        if (!firstElement) {\n          return true;\n        } else if (dom.getStyle(rootElm.firstElementChild, 'padding-left') || dom.getStyle(rootElm.firstElementChild, 'padding-right')) {\n          return false;\n        } else {\n          return forcedRootBlock === firstElement.nodeName.toLowerCase();\n        }\n      } else {\n        return false;\n      }\n    };\n    const setup$q = editor => {\n      var _a;\n      const dom = editor.dom;\n      const rootBlock = getForcedRootBlock(editor);\n      const placeholder = (_a = getPlaceholder(editor)) !== null && _a !== void 0 ? _a : '';\n      const updatePlaceholder = (e, initial) => {\n        if (isNonTypingKeyboardEvent(e)) {\n          return;\n        }\n        const body = editor.getBody();\n        const showPlaceholder = isTypingKeyboardEvent(e) ? false : isVisuallyEmpty(dom, body, rootBlock);\n        const isPlaceholderShown = dom.getAttrib(body, placeholderAttr) !== '';\n        if (isPlaceholderShown !== showPlaceholder || initial) {\n          dom.setAttrib(body, placeholderAttr, showPlaceholder ? placeholder : null);\n          dom.setAttrib(body, 'aria-placeholder', showPlaceholder ? placeholder : null);\n          firePlaceholderToggle(editor, showPlaceholder);\n          editor.on(showPlaceholder ? 'keydown' : 'keyup', updatePlaceholder);\n          editor.off(showPlaceholder ? 'keyup' : 'keydown', updatePlaceholder);\n        }\n      };\n      if (isNotEmpty(placeholder)) {\n        editor.on('init', e => {\n          updatePlaceholder(e, true);\n          editor.on('change SetContent ExecCommand', updatePlaceholder);\n          editor.on('paste', e => Delay.setEditorTimeout(editor, () => updatePlaceholder(e)));\n        });\n      }\n    };\n\n    const blockPosition = (block, position) => ({\n      block,\n      position\n    });\n    const blockBoundary = (from, to) => ({\n      from,\n      to\n    });\n    const getBlockPosition = (rootNode, pos) => {\n      const rootElm = SugarElement.fromDom(rootNode);\n      const containerElm = SugarElement.fromDom(pos.container());\n      return getParentBlock$2(rootElm, containerElm).map(block => blockPosition(block, pos));\n    };\n    const isDifferentBlocks = blockBoundary => !eq(blockBoundary.from.block, blockBoundary.to.block);\n    const getClosestHost = (root, scope) => {\n      const isRoot = node => eq(node, root);\n      const isHost = node => isTableCell$2(node) || isContentEditableTrue$3(node.dom);\n      return closest$4(scope, isHost, isRoot).filter(isElement$7).getOr(root);\n    };\n    const hasSameHost = (rootNode, blockBoundary) => {\n      const root = SugarElement.fromDom(rootNode);\n      return eq(getClosestHost(root, blockBoundary.from.block), getClosestHost(root, blockBoundary.to.block));\n    };\n    const isEditable$1 = blockBoundary => isContentEditableFalse$b(blockBoundary.from.block.dom) === false && isContentEditableFalse$b(blockBoundary.to.block.dom) === false;\n    const hasValidBlocks = blockBoundary => {\n      const isValidBlock = block => isTextBlock$2(block) || hasBlockAttr(block.dom);\n      return isValidBlock(blockBoundary.from.block) && isValidBlock(blockBoundary.to.block);\n    };\n    const skipLastBr = (rootNode, forward, blockPosition) => {\n      if (isBr$6(blockPosition.position.getNode()) && !isEmpty$2(blockPosition.block)) {\n        return positionIn(false, blockPosition.block.dom).bind(lastPositionInBlock => {\n          if (lastPositionInBlock.isEqual(blockPosition.position)) {\n            return fromPosition(forward, rootNode, lastPositionInBlock).bind(to => getBlockPosition(rootNode, to));\n          } else {\n            return Optional.some(blockPosition);\n          }\n        }).getOr(blockPosition);\n      } else {\n        return blockPosition;\n      }\n    };\n    const readFromRange = (rootNode, forward, rng) => {\n      const fromBlockPos = getBlockPosition(rootNode, CaretPosition.fromRangeStart(rng));\n      const toBlockPos = fromBlockPos.bind(blockPos => fromPosition(forward, rootNode, blockPos.position).bind(to => getBlockPosition(rootNode, to).map(blockPos => skipLastBr(rootNode, forward, blockPos))));\n      return lift2(fromBlockPos, toBlockPos, blockBoundary).filter(blockBoundary => isDifferentBlocks(blockBoundary) && hasSameHost(rootNode, blockBoundary) && isEditable$1(blockBoundary) && hasValidBlocks(blockBoundary));\n    };\n    const read$1 = (rootNode, forward, rng) => rng.collapsed ? readFromRange(rootNode, forward, rng) : Optional.none();\n\n    const getChildrenUntilBlockBoundary = block => {\n      const children = children$1(block);\n      return findIndex$2(children, isBlock$2).fold(constant(children), index => children.slice(0, index));\n    };\n    const extractChildren = block => {\n      const children = getChildrenUntilBlockBoundary(block);\n      each$e(children, remove$5);\n      return children;\n    };\n    const removeEmptyRoot = (rootNode, block) => {\n      const parents = parentsAndSelf(block, rootNode);\n      return find$2(parents.reverse(), element => isEmpty$2(element)).each(remove$5);\n    };\n    const isEmptyBefore = el => filter$5(prevSiblings(el), el => !isEmpty$2(el)).length === 0;\n    const nestedBlockMerge = (rootNode, fromBlock, toBlock, insertionPoint) => {\n      if (isEmpty$2(toBlock)) {\n        fillWithPaddingBr(toBlock);\n        return firstPositionIn(toBlock.dom);\n      }\n      if (isEmptyBefore(insertionPoint) && isEmpty$2(fromBlock)) {\n        before$3(insertionPoint, SugarElement.fromTag('br'));\n      }\n      const position = prevPosition(toBlock.dom, CaretPosition.before(insertionPoint.dom));\n      each$e(extractChildren(fromBlock), child => {\n        before$3(insertionPoint, child);\n      });\n      removeEmptyRoot(rootNode, fromBlock);\n      return position;\n    };\n    const sidelongBlockMerge = (rootNode, fromBlock, toBlock) => {\n      if (isEmpty$2(toBlock)) {\n        if (isEmpty$2(fromBlock)) {\n          const getInlineToBlockDescendants = el => {\n            const helper = (node, elements) => firstChild(node).fold(() => elements, child => isInline$1(child) ? helper(child, elements.concat(shallow$1(child))) : elements);\n            return helper(el, []);\n          };\n          const newFromBlockDescendants = foldr(getInlineToBlockDescendants(toBlock), (element, descendant) => {\n            wrap$2(element, descendant);\n            return descendant;\n          }, createPaddingBr());\n          empty(fromBlock);\n          append$1(fromBlock, newFromBlockDescendants);\n        }\n        remove$5(toBlock);\n        return firstPositionIn(fromBlock.dom);\n      }\n      const position = lastPositionIn(toBlock.dom);\n      each$e(extractChildren(fromBlock), child => {\n        append$1(toBlock, child);\n      });\n      removeEmptyRoot(rootNode, fromBlock);\n      return position;\n    };\n    const findInsertionPoint = (toBlock, block) => {\n      const parentsAndSelf$1 = parentsAndSelf(block, toBlock);\n      return Optional.from(parentsAndSelf$1[parentsAndSelf$1.length - 1]);\n    };\n    const getInsertionPoint = (fromBlock, toBlock) => contains(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Optional.none();\n    const trimBr = (first, block) => {\n      positionIn(first, block.dom).bind(position => Optional.from(position.getNode())).map(SugarElement.fromDom).filter(isBr$5).each(remove$5);\n    };\n    const mergeBlockInto = (rootNode, fromBlock, toBlock) => {\n      trimBr(true, fromBlock);\n      trimBr(false, toBlock);\n      return getInsertionPoint(fromBlock, toBlock).fold(curry(sidelongBlockMerge, rootNode, fromBlock, toBlock), curry(nestedBlockMerge, rootNode, fromBlock, toBlock));\n    };\n    const mergeBlocks = (rootNode, forward, block1, block2) => forward ? mergeBlockInto(rootNode, block2, block1) : mergeBlockInto(rootNode, block1, block2);\n\n    const backspaceDelete$8 = (editor, forward) => {\n      const rootNode = SugarElement.fromDom(editor.getBody());\n      const position = read$1(rootNode.dom, forward, editor.selection.getRng()).map(blockBoundary => () => {\n        mergeBlocks(rootNode, forward, blockBoundary.from.block, blockBoundary.to.block).each(pos => {\n          editor.selection.setRng(pos.toRange());\n        });\n      });\n      return position;\n    };\n\n    const deleteRangeMergeBlocks = (rootNode, selection) => {\n      const rng = selection.getRng();\n      return lift2(getParentBlock$2(rootNode, SugarElement.fromDom(rng.startContainer)), getParentBlock$2(rootNode, SugarElement.fromDom(rng.endContainer)), (block1, block2) => {\n        if (!eq(block1, block2)) {\n          return Optional.some(() => {\n            rng.deleteContents();\n            mergeBlocks(rootNode, true, block1, block2).each(pos => {\n              selection.setRng(pos.toRange());\n            });\n          });\n        } else {\n          return Optional.none();\n        }\n      }).getOr(Optional.none());\n    };\n    const isRawNodeInTable = (root, rawNode) => {\n      const node = SugarElement.fromDom(rawNode);\n      const isRoot = curry(eq, root);\n      return ancestor$4(node, isTableCell$2, isRoot).isSome();\n    };\n    const isSelectionInTable = (root, rng) => isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer);\n    const isEverythingSelected = (root, rng) => {\n      const noPrevious = prevPosition(root.dom, CaretPosition.fromRangeStart(rng)).isNone();\n      const noNext = nextPosition(root.dom, CaretPosition.fromRangeEnd(rng)).isNone();\n      return !isSelectionInTable(root, rng) && noPrevious && noNext;\n    };\n    const emptyEditor = editor => {\n      return Optional.some(() => {\n        editor.setContent('');\n        editor.selection.setCursorLocation();\n      });\n    };\n    const deleteRange$2 = editor => {\n      const rootNode = SugarElement.fromDom(editor.getBody());\n      const rng = editor.selection.getRng();\n      return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection);\n    };\n    const backspaceDelete$7 = (editor, _forward) => editor.selection.isCollapsed() ? Optional.none() : deleteRange$2(editor);\n\n    const showCaret = (direction, editor, node, before, scrollIntoView) => Optional.from(editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView));\n    const getNodeRange = node => {\n      const rng = node.ownerDocument.createRange();\n      rng.selectNode(node);\n      return rng;\n    };\n    const selectNode = (editor, node) => {\n      const e = editor.dispatch('BeforeObjectSelected', { target: node });\n      if (e.isDefaultPrevented()) {\n        return Optional.none();\n      }\n      return Optional.some(getNodeRange(node));\n    };\n    const renderCaretAtRange = (editor, range, scrollIntoView) => {\n      const normalizedRange = normalizeRange(1, editor.getBody(), range);\n      const caretPosition = CaretPosition.fromRangeStart(normalizedRange);\n      const caretPositionNode = caretPosition.getNode();\n      if (isInlineFakeCaretTarget(caretPositionNode)) {\n        return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);\n      }\n      const caretPositionBeforeNode = caretPosition.getNode(true);\n      if (isInlineFakeCaretTarget(caretPositionBeforeNode)) {\n        return showCaret(1, editor, caretPositionBeforeNode, false, false);\n      }\n      const ceRoot = getContentEditableRoot$1(editor.dom.getRoot(), caretPosition.getNode());\n      if (isInlineFakeCaretTarget(ceRoot)) {\n        return showCaret(1, editor, ceRoot, false, scrollIntoView);\n      }\n      return Optional.none();\n    };\n    const renderRangeCaret = (editor, range, scrollIntoView) => range.collapsed ? renderCaretAtRange(editor, range, scrollIntoView).getOr(range) : range;\n\n    const isBeforeBoundary = pos => isBeforeContentEditableFalse(pos) || isBeforeMedia(pos);\n    const isAfterBoundary = pos => isAfterContentEditableFalse(pos) || isAfterMedia(pos);\n    const trimEmptyTextNode = (dom, node) => {\n      if (isText$a(node) && node.data.length === 0) {\n        dom.remove(node);\n      }\n    };\n    const deleteContentAndShowCaret = (editor, range, node, direction, forward, peekCaretPosition) => {\n      showCaret(direction, editor, peekCaretPosition.getNode(!forward), forward, true).each(caretRange => {\n        if (range.collapsed) {\n          const deleteRange = range.cloneRange();\n          if (forward) {\n            deleteRange.setEnd(caretRange.startContainer, caretRange.startOffset);\n          } else {\n            deleteRange.setStart(caretRange.endContainer, caretRange.endOffset);\n          }\n          deleteRange.deleteContents();\n        } else {\n          range.deleteContents();\n        }\n        editor.selection.setRng(caretRange);\n      });\n      trimEmptyTextNode(editor.dom, node);\n    };\n    const deleteBoundaryText = (editor, forward) => {\n      const range = editor.selection.getRng();\n      if (!isText$a(range.commonAncestorContainer)) {\n        return Optional.none();\n      }\n      const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n      const caretWalker = CaretWalker(editor.getBody());\n      const getNextPosFn = curry(getVisualCaretPosition, forward ? caretWalker.next : caretWalker.prev);\n      const isBeforeFn = forward ? isBeforeBoundary : isAfterBoundary;\n      const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n      const nextCaretPosition = getNextPosFn(caretPosition);\n      const normalizedNextCaretPosition = nextCaretPosition ? normalizePosition(forward, nextCaretPosition) : nextCaretPosition;\n      if (!normalizedNextCaretPosition || !isMoveInsideSameBlock(caretPosition, normalizedNextCaretPosition)) {\n        return Optional.none();\n      } else if (isBeforeFn(normalizedNextCaretPosition)) {\n        return Optional.some(() => deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, normalizedNextCaretPosition));\n      }\n      const peekCaretPosition = getNextPosFn(normalizedNextCaretPosition);\n      if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n        if (isMoveInsideSameBlock(normalizedNextCaretPosition, peekCaretPosition)) {\n          return Optional.some(() => deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, peekCaretPosition));\n        }\n      }\n      return Optional.none();\n    };\n    const backspaceDelete$6 = (editor, forward) => deleteBoundaryText(editor, forward);\n\n    const getEdgeCefPosition = (editor, atStart) => {\n      const root = editor.getBody();\n      return atStart ? firstPositionIn(root).filter(isBeforeContentEditableFalse) : lastPositionIn(root).filter(isAfterContentEditableFalse);\n    };\n    const isCefAtEdgeSelected = editor => {\n      const rng = editor.selection.getRng();\n      return !rng.collapsed && (getEdgeCefPosition(editor, true).exists(pos => pos.isEqual(CaretPosition.fromRangeStart(rng))) || getEdgeCefPosition(editor, false).exists(pos => pos.isEqual(CaretPosition.fromRangeEnd(rng))));\n    };\n\n    const isCompoundElement = node => isNonNullable(node) && (isTableCell$2(SugarElement.fromDom(node)) || isListItem$1(SugarElement.fromDom(node)));\n    const DeleteAction = Adt.generate([\n      { remove: ['element'] },\n      { moveToElement: ['element'] },\n      { moveToPosition: ['position'] }\n    ]);\n    const isAtContentEditableBlockCaret = (forward, from) => {\n      const elm = from.getNode(!forward);\n      const caretLocation = forward ? 'after' : 'before';\n      return isElement$6(elm) && elm.getAttribute('data-mce-caret') === caretLocation;\n    };\n    const isDeleteFromCefDifferentBlocks = (root, forward, from, to) => {\n      const inSameBlock = elm => isInline$1(SugarElement.fromDom(elm)) && !isInSameBlock(from, to, root);\n      return getRelativeCefElm(!forward, from).fold(() => getRelativeCefElm(forward, to).fold(never, inSameBlock), inSameBlock);\n    };\n    const deleteEmptyBlockOrMoveToCef = (root, forward, from, to) => {\n      const toCefElm = to.getNode(!forward);\n      return getParentBlock$2(SugarElement.fromDom(root), SugarElement.fromDom(from.getNode())).map(blockElm => isEmpty$2(blockElm) ? DeleteAction.remove(blockElm.dom) : DeleteAction.moveToElement(toCefElm)).orThunk(() => Optional.some(DeleteAction.moveToElement(toCefElm)));\n    };\n    const findCefPosition = (root, forward, from) => fromPosition(forward, root, from).bind(to => {\n      if (isCompoundElement(to.getNode())) {\n        return Optional.none();\n      } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to)) {\n        return Optional.none();\n      } else if (forward && isContentEditableFalse$b(to.getNode())) {\n        return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n      } else if (!forward && isContentEditableFalse$b(to.getNode(true))) {\n        return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n      } else if (forward && isAfterContentEditableFalse(from)) {\n        return Optional.some(DeleteAction.moveToPosition(to));\n      } else if (!forward && isBeforeContentEditableFalse(from)) {\n        return Optional.some(DeleteAction.moveToPosition(to));\n      } else {\n        return Optional.none();\n      }\n    });\n    const getContentEditableBlockAction = (forward, elm) => {\n      if (isNullable(elm)) {\n        return Optional.none();\n      } else if (forward && isContentEditableFalse$b(elm.nextSibling)) {\n        return Optional.some(DeleteAction.moveToElement(elm.nextSibling));\n      } else if (!forward && isContentEditableFalse$b(elm.previousSibling)) {\n        return Optional.some(DeleteAction.moveToElement(elm.previousSibling));\n      } else {\n        return Optional.none();\n      }\n    };\n    const skipMoveToActionFromInlineCefToContent = (root, from, deleteAction) => deleteAction.fold(elm => Optional.some(DeleteAction.remove(elm)), elm => Optional.some(DeleteAction.moveToElement(elm)), to => {\n      if (isInSameBlock(from, to, root)) {\n        return Optional.none();\n      } else {\n        return Optional.some(DeleteAction.moveToPosition(to));\n      }\n    });\n    const getContentEditableAction = (root, forward, from) => {\n      if (isAtContentEditableBlockCaret(forward, from)) {\n        return getContentEditableBlockAction(forward, from.getNode(!forward)).orThunk(() => findCefPosition(root, forward, from));\n      } else {\n        return findCefPosition(root, forward, from).bind(deleteAction => skipMoveToActionFromInlineCefToContent(root, from, deleteAction));\n      }\n    };\n    const read = (root, forward, rng) => {\n      const normalizedRange = normalizeRange(forward ? 1 : -1, root, rng);\n      const from = CaretPosition.fromRangeStart(normalizedRange);\n      const rootElement = SugarElement.fromDom(root);\n      if (!forward && isAfterContentEditableFalse(from)) {\n        return Optional.some(DeleteAction.remove(from.getNode(true)));\n      } else if (forward && isBeforeContentEditableFalse(from)) {\n        return Optional.some(DeleteAction.remove(from.getNode()));\n      } else if (!forward && isBeforeContentEditableFalse(from) && isAfterBr(rootElement, from)) {\n        return findPreviousBr(rootElement, from).map(br => DeleteAction.remove(br.getNode()));\n      } else if (forward && isAfterContentEditableFalse(from) && isBeforeBr$1(rootElement, from)) {\n        return findNextBr(rootElement, from).map(br => DeleteAction.remove(br.getNode()));\n      } else {\n        return getContentEditableAction(root, forward, from);\n      }\n    };\n\n    const deleteElement$1 = (editor, forward) => element => {\n      editor._selectionOverrides.hideFakeCaret();\n      deleteElement$2(editor, forward, SugarElement.fromDom(element));\n      return true;\n    };\n    const moveToElement = (editor, forward) => element => {\n      const pos = forward ? CaretPosition.before(element) : CaretPosition.after(element);\n      editor.selection.setRng(pos.toRange());\n      return true;\n    };\n    const moveToPosition = editor => pos => {\n      editor.selection.setRng(pos.toRange());\n      return true;\n    };\n    const getAncestorCe = (editor, node) => Optional.from(getContentEditableRoot$1(editor.getBody(), node));\n    const backspaceDeleteCaret = (editor, forward) => {\n      const selectedNode = editor.selection.getNode();\n      return getAncestorCe(editor, selectedNode).filter(isContentEditableFalse$b).fold(() => read(editor.getBody(), forward, editor.selection.getRng()).map(deleteAction => () => deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor))), () => Optional.some(noop));\n    };\n    const deleteOffscreenSelection = rootElement => {\n      each$e(descendants(rootElement, '.mce-offscreen-selection'), remove$5);\n    };\n    const backspaceDeleteRange = (editor, forward) => {\n      const selectedNode = editor.selection.getNode();\n      if (isContentEditableFalse$b(selectedNode) && !isTableCell$3(selectedNode)) {\n        const hasCefAncestor = getAncestorCe(editor, selectedNode.parentNode).filter(isContentEditableFalse$b);\n        return hasCefAncestor.fold(() => Optional.some(() => {\n          deleteOffscreenSelection(SugarElement.fromDom(editor.getBody()));\n          deleteElement$2(editor, forward, SugarElement.fromDom(editor.selection.getNode()));\n          paddEmptyBody(editor);\n        }), () => Optional.some(noop));\n      }\n      if (isCefAtEdgeSelected(editor)) {\n        return Optional.some(() => {\n          deleteRangeContents(editor, editor.selection.getRng(), SugarElement.fromDom(editor.getBody()));\n        });\n      }\n      return Optional.none();\n    };\n    const paddEmptyElement = editor => {\n      const dom = editor.dom, selection = editor.selection;\n      const ceRoot = getContentEditableRoot$1(editor.getBody(), selection.getNode());\n      if (isContentEditableTrue$3(ceRoot) && dom.isBlock(ceRoot) && dom.isEmpty(ceRoot)) {\n        const br = dom.create('br', { 'data-mce-bogus': '1' });\n        dom.setHTML(ceRoot, '');\n        ceRoot.appendChild(br);\n        selection.setRng(CaretPosition.before(br).toRange());\n      }\n      return true;\n    };\n    const backspaceDelete$5 = (editor, forward) => {\n      if (editor.selection.isCollapsed()) {\n        return backspaceDeleteCaret(editor, forward);\n      } else {\n        return backspaceDeleteRange(editor, forward);\n      }\n    };\n\n    const deleteCaret$2 = (editor, forward) => {\n      const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n      return fromPosition(forward, editor.getBody(), fromPos).filter(pos => forward ? isBeforeImageBlock(pos) : isAfterImageBlock(pos)).bind(pos => getChildNodeAtRelativeOffset(forward ? 0 : -1, pos)).map(elm => () => editor.selection.select(elm));\n    };\n    const backspaceDelete$4 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret$2(editor, forward) : Optional.none();\n\n    const isText$2 = isText$a;\n    const startsWithCaretContainer = node => isText$2(node) && node.data[0] === ZWSP$1;\n    const endsWithCaretContainer = node => isText$2(node) && node.data[node.data.length - 1] === ZWSP$1;\n    const createZwsp = node => {\n      var _a;\n      const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n      return doc.createTextNode(ZWSP$1);\n    };\n    const insertBefore = node => {\n      var _a;\n      if (isText$2(node.previousSibling)) {\n        if (endsWithCaretContainer(node.previousSibling)) {\n          return node.previousSibling;\n        } else {\n          node.previousSibling.appendData(ZWSP$1);\n          return node.previousSibling;\n        }\n      } else if (isText$2(node)) {\n        if (startsWithCaretContainer(node)) {\n          return node;\n        } else {\n          node.insertData(0, ZWSP$1);\n          return node;\n        }\n      } else {\n        const newNode = createZwsp(node);\n        (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(newNode, node);\n        return newNode;\n      }\n    };\n    const insertAfter = node => {\n      var _a, _b;\n      if (isText$2(node.nextSibling)) {\n        if (startsWithCaretContainer(node.nextSibling)) {\n          return node.nextSibling;\n        } else {\n          node.nextSibling.insertData(0, ZWSP$1);\n          return node.nextSibling;\n        }\n      } else if (isText$2(node)) {\n        if (endsWithCaretContainer(node)) {\n          return node;\n        } else {\n          node.appendData(ZWSP$1);\n          return node;\n        }\n      } else {\n        const newNode = createZwsp(node);\n        if (node.nextSibling) {\n          (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(newNode, node.nextSibling);\n        } else {\n          (_b = node.parentNode) === null || _b === void 0 ? void 0 : _b.appendChild(newNode);\n        }\n        return newNode;\n      }\n    };\n    const insertInline = (before, node) => before ? insertBefore(node) : insertAfter(node);\n    const insertInlineBefore = curry(insertInline, true);\n    const insertInlineAfter = curry(insertInline, false);\n\n    const insertInlinePos = (pos, before) => {\n      if (isText$a(pos.container())) {\n        return insertInline(before, pos.container());\n      } else {\n        return insertInline(before, pos.getNode());\n      }\n    };\n    const isPosCaretContainer = (pos, caret) => {\n      const caretNode = caret.get();\n      return caretNode && pos.container() === caretNode && isCaretContainerInline(caretNode);\n    };\n    const renderCaret = (caret, location) => location.fold(element => {\n      remove$3(caret.get());\n      const text = insertInlineBefore(element);\n      caret.set(text);\n      return Optional.some(CaretPosition(text, text.length - 1));\n    }, element => firstPositionIn(element).map(pos => {\n      if (!isPosCaretContainer(pos, caret)) {\n        remove$3(caret.get());\n        const text = insertInlinePos(pos, true);\n        caret.set(text);\n        return CaretPosition(text, 1);\n      } else {\n        const node = caret.get();\n        return CaretPosition(node, 1);\n      }\n    }), element => lastPositionIn(element).map(pos => {\n      if (!isPosCaretContainer(pos, caret)) {\n        remove$3(caret.get());\n        const text = insertInlinePos(pos, false);\n        caret.set(text);\n        return CaretPosition(text, text.length - 1);\n      } else {\n        const node = caret.get();\n        return CaretPosition(node, node.length - 1);\n      }\n    }), element => {\n      remove$3(caret.get());\n      const text = insertInlineAfter(element);\n      caret.set(text);\n      return Optional.some(CaretPosition(text, 1));\n    });\n\n    const evaluateUntil = (fns, args) => {\n      for (let i = 0; i < fns.length; i++) {\n        const result = fns[i].apply(null, args);\n        if (result.isSome()) {\n          return result;\n        }\n      }\n      return Optional.none();\n    };\n\n    const Location = Adt.generate([\n      { before: ['element'] },\n      { start: ['element'] },\n      { end: ['element'] },\n      { after: ['element'] }\n    ]);\n    const rescope$1 = (rootNode, node) => {\n      const parentBlock = getParentBlock$3(node, rootNode);\n      return parentBlock ? parentBlock : rootNode;\n    };\n    const before = (isInlineTarget, rootNode, pos) => {\n      const nPos = normalizeForwards(pos);\n      const scope = rescope$1(rootNode, nPos.container());\n      return findRootInline(isInlineTarget, scope, nPos).fold(() => nextPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(inline => Location.before(inline)), Optional.none);\n    };\n    const isNotInsideFormatCaretContainer = (rootNode, elm) => getParentCaretContainer(rootNode, elm) === null;\n    const findInsideRootInline = (isInlineTarget, rootNode, pos) => findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));\n    const start$1 = (isInlineTarget, rootNode, pos) => {\n      const nPos = normalizeBackwards(pos);\n      return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(inline => {\n        const prevPos = prevPosition(inline, nPos);\n        return prevPos.isNone() ? Optional.some(Location.start(inline)) : Optional.none();\n      });\n    };\n    const end = (isInlineTarget, rootNode, pos) => {\n      const nPos = normalizeForwards(pos);\n      return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(inline => {\n        const nextPos = nextPosition(inline, nPos);\n        return nextPos.isNone() ? Optional.some(Location.end(inline)) : Optional.none();\n      });\n    };\n    const after = (isInlineTarget, rootNode, pos) => {\n      const nPos = normalizeBackwards(pos);\n      const scope = rescope$1(rootNode, nPos.container());\n      return findRootInline(isInlineTarget, scope, nPos).fold(() => prevPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(inline => Location.after(inline)), Optional.none);\n    };\n    const isValidLocation = location => !isRtl(getElement(location));\n    const readLocation = (isInlineTarget, rootNode, pos) => {\n      const location = evaluateUntil([\n        before,\n        start$1,\n        end,\n        after\n      ], [\n        isInlineTarget,\n        rootNode,\n        pos\n      ]);\n      return location.filter(isValidLocation);\n    };\n    const getElement = location => location.fold(identity, identity, identity, identity);\n    const getName = location => location.fold(constant('before'), constant('start'), constant('end'), constant('after'));\n    const outside = location => location.fold(Location.before, Location.before, Location.after, Location.after);\n    const inside = location => location.fold(Location.start, Location.start, Location.end, Location.end);\n    const isEq = (location1, location2) => getName(location1) === getName(location2) && getElement(location1) === getElement(location2);\n    const betweenInlines = (forward, isInlineTarget, rootNode, from, to, location) => lift2(findRootInline(isInlineTarget, rootNode, from), findRootInline(isInlineTarget, rootNode, to), (fromInline, toInline) => {\n      if (fromInline !== toInline && hasSameParentBlock(rootNode, fromInline, toInline)) {\n        return Location.after(forward ? fromInline : toInline);\n      } else {\n        return location;\n      }\n    }).getOr(location);\n    const skipNoMovement = (fromLocation, toLocation) => fromLocation.fold(always, fromLocation => !isEq(fromLocation, toLocation));\n    const findLocationTraverse = (forward, isInlineTarget, rootNode, fromLocation, pos) => {\n      const from = normalizePosition(forward, pos);\n      const to = fromPosition(forward, rootNode, from).map(curry(normalizePosition, forward));\n      const location = to.fold(() => fromLocation.map(outside), to => readLocation(isInlineTarget, rootNode, to).map(curry(betweenInlines, forward, isInlineTarget, rootNode, from, to)).filter(curry(skipNoMovement, fromLocation)));\n      return location.filter(isValidLocation);\n    };\n    const findLocationSimple = (forward, location) => {\n      if (forward) {\n        return location.fold(compose(Optional.some, Location.start), Optional.none, compose(Optional.some, Location.after), Optional.none);\n      } else {\n        return location.fold(Optional.none, compose(Optional.some, Location.before), Optional.none, compose(Optional.some, Location.end));\n      }\n    };\n    const findLocation$1 = (forward, isInlineTarget, rootNode, pos) => {\n      const from = normalizePosition(forward, pos);\n      const fromLocation = readLocation(isInlineTarget, rootNode, from);\n      return readLocation(isInlineTarget, rootNode, from).bind(curry(findLocationSimple, forward)).orThunk(() => findLocationTraverse(forward, isInlineTarget, rootNode, fromLocation, pos));\n    };\n\n    const hasSelectionModifyApi = editor => {\n      return isFunction(editor.selection.getSel().modify);\n    };\n    const moveRel = (forward, selection, pos) => {\n      const delta = forward ? 1 : -1;\n      selection.setRng(CaretPosition(pos.container(), pos.offset() + delta).toRange());\n      selection.getSel().modify('move', forward ? 'forward' : 'backward', 'word');\n      return true;\n    };\n    const moveByWord = (forward, editor) => {\n      const rng = editor.selection.getRng();\n      const pos = forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n      if (!hasSelectionModifyApi(editor)) {\n        return false;\n      } else if (forward && isBeforeInline(pos)) {\n        return moveRel(true, editor.selection, pos);\n      } else if (!forward && isAfterInline(pos)) {\n        return moveRel(false, editor.selection, pos);\n      } else {\n        return false;\n      }\n    };\n\n    var BreakType;\n    (function (BreakType) {\n      BreakType[BreakType['Br'] = 0] = 'Br';\n      BreakType[BreakType['Block'] = 1] = 'Block';\n      BreakType[BreakType['Wrap'] = 2] = 'Wrap';\n      BreakType[BreakType['Eol'] = 3] = 'Eol';\n    }(BreakType || (BreakType = {})));\n    const flip = (direction, positions) => direction === HDirection.Backwards ? reverse(positions) : positions;\n    const walk$1 = (direction, caretWalker, pos) => direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos);\n    const getBreakType = (scope, direction, currentPos, nextPos) => {\n      if (isBr$6(nextPos.getNode(direction === HDirection.Forwards))) {\n        return BreakType.Br;\n      } else if (isInSameBlock(currentPos, nextPos) === false) {\n        return BreakType.Block;\n      } else {\n        return BreakType.Wrap;\n      }\n    };\n    const getPositionsUntil = (predicate, direction, scope, start) => {\n      const caretWalker = CaretWalker(scope);\n      let currentPos = start;\n      const positions = [];\n      while (currentPos) {\n        const nextPos = walk$1(direction, caretWalker, currentPos);\n        if (!nextPos) {\n          break;\n        }\n        if (isBr$6(nextPos.getNode(false))) {\n          if (direction === HDirection.Forwards) {\n            return {\n              positions: flip(direction, positions).concat([nextPos]),\n              breakType: BreakType.Br,\n              breakAt: Optional.some(nextPos)\n            };\n          } else {\n            return {\n              positions: flip(direction, positions),\n              breakType: BreakType.Br,\n              breakAt: Optional.some(nextPos)\n            };\n          }\n        }\n        if (!nextPos.isVisible()) {\n          currentPos = nextPos;\n          continue;\n        }\n        if (predicate(currentPos, nextPos)) {\n          const breakType = getBreakType(scope, direction, currentPos, nextPos);\n          return {\n            positions: flip(direction, positions),\n            breakType,\n            breakAt: Optional.some(nextPos)\n          };\n        }\n        positions.push(nextPos);\n        currentPos = nextPos;\n      }\n      return {\n        positions: flip(direction, positions),\n        breakType: BreakType.Eol,\n        breakAt: Optional.none()\n      };\n    };\n    const getAdjacentLinePositions = (direction, getPositionsUntilBreak, scope, start) => getPositionsUntilBreak(scope, start).breakAt.map(pos => {\n      const positions = getPositionsUntilBreak(scope, pos).positions;\n      return direction === HDirection.Backwards ? positions.concat(pos) : [pos].concat(positions);\n    }).getOr([]);\n    const findClosestHorizontalPositionFromPoint = (positions, x) => foldl(positions, (acc, newPos) => acc.fold(() => Optional.some(newPos), lastPos => lift2(head(lastPos.getClientRects()), head(newPos.getClientRects()), (lastRect, newRect) => {\n      const lastDist = Math.abs(x - lastRect.left);\n      const newDist = Math.abs(x - newRect.left);\n      return newDist <= lastDist ? newPos : lastPos;\n    }).or(acc)), Optional.none());\n    const findClosestHorizontalPosition = (positions, pos) => head(pos.getClientRects()).bind(targetRect => findClosestHorizontalPositionFromPoint(positions, targetRect.left));\n    const getPositionsUntilPreviousLine = curry(getPositionsUntil, CaretPosition.isAbove, -1);\n    const getPositionsUntilNextLine = curry(getPositionsUntil, CaretPosition.isBelow, 1);\n    const getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine);\n    const getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine);\n    const isAtFirstLine = (scope, pos) => getPositionsUntilPreviousLine(scope, pos).breakAt.isNone();\n    const isAtLastLine = (scope, pos) => getPositionsUntilNextLine(scope, pos).breakAt.isNone();\n    const getFirstLinePositions = scope => firstPositionIn(scope).map(pos => [pos].concat(getPositionsUntilNextLine(scope, pos).positions)).getOr([]);\n    const getLastLinePositions = scope => lastPositionIn(scope).map(pos => getPositionsUntilPreviousLine(scope, pos).positions.concat(pos)).getOr([]);\n    const getClosestPositionAbove = (scope, pos) => findClosestHorizontalPosition(getPositionsAbove(scope, pos), pos);\n    const getClosestPositionBelow = (scope, pos) => findClosestHorizontalPosition(getPositionsBelow(scope, pos), pos);\n\n    const isContentEditableFalse$4 = isContentEditableFalse$b;\n    const distanceToRectLeft$1 = (clientRect, clientX) => Math.abs(clientRect.left - clientX);\n    const distanceToRectRight$1 = (clientRect, clientX) => Math.abs(clientRect.right - clientX);\n    const isNodeClientRect = rect => hasNonNullableKey(rect, 'node');\n    const findClosestClientRect = (clientRects, clientX) => reduce(clientRects, (oldClientRect, clientRect) => {\n      const oldDistance = Math.min(distanceToRectLeft$1(oldClientRect, clientX), distanceToRectRight$1(oldClientRect, clientX));\n      const newDistance = Math.min(distanceToRectLeft$1(clientRect, clientX), distanceToRectRight$1(clientRect, clientX));\n      if (newDistance === oldDistance && isNodeClientRect(clientRect) && isContentEditableFalse$4(clientRect.node)) {\n        return clientRect;\n      }\n      if (newDistance < oldDistance) {\n        return clientRect;\n      }\n      return oldClientRect;\n    });\n\n    const getNodeClientRects = node => {\n      const toArrayWithNode = clientRects => {\n        return map$3(clientRects, rect => {\n          const clientRect = clone$1(rect);\n          clientRect.node = node;\n          return clientRect;\n        });\n      };\n      if (isElement$6(node)) {\n        return toArrayWithNode(node.getClientRects());\n      } else if (isText$a(node)) {\n        const rng = node.ownerDocument.createRange();\n        rng.setStart(node, 0);\n        rng.setEnd(node, node.data.length);\n        return toArrayWithNode(rng.getClientRects());\n      } else {\n        return [];\n      }\n    };\n    const getClientRects = nodes => bind$3(nodes, getNodeClientRects);\n\n    var VDirection;\n    (function (VDirection) {\n      VDirection[VDirection['Up'] = -1] = 'Up';\n      VDirection[VDirection['Down'] = 1] = 'Down';\n    }(VDirection || (VDirection = {})));\n    const findUntil = (direction, root, predicateFn, node) => {\n      let currentNode = node;\n      while (currentNode = findNode(currentNode, direction, isEditableCaretCandidate$1, root)) {\n        if (predicateFn(currentNode)) {\n          return;\n        }\n      }\n    };\n    const walkUntil = (direction, isAboveFn, isBeflowFn, root, predicateFn, caretPosition) => {\n      let line = 0;\n      const result = [];\n      const add = node => {\n        let clientRects = getClientRects([node]);\n        if (direction === -1) {\n          clientRects = clientRects.reverse();\n        }\n        for (let i = 0; i < clientRects.length; i++) {\n          const clientRect = clientRects[i];\n          if (isBeflowFn(clientRect, targetClientRect)) {\n            continue;\n          }\n          if (result.length > 0 && isAboveFn(clientRect, last$2(result))) {\n            line++;\n          }\n          clientRect.line = line;\n          if (predicateFn(clientRect)) {\n            return true;\n          }\n          result.push(clientRect);\n        }\n        return false;\n      };\n      const targetClientRect = last$2(caretPosition.getClientRects());\n      if (!targetClientRect) {\n        return result;\n      }\n      const node = caretPosition.getNode();\n      if (node) {\n        add(node);\n        findUntil(direction, root, add, node);\n      }\n      return result;\n    };\n    const aboveLineNumber = (lineNumber, clientRect) => clientRect.line > lineNumber;\n    const isLineNumber = (lineNumber, clientRect) => clientRect.line === lineNumber;\n    const upUntil = curry(walkUntil, VDirection.Up, isAbove$1, isBelow$1);\n    const downUntil = curry(walkUntil, VDirection.Down, isBelow$1, isAbove$1);\n    const getLastClientRect = caretPosition => {\n      return last$2(caretPosition.getClientRects());\n    };\n    const positionsUntil = (direction, root, predicateFn, node) => {\n      const caretWalker = CaretWalker(root);\n      let walkFn;\n      let isBelowFn;\n      let isAboveFn;\n      let caretPosition;\n      const result = [];\n      let line = 0;\n      if (direction === 1) {\n        walkFn = caretWalker.next;\n        isBelowFn = isBelow$1;\n        isAboveFn = isAbove$1;\n        caretPosition = CaretPosition.after(node);\n      } else {\n        walkFn = caretWalker.prev;\n        isBelowFn = isAbove$1;\n        isAboveFn = isBelow$1;\n        caretPosition = CaretPosition.before(node);\n      }\n      const targetClientRect = getLastClientRect(caretPosition);\n      do {\n        if (!caretPosition.isVisible()) {\n          continue;\n        }\n        const rect = getLastClientRect(caretPosition);\n        if (isAboveFn(rect, targetClientRect)) {\n          continue;\n        }\n        if (result.length > 0 && isBelowFn(rect, last$2(result))) {\n          line++;\n        }\n        const clientRect = clone$1(rect);\n        clientRect.position = caretPosition;\n        clientRect.line = line;\n        if (predicateFn(clientRect)) {\n          return result;\n        }\n        result.push(clientRect);\n      } while (caretPosition = walkFn(caretPosition));\n      return result;\n    };\n    const isAboveLine = lineNumber => clientRect => aboveLineNumber(lineNumber, clientRect);\n    const isLine = lineNumber => clientRect => isLineNumber(lineNumber, clientRect);\n\n    const moveToRange = (editor, rng) => {\n      editor.selection.setRng(rng);\n      scrollRangeIntoView(editor, editor.selection.getRng());\n    };\n    const renderRangeCaretOpt = (editor, range, scrollIntoView) => Optional.some(renderRangeCaret(editor, range, scrollIntoView));\n    const moveHorizontally = (editor, direction, range, isBefore, isAfter, isElement) => {\n      const forwards = direction === HDirection.Forwards;\n      const caretWalker = CaretWalker(editor.getBody());\n      const getNextPosFn = curry(getVisualCaretPosition, forwards ? caretWalker.next : caretWalker.prev);\n      const isBeforeFn = forwards ? isBefore : isAfter;\n      if (!range.collapsed) {\n        const node = getSelectedNode(range);\n        if (isElement(node)) {\n          return showCaret(direction, editor, node, direction === HDirection.Backwards, false);\n        } else if (isCefAtEdgeSelected(editor)) {\n          const newRange = range.cloneRange();\n          newRange.collapse(direction === HDirection.Backwards);\n          return Optional.from(newRange);\n        }\n      }\n      const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n      if (isBeforeFn(caretPosition)) {\n        return selectNode(editor, caretPosition.getNode(!forwards));\n      }\n      let nextCaretPosition = getNextPosFn(caretPosition);\n      const rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);\n      if (!nextCaretPosition) {\n        return rangeIsInContainerBlock ? Optional.some(range) : Optional.none();\n      } else {\n        nextCaretPosition = normalizePosition(forwards, nextCaretPosition);\n      }\n      if (isBeforeFn(nextCaretPosition)) {\n        return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, false);\n      }\n      const peekCaretPosition = getNextPosFn(nextCaretPosition);\n      if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n        if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n          return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, false);\n        }\n      }\n      if (rangeIsInContainerBlock) {\n        return renderRangeCaretOpt(editor, nextCaretPosition.toRange(), false);\n      }\n      return Optional.none();\n    };\n    const moveVertically = (editor, direction, range, isBefore, isAfter, isElement) => {\n      const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n      const caretClientRect = last$2(caretPosition.getClientRects());\n      const forwards = direction === VDirection.Down;\n      const root = editor.getBody();\n      if (!caretClientRect) {\n        return Optional.none();\n      }\n      if (isCefAtEdgeSelected(editor)) {\n        const caretPosition = forwards ? CaretPosition.fromRangeEnd(range) : CaretPosition.fromRangeStart(range);\n        const getClosestFn = !forwards ? getClosestPositionAbove : getClosestPositionBelow;\n        return getClosestFn(root, caretPosition).orThunk(() => Optional.from(caretPosition)).map(pos => pos.toRange());\n      }\n      const walkerFn = forwards ? downUntil : upUntil;\n      const linePositions = walkerFn(root, isAboveLine(1), caretPosition);\n      const nextLinePositions = filter$5(linePositions, isLine(1));\n      const clientX = caretClientRect.left;\n      const nextLineRect = findClosestClientRect(nextLinePositions, clientX);\n      if (nextLineRect && isElement(nextLineRect.node)) {\n        const dist1 = Math.abs(clientX - nextLineRect.left);\n        const dist2 = Math.abs(clientX - nextLineRect.right);\n        return showCaret(direction, editor, nextLineRect.node, dist1 < dist2, false);\n      }\n      let currentNode;\n      if (isBefore(caretPosition)) {\n        currentNode = caretPosition.getNode();\n      } else if (isAfter(caretPosition)) {\n        currentNode = caretPosition.getNode(true);\n      } else {\n        currentNode = getSelectedNode(range);\n      }\n      if (currentNode) {\n        const caretPositions = positionsUntil(direction, root, isAboveLine(1), currentNode);\n        let closestNextLineRect = findClosestClientRect(filter$5(caretPositions, isLine(1)), clientX);\n        if (closestNextLineRect) {\n          return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false);\n        }\n        closestNextLineRect = last$2(filter$5(caretPositions, isLine(0)));\n        if (closestNextLineRect) {\n          return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false);\n        }\n      }\n      if (nextLinePositions.length === 0) {\n        return getLineEndPoint(editor, forwards).filter(forwards ? isAfter : isBefore).map(pos => renderRangeCaret(editor, pos.toRange(), false));\n      }\n      return Optional.none();\n    };\n    const getLineEndPoint = (editor, forward) => {\n      const rng = editor.selection.getRng();\n      const from = forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n      const host = getEditingHost(from.container(), editor.getBody());\n      if (forward) {\n        const lineInfo = getPositionsUntilNextLine(host, from);\n        return last$3(lineInfo.positions);\n      } else {\n        const lineInfo = getPositionsUntilPreviousLine(host, from);\n        return head(lineInfo.positions);\n      }\n    };\n    const moveToLineEndPoint$3 = (editor, forward, isElementPosition) => getLineEndPoint(editor, forward).filter(isElementPosition).exists(pos => {\n      editor.selection.setRng(pos.toRange());\n      return true;\n    });\n\n    const setCaretPosition = (editor, pos) => {\n      const rng = editor.dom.createRng();\n      rng.setStart(pos.container(), pos.offset());\n      rng.setEnd(pos.container(), pos.offset());\n      editor.selection.setRng(rng);\n    };\n    const setSelected = (state, elm) => {\n      if (state) {\n        elm.setAttribute('data-mce-selected', 'inline-boundary');\n      } else {\n        elm.removeAttribute('data-mce-selected');\n      }\n    };\n    const renderCaretLocation = (editor, caret, location) => renderCaret(caret, location).map(pos => {\n      setCaretPosition(editor, pos);\n      return location;\n    });\n    const getPositionFromRange = (range, root, forward) => {\n      const start = CaretPosition.fromRangeStart(range);\n      if (range.collapsed) {\n        return start;\n      } else {\n        const end = CaretPosition.fromRangeEnd(range);\n        return forward ? prevPosition(root, end).getOr(end) : nextPosition(root, start).getOr(start);\n      }\n    };\n    const findLocation = (editor, caret, forward) => {\n      const rootNode = editor.getBody();\n      const from = getPositionFromRange(editor.selection.getRng(), rootNode, forward);\n      const isInlineTarget$1 = curry(isInlineTarget, editor);\n      const location = findLocation$1(forward, isInlineTarget$1, rootNode, from);\n      return location.bind(location => renderCaretLocation(editor, caret, location));\n    };\n    const toggleInlines = (isInlineTarget, dom, elms) => {\n      const inlineBoundaries = map$3(descendants(SugarElement.fromDom(dom.getRoot()), '*[data-mce-selected=\"inline-boundary\"]'), e => e.dom);\n      const selectedInlines = filter$5(inlineBoundaries, isInlineTarget);\n      const targetInlines = filter$5(elms, isInlineTarget);\n      each$e(difference(selectedInlines, targetInlines), curry(setSelected, false));\n      each$e(difference(targetInlines, selectedInlines), curry(setSelected, true));\n    };\n    const safeRemoveCaretContainer = (editor, caret) => {\n      const caretValue = caret.get();\n      if (editor.selection.isCollapsed() && !editor.composing && caretValue) {\n        const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n        if (CaretPosition.isTextPosition(pos) && !isAtZwsp(pos)) {\n          setCaretPosition(editor, removeAndReposition(caretValue, pos));\n          caret.set(null);\n        }\n      }\n    };\n    const renderInsideInlineCaret = (isInlineTarget, editor, caret, elms) => {\n      if (editor.selection.isCollapsed()) {\n        const inlines = filter$5(elms, isInlineTarget);\n        each$e(inlines, _inline => {\n          const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n          readLocation(isInlineTarget, editor.getBody(), pos).bind(location => renderCaretLocation(editor, caret, location));\n        });\n      }\n    };\n    const move$2 = (editor, caret, forward) => isInlineBoundariesEnabled(editor) ? findLocation(editor, caret, forward).isSome() : false;\n    const moveWord = (forward, editor, _caret) => isInlineBoundariesEnabled(editor) ? moveByWord(forward, editor) : false;\n    const setupSelectedState = editor => {\n      const caret = Cell(null);\n      const isInlineTarget$1 = curry(isInlineTarget, editor);\n      editor.on('NodeChange', e => {\n        if (isInlineBoundariesEnabled(editor)) {\n          toggleInlines(isInlineTarget$1, editor.dom, e.parents);\n          safeRemoveCaretContainer(editor, caret);\n          renderInsideInlineCaret(isInlineTarget$1, editor, caret, e.parents);\n        }\n      });\n      return caret;\n    };\n    const moveNextWord = curry(moveWord, true);\n    const movePrevWord = curry(moveWord, false);\n    const moveToLineEndPoint$2 = (editor, forward, caret) => {\n      if (isInlineBoundariesEnabled(editor)) {\n        const linePoint = getLineEndPoint(editor, forward).getOrThunk(() => {\n          const rng = editor.selection.getRng();\n          return forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n        });\n        return readLocation(curry(isInlineTarget, editor), editor.getBody(), linePoint).exists(loc => {\n          const outsideLoc = outside(loc);\n          return renderCaret(caret, outsideLoc).exists(pos => {\n            setCaretPosition(editor, pos);\n            return true;\n          });\n        });\n      } else {\n        return false;\n      }\n    };\n\n    const rangeFromPositions = (from, to) => {\n      const range = document.createRange();\n      range.setStart(from.container(), from.offset());\n      range.setEnd(to.container(), to.offset());\n      return range;\n    };\n    const hasOnlyTwoOrLessPositionsLeft = elm => lift2(firstPositionIn(elm), lastPositionIn(elm), (firstPos, lastPos) => {\n      const normalizedFirstPos = normalizePosition(true, firstPos);\n      const normalizedLastPos = normalizePosition(false, lastPos);\n      return nextPosition(elm, normalizedFirstPos).forall(pos => pos.isEqual(normalizedLastPos));\n    }).getOr(true);\n    const setCaretLocation = (editor, caret) => location => renderCaret(caret, location).map(pos => () => setCaretPosition(editor, pos));\n    const deleteFromTo = (editor, caret, from, to) => {\n      const rootNode = editor.getBody();\n      const isInlineTarget$1 = curry(isInlineTarget, editor);\n      editor.undoManager.ignore(() => {\n        editor.selection.setRng(rangeFromPositions(from, to));\n        execNativeDeleteCommand(editor);\n        readLocation(isInlineTarget$1, rootNode, CaretPosition.fromRangeStart(editor.selection.getRng())).map(inside).bind(setCaretLocation(editor, caret)).each(call);\n      });\n      editor.nodeChanged();\n    };\n    const rescope = (rootNode, node) => {\n      const parentBlock = getParentBlock$3(node, rootNode);\n      return parentBlock ? parentBlock : rootNode;\n    };\n    const backspaceDeleteCollapsed = (editor, caret, forward, from) => {\n      const rootNode = rescope(editor.getBody(), from.container());\n      const isInlineTarget$1 = curry(isInlineTarget, editor);\n      const fromLocation = readLocation(isInlineTarget$1, rootNode, from);\n      const location = fromLocation.bind(location => {\n        if (forward) {\n          return location.fold(constant(Optional.some(inside(location))), Optional.none, constant(Optional.some(outside(location))), Optional.none);\n        } else {\n          return location.fold(Optional.none, constant(Optional.some(outside(location))), Optional.none, constant(Optional.some(inside(location))));\n        }\n      });\n      return location.map(setCaretLocation(editor, caret)).getOrThunk(() => {\n        const toPosition = navigate(forward, rootNode, from);\n        const toLocation = toPosition.bind(pos => readLocation(isInlineTarget$1, rootNode, pos));\n        return lift2(fromLocation, toLocation, () => findRootInline(isInlineTarget$1, rootNode, from).bind(elm => {\n          if (hasOnlyTwoOrLessPositionsLeft(elm)) {\n            return Optional.some(() => {\n              deleteElement$2(editor, forward, SugarElement.fromDom(elm));\n            });\n          } else {\n            return Optional.none();\n          }\n        })).getOrThunk(() => toLocation.bind(() => toPosition.map(to => {\n          return () => {\n            if (forward) {\n              deleteFromTo(editor, caret, from, to);\n            } else {\n              deleteFromTo(editor, caret, to, from);\n            }\n          };\n        })));\n      });\n    };\n    const backspaceDelete$3 = (editor, caret, forward) => {\n      if (editor.selection.isCollapsed() && isInlineBoundariesEnabled(editor)) {\n        const from = CaretPosition.fromRangeStart(editor.selection.getRng());\n        return backspaceDeleteCollapsed(editor, caret, forward, from);\n      }\n      return Optional.none();\n    };\n\n    const hasMultipleChildren = elm => childNodesCount(elm) > 1;\n    const getParentsUntil = (editor, pred) => {\n      const rootElm = SugarElement.fromDom(editor.getBody());\n      const startElm = SugarElement.fromDom(editor.selection.getStart());\n      const parents = parentsAndSelf(startElm, rootElm);\n      return findIndex$2(parents, pred).fold(constant(parents), index => parents.slice(0, index));\n    };\n    const hasOnlyOneChild = elm => childNodesCount(elm) === 1;\n    const getParentInlinesUntilMultichildInline = editor => getParentsUntil(editor, elm => isBlock$2(elm) || hasMultipleChildren(elm));\n    const getParentInlines = editor => getParentsUntil(editor, isBlock$2);\n    const getFormatNodes = (editor, parentInlines) => {\n      const isFormatElement$1 = curry(isFormatElement, editor);\n      return bind$3(parentInlines, elm => isFormatElement$1(elm) ? [elm.dom] : []);\n    };\n    const getFormatNodesAtStart = editor => {\n      const parentInlines = getParentInlines(editor);\n      return getFormatNodes(editor, parentInlines);\n    };\n    const deleteLastPosition = (forward, editor, target, parentInlines) => {\n      const formatNodes = getFormatNodes(editor, parentInlines);\n      if (formatNodes.length === 0) {\n        deleteElement$2(editor, forward, target);\n      } else {\n        const pos = replaceWithCaretFormat(target.dom, formatNodes);\n        editor.selection.setRng(pos.toRange());\n      }\n    };\n    const deleteCaret$1 = (editor, forward) => {\n      const parentInlines = filter$5(getParentInlinesUntilMultichildInline(editor), hasOnlyOneChild);\n      return last$3(parentInlines).bind(target => {\n        const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n        if (willDeleteLastPositionInElement(forward, fromPos, target.dom) && !isEmptyCaretFormatElement(target)) {\n          return Optional.some(() => deleteLastPosition(forward, editor, target, parentInlines));\n        } else {\n          return Optional.none();\n        }\n      });\n    };\n    const isBrInEmptyElement = (editor, elm) => {\n      const parentElm = elm.parentElement;\n      return isBr$6(elm) && !isNull(parentElm) && editor.dom.isEmpty(parentElm);\n    };\n    const isEmptyCaret = elm => isEmptyCaretFormatElement(SugarElement.fromDom(elm));\n    const createCaretFormatAtStart = (editor, formatNodes) => {\n      const startElm = editor.selection.getStart();\n      const pos = isBrInEmptyElement(editor, startElm) || isEmptyCaret(startElm) ? replaceWithCaretFormat(startElm, formatNodes) : createCaretFormatAtStart$1(editor.selection.getRng(), formatNodes);\n      editor.selection.setRng(pos.toRange());\n    };\n    const updateCaretFormat = (editor, updateFormats) => {\n      const missingFormats = difference(updateFormats, getFormatNodesAtStart(editor));\n      if (missingFormats.length > 0) {\n        createCaretFormatAtStart(editor, missingFormats);\n      }\n    };\n    const rangeStartsAtTextContainer = rng => isText$a(rng.startContainer);\n    const rangeStartsAtStartOfTextContainer = rng => rng.startOffset === 0 && rangeStartsAtTextContainer(rng);\n    const rangeStartParentIsFormatElement = (editor, rng) => {\n      const startParent = rng.startContainer.parentElement;\n      return !isNull(startParent) && isFormatElement(editor, SugarElement.fromDom(startParent));\n    };\n    const rangeStartAndEndHaveSameParent = rng => {\n      const startParent = rng.startContainer.parentNode;\n      const endParent = rng.endContainer.parentNode;\n      return !isNull(startParent) && !isNull(endParent) && startParent.isEqualNode(endParent);\n    };\n    const rangeEndsAtEndOfEndContainer = rng => {\n      const endContainer = rng.endContainer;\n      return rng.endOffset === (isText$a(endContainer) ? endContainer.length : endContainer.childNodes.length);\n    };\n    const rangeEndsAtEndOfStartContainer = rng => rangeStartAndEndHaveSameParent(rng) && rangeEndsAtEndOfEndContainer(rng);\n    const rangeEndsAfterEndOfStartContainer = rng => !rng.endContainer.isEqualNode(rng.commonAncestorContainer);\n    const rangeEndsAtOrAfterEndOfStartContainer = rng => rangeEndsAtEndOfStartContainer(rng) || rangeEndsAfterEndOfStartContainer(rng);\n    const requiresDeleteRangeOverride = editor => {\n      const rng = editor.selection.getRng();\n      return rangeStartsAtStartOfTextContainer(rng) && rangeStartParentIsFormatElement(editor, rng) && rangeEndsAtOrAfterEndOfStartContainer(rng);\n    };\n    const deleteRange$1 = editor => {\n      if (requiresDeleteRangeOverride(editor)) {\n        const formatNodes = getFormatNodesAtStart(editor);\n        return Optional.some(() => {\n          execNativeDeleteCommand(editor);\n          updateCaretFormat(editor, formatNodes);\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const backspaceDelete$2 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : deleteRange$1(editor);\n    const hasAncestorInlineCaret = elm => ancestor$1(elm, node => isCaretNode(node.dom), isBlock$2);\n    const hasAncestorInlineCaretAtStart = editor => hasAncestorInlineCaret(SugarElement.fromDom(editor.selection.getStart()));\n    const requiresRefreshCaretOverride = editor => {\n      const rng = editor.selection.getRng();\n      return rng.collapsed && (rangeStartsAtTextContainer(rng) || editor.dom.isEmpty(rng.startContainer)) && !hasAncestorInlineCaretAtStart(editor);\n    };\n    const refreshCaret = editor => {\n      if (requiresRefreshCaretOverride(editor)) {\n        createCaretFormatAtStart(editor, []);\n      }\n      return true;\n    };\n\n    const deleteElement = (editor, forward, element) => {\n      if (isNonNullable(element)) {\n        return Optional.some(() => {\n          editor._selectionOverrides.hideFakeCaret();\n          deleteElement$2(editor, forward, SugarElement.fromDom(element));\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const deleteCaret = (editor, forward) => {\n      const isNearMedia = forward ? isBeforeMedia : isAfterMedia;\n      const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n      const fromPos = getNormalizedRangeEndPoint(direction, editor.getBody(), editor.selection.getRng());\n      if (isNearMedia(fromPos)) {\n        return deleteElement(editor, forward, fromPos.getNode(!forward));\n      } else {\n        return Optional.from(normalizePosition(forward, fromPos)).filter(pos => isNearMedia(pos) && isMoveInsideSameBlock(fromPos, pos)).bind(pos => deleteElement(editor, forward, pos.getNode(!forward)));\n      }\n    };\n    const deleteRange = (editor, forward) => {\n      const selectedNode = editor.selection.getNode();\n      return isMedia$2(selectedNode) ? deleteElement(editor, forward, selectedNode) : Optional.none();\n    };\n    const backspaceDelete$1 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret(editor, forward) : deleteRange(editor, forward);\n\n    const isEditable = target => closest$4(target, elm => isContentEditableTrue$3(elm.dom) || isContentEditableFalse$b(elm.dom)).exists(elm => isContentEditableTrue$3(elm.dom));\n    const parseIndentValue = value => toInt(value !== null && value !== void 0 ? value : '').getOr(0);\n    const getIndentStyleName = (useMargin, element) => {\n      const indentStyleName = useMargin || isTable$1(element) ? 'margin' : 'padding';\n      const suffix = get$7(element, 'direction') === 'rtl' ? '-right' : '-left';\n      return indentStyleName + suffix;\n    };\n    const indentElement = (dom, command, useMargin, value, unit, element) => {\n      const indentStyleName = getIndentStyleName(useMargin, SugarElement.fromDom(element));\n      const parsedValue = parseIndentValue(dom.getStyle(element, indentStyleName));\n      if (command === 'outdent') {\n        const styleValue = Math.max(0, parsedValue - value);\n        dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : '');\n      } else {\n        const styleValue = parsedValue + value + unit;\n        dom.setStyle(element, indentStyleName, styleValue);\n      }\n    };\n    const validateBlocks = (editor, blocks) => forall(blocks, block => {\n      const indentStyleName = getIndentStyleName(shouldIndentUseMargin(editor), block);\n      const intentValue = getRaw(block, indentStyleName).map(parseIndentValue).getOr(0);\n      const contentEditable = editor.dom.getContentEditable(block.dom);\n      return contentEditable !== 'false' && intentValue > 0;\n    });\n    const canOutdent = editor => {\n      const blocks = getBlocksToIndent(editor);\n      return !editor.mode.isReadOnly() && (blocks.length > 1 || validateBlocks(editor, blocks));\n    };\n    const isListComponent = el => isList(el) || isListItem$1(el);\n    const parentIsListComponent = el => parent(el).exists(isListComponent);\n    const getBlocksToIndent = editor => filter$5(fromDom$1(editor.selection.getSelectedBlocks()), el => !isListComponent(el) && !parentIsListComponent(el) && isEditable(el));\n    const handle = (editor, command) => {\n      var _a, _b;\n      const {dom} = editor;\n      const indentation = getIndentation(editor);\n      const indentUnit = (_b = (_a = /[a-z%]+$/i.exec(indentation)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : 'px';\n      const indentValue = parseIndentValue(indentation);\n      const useMargin = shouldIndentUseMargin(editor);\n      each$e(getBlocksToIndent(editor), block => {\n        indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom);\n      });\n    };\n    const indent = editor => handle(editor, 'indent');\n    const outdent = editor => handle(editor, 'outdent');\n\n    const backspaceDelete = editor => {\n      if (editor.selection.isCollapsed() && canOutdent(editor)) {\n        const dom = editor.dom;\n        const rng = editor.selection.getRng();\n        const pos = CaretPosition.fromRangeStart(rng);\n        const block = dom.getParent(rng.startContainer, dom.isBlock);\n        if (block !== null && isAtStartOfBlock(SugarElement.fromDom(block), pos)) {\n          return Optional.some(() => outdent(editor));\n        }\n      }\n      return Optional.none();\n    };\n\n    const findAction = (editor, caret, forward) => findMap([\n      backspaceDelete,\n      backspaceDelete$5,\n      backspaceDelete$6,\n      (editor, forward) => backspaceDelete$3(editor, caret, forward),\n      backspaceDelete$8,\n      backspaceDelete$9,\n      backspaceDelete$4,\n      backspaceDelete$1,\n      backspaceDelete$7,\n      backspaceDelete$2\n    ], item => item(editor, forward)).filter(_ => editor.selection.isEditable());\n    const deleteCommand = (editor, caret) => {\n      const result = findAction(editor, caret, false);\n      result.fold(() => {\n        execNativeDeleteCommand(editor);\n        paddEmptyBody(editor);\n      }, call);\n    };\n    const forwardDeleteCommand = (editor, caret) => {\n      const result = findAction(editor, caret, true);\n      result.fold(() => execNativeForwardDeleteCommand(editor), call);\n    };\n    const setup$p = (editor, caret) => {\n      editor.addCommand('delete', () => {\n        deleteCommand(editor, caret);\n      });\n      editor.addCommand('forwardDelete', () => {\n        forwardDeleteCommand(editor, caret);\n      });\n    };\n\n    const SIGNIFICANT_MOVE = 5;\n    const LONGPRESS_DELAY = 400;\n    const getTouch = event => {\n      if (event.touches === undefined || event.touches.length !== 1) {\n        return Optional.none();\n      }\n      return Optional.some(event.touches[0]);\n    };\n    const isFarEnough = (touch, data) => {\n      const distX = Math.abs(touch.clientX - data.x);\n      const distY = Math.abs(touch.clientY - data.y);\n      return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n    };\n    const setup$o = editor => {\n      const startData = value$2();\n      const longpressFired = Cell(false);\n      const debounceLongpress = last$1(e => {\n        editor.dispatch('longpress', {\n          ...e,\n          type: 'longpress'\n        });\n        longpressFired.set(true);\n      }, LONGPRESS_DELAY);\n      editor.on('touchstart', e => {\n        getTouch(e).each(touch => {\n          debounceLongpress.cancel();\n          const data = {\n            x: touch.clientX,\n            y: touch.clientY,\n            target: e.target\n          };\n          debounceLongpress.throttle(e);\n          longpressFired.set(false);\n          startData.set(data);\n        });\n      }, true);\n      editor.on('touchmove', e => {\n        debounceLongpress.cancel();\n        getTouch(e).each(touch => {\n          startData.on(data => {\n            if (isFarEnough(touch, data)) {\n              startData.clear();\n              longpressFired.set(false);\n              editor.dispatch('longpresscancel');\n            }\n          });\n        });\n      }, true);\n      editor.on('touchend touchcancel', e => {\n        debounceLongpress.cancel();\n        if (e.type === 'touchcancel') {\n          return;\n        }\n        startData.get().filter(data => data.target.isEqualNode(e.target)).each(() => {\n          if (longpressFired.get()) {\n            e.preventDefault();\n          } else {\n            editor.dispatch('tap', {\n              ...e,\n              type: 'tap'\n            });\n          }\n        });\n      }, true);\n    };\n\n    const isBlockElement = (blockElements, node) => has$2(blockElements, node.nodeName);\n    const isValidTarget = (schema, node) => {\n      if (isText$a(node)) {\n        return true;\n      } else if (isElement$6(node)) {\n        return !isBlockElement(schema.getBlockElements(), node) && !isBookmarkNode$1(node) && !isTransparentBlock(schema, node);\n      } else {\n        return false;\n      }\n    };\n    const hasBlockParent = (blockElements, root, node) => {\n      return exists(parents(SugarElement.fromDom(node), SugarElement.fromDom(root)), elm => {\n        return isBlockElement(blockElements, elm.dom);\n      });\n    };\n    const shouldRemoveTextNode = (blockElements, node) => {\n      if (isText$a(node)) {\n        if (node.data.length === 0) {\n          return true;\n        } else if (/^\\s+$/.test(node.data) && (!node.nextSibling || isBlockElement(blockElements, node.nextSibling))) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const createRootBlock = editor => editor.dom.create(getForcedRootBlock(editor), getForcedRootBlockAttrs(editor));\n    const addRootBlocks = editor => {\n      const dom = editor.dom, selection = editor.selection;\n      const schema = editor.schema;\n      const blockElements = schema.getBlockElements();\n      const startNode = selection.getStart();\n      const rootNode = editor.getBody();\n      let rootBlockNode;\n      let tempNode;\n      let wrapped = false;\n      const forcedRootBlock = getForcedRootBlock(editor);\n      if (!startNode || !isElement$6(startNode)) {\n        return;\n      }\n      const rootNodeName = rootNode.nodeName.toLowerCase();\n      if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, startNode)) {\n        return;\n      }\n      const rng = selection.getRng();\n      const {startContainer, startOffset, endContainer, endOffset} = rng;\n      const restoreSelection = hasFocus(editor);\n      let node = rootNode.firstChild;\n      while (node) {\n        if (isElement$6(node)) {\n          updateElement(schema, node);\n        }\n        if (isValidTarget(schema, node)) {\n          if (shouldRemoveTextNode(blockElements, node)) {\n            tempNode = node;\n            node = node.nextSibling;\n            dom.remove(tempNode);\n            continue;\n          }\n          if (!rootBlockNode) {\n            rootBlockNode = createRootBlock(editor);\n            rootNode.insertBefore(rootBlockNode, node);\n            wrapped = true;\n          }\n          tempNode = node;\n          node = node.nextSibling;\n          rootBlockNode.appendChild(tempNode);\n        } else {\n          rootBlockNode = null;\n          node = node.nextSibling;\n        }\n      }\n      if (wrapped && restoreSelection) {\n        rng.setStart(startContainer, startOffset);\n        rng.setEnd(endContainer, endOffset);\n        selection.setRng(rng);\n        editor.nodeChanged();\n      }\n    };\n    const insertEmptyLine = (editor, root, insertBlock) => {\n      const block = SugarElement.fromDom(createRootBlock(editor));\n      const br = createPaddingBr();\n      append$1(block, br);\n      insertBlock(root, block);\n      const rng = document.createRange();\n      rng.setStartBefore(br.dom);\n      rng.setEndBefore(br.dom);\n      return rng;\n    };\n    const setup$n = editor => {\n      editor.on('NodeChange', curry(addRootBlocks, editor));\n    };\n\n    const hasClass = checkClassName => node => (' ' + node.attr('class') + ' ').indexOf(checkClassName) !== -1;\n    const replaceMatchWithSpan = (editor, content, cls) => {\n      return function (match) {\n        const args = arguments, index = args[args.length - 2];\n        const prevChar = index > 0 ? content.charAt(index - 1) : '';\n        if (prevChar === '\"') {\n          return match;\n        }\n        if (prevChar === '>') {\n          const findStartTagIndex = content.lastIndexOf('<', index);\n          if (findStartTagIndex !== -1) {\n            const tagHtml = content.substring(findStartTagIndex, index);\n            if (tagHtml.indexOf('contenteditable=\"false\"') !== -1) {\n              return match;\n            }\n          }\n        }\n        return '<span class=\"' + cls + '\" data-mce-content=\"' + editor.dom.encode(args[0]) + '\">' + editor.dom.encode(typeof args[1] === 'string' ? args[1] : args[0]) + '</span>';\n      };\n    };\n    const convertRegExpsToNonEditable = (editor, nonEditableRegExps, e) => {\n      let i = nonEditableRegExps.length, content = e.content;\n      if (e.format === 'raw') {\n        return;\n      }\n      while (i--) {\n        content = content.replace(nonEditableRegExps[i], replaceMatchWithSpan(editor, content, getNonEditableClass(editor)));\n      }\n      e.content = content;\n    };\n    const setup$m = editor => {\n      const contentEditableAttrName = 'contenteditable';\n      const editClass = ' ' + Tools.trim(getEditableClass(editor)) + ' ';\n      const nonEditClass = ' ' + Tools.trim(getNonEditableClass(editor)) + ' ';\n      const hasEditClass = hasClass(editClass);\n      const hasNonEditClass = hasClass(nonEditClass);\n      const nonEditableRegExps = getNonEditableRegExps(editor);\n      if (nonEditableRegExps.length > 0) {\n        editor.on('BeforeSetContent', e => {\n          convertRegExpsToNonEditable(editor, nonEditableRegExps, e);\n        });\n      }\n      editor.parser.addAttributeFilter('class', nodes => {\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          if (hasEditClass(node)) {\n            node.attr(contentEditableAttrName, 'true');\n          } else if (hasNonEditClass(node)) {\n            node.attr(contentEditableAttrName, 'false');\n          }\n        }\n      });\n      editor.serializer.addAttributeFilter(contentEditableAttrName, nodes => {\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          if (!hasEditClass(node) && !hasNonEditClass(node)) {\n            continue;\n          }\n          if (nonEditableRegExps.length > 0 && node.attr('data-mce-content')) {\n            node.name = '#text';\n            node.type = 3;\n            node.raw = true;\n            node.value = node.attr('data-mce-content');\n          } else {\n            node.attr(contentEditableAttrName, null);\n          }\n        }\n      });\n    };\n\n    const findBlockCaretContainer = editor => descendant(SugarElement.fromDom(editor.getBody()), '*[data-mce-caret]').map(elm => elm.dom).getOrNull();\n    const showBlockCaretContainer = (editor, blockCaretContainer) => {\n      if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n        showCaretContainerBlock(blockCaretContainer);\n        editor.selection.setRng(editor.selection.getRng());\n        editor.selection.scrollIntoView(blockCaretContainer);\n      }\n    };\n    const handleBlockContainer = (editor, e) => {\n      const blockCaretContainer = findBlockCaretContainer(editor);\n      if (!blockCaretContainer) {\n        return;\n      }\n      if (e.type === 'compositionstart') {\n        e.preventDefault();\n        e.stopPropagation();\n        showBlockCaretContainer(editor, blockCaretContainer);\n        return;\n      }\n      if (hasContent(blockCaretContainer)) {\n        showBlockCaretContainer(editor, blockCaretContainer);\n        editor.undoManager.add();\n      }\n    };\n    const setup$l = editor => {\n      editor.on('keyup compositionstart', curry(handleBlockContainer, editor));\n    };\n\n    const isContentEditableFalse$3 = isContentEditableFalse$b;\n    const moveToCeFalseHorizontally = (direction, editor, range) => moveHorizontally(editor, direction, range, isBeforeContentEditableFalse, isAfterContentEditableFalse, isContentEditableFalse$3);\n    const moveToCeFalseVertically = (direction, editor, range) => {\n      const isBefore = caretPosition => isBeforeContentEditableFalse(caretPosition) || isBeforeTable(caretPosition);\n      const isAfter = caretPosition => isAfterContentEditableFalse(caretPosition) || isAfterTable(caretPosition);\n      return moveVertically(editor, direction, range, isBefore, isAfter, isContentEditableFalse$3);\n    };\n    const createTextBlock = editor => {\n      const textBlock = editor.dom.create(getForcedRootBlock(editor));\n      textBlock.innerHTML = '<br data-mce-bogus=\"1\">';\n      return textBlock;\n    };\n    const exitPreBlock = (editor, direction, range) => {\n      const caretWalker = CaretWalker(editor.getBody());\n      const getVisualCaretPosition$1 = curry(getVisualCaretPosition, direction === 1 ? caretWalker.next : caretWalker.prev);\n      if (range.collapsed) {\n        const pre = editor.dom.getParent(range.startContainer, 'PRE');\n        if (!pre) {\n          return;\n        }\n        const caretPos = getVisualCaretPosition$1(CaretPosition.fromRangeStart(range));\n        if (!caretPos) {\n          const newBlock = SugarElement.fromDom(createTextBlock(editor));\n          if (direction === 1) {\n            after$4(SugarElement.fromDom(pre), newBlock);\n          } else {\n            before$3(SugarElement.fromDom(pre), newBlock);\n          }\n          editor.selection.select(newBlock.dom, true);\n          editor.selection.collapse();\n        }\n      }\n    };\n    const getHorizontalRange = (editor, forward) => {\n      const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n      const range = editor.selection.getRng();\n      return moveToCeFalseHorizontally(direction, editor, range).orThunk(() => {\n        exitPreBlock(editor, direction, range);\n        return Optional.none();\n      });\n    };\n    const getVerticalRange = (editor, down) => {\n      const direction = down ? 1 : -1;\n      const range = editor.selection.getRng();\n      return moveToCeFalseVertically(direction, editor, range).orThunk(() => {\n        exitPreBlock(editor, direction, range);\n        return Optional.none();\n      });\n    };\n    const flipDirection = (selection, forward) => {\n      const elm = forward ? selection.getEnd(true) : selection.getStart(true);\n      return isRtl(elm) ? !forward : forward;\n    };\n    const moveH$2 = (editor, forward) => getHorizontalRange(editor, flipDirection(editor.selection, forward)).exists(newRange => {\n      moveToRange(editor, newRange);\n      return true;\n    });\n    const moveV$3 = (editor, down) => getVerticalRange(editor, down).exists(newRange => {\n      moveToRange(editor, newRange);\n      return true;\n    });\n    const moveToLineEndPoint$1 = (editor, forward) => {\n      const isCefPosition = forward ? isAfterContentEditableFalse : isBeforeContentEditableFalse;\n      return moveToLineEndPoint$3(editor, forward, isCefPosition);\n    };\n    const selectToEndPoint = (editor, forward) => getEdgeCefPosition(editor, !forward).map(pos => {\n      const rng = pos.toRange();\n      const curRng = editor.selection.getRng();\n      if (forward) {\n        rng.setStart(curRng.startContainer, curRng.startOffset);\n      } else {\n        rng.setEnd(curRng.endContainer, curRng.endOffset);\n      }\n      return rng;\n    }).exists(rng => {\n      moveToRange(editor, rng);\n      return true;\n    });\n\n    const isTarget = node => contains$2(['figcaption'], name(node));\n    const getClosestTargetBlock = (pos, root) => {\n      const isRoot = curry(eq, root);\n      return closest$4(SugarElement.fromDom(pos.container()), isBlock$2, isRoot).filter(isTarget);\n    };\n    const isAtFirstOrLastLine = (root, forward, pos) => forward ? isAtLastLine(root.dom, pos) : isAtFirstLine(root.dom, pos);\n    const moveCaretToNewEmptyLine = (editor, forward) => {\n      const root = SugarElement.fromDom(editor.getBody());\n      const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n      return getClosestTargetBlock(pos, root).exists(() => {\n        if (isAtFirstOrLastLine(root, forward, pos)) {\n          const insertFn = forward ? append$1 : prepend;\n          const rng = insertEmptyLine(editor, root, insertFn);\n          editor.selection.setRng(rng);\n          return true;\n        } else {\n          return false;\n        }\n      });\n    };\n    const moveV$2 = (editor, forward) => {\n      if (editor.selection.isCollapsed()) {\n        return moveCaretToNewEmptyLine(editor, forward);\n      } else {\n        return false;\n      }\n    };\n\n    const baseKeyPattern = {\n      shiftKey: false,\n      altKey: false,\n      ctrlKey: false,\n      metaKey: false,\n      keyCode: 0\n    };\n    const defaultPatterns = patterns => map$3(patterns, pattern => ({\n      ...baseKeyPattern,\n      ...pattern\n    }));\n    const defaultDelayedPatterns = patterns => map$3(patterns, pattern => ({\n      ...baseKeyPattern,\n      ...pattern\n    }));\n    const matchesEvent = (pattern, evt) => evt.keyCode === pattern.keyCode && evt.shiftKey === pattern.shiftKey && evt.altKey === pattern.altKey && evt.ctrlKey === pattern.ctrlKey && evt.metaKey === pattern.metaKey;\n    const match$1 = (patterns, evt) => bind$3(defaultPatterns(patterns), pattern => matchesEvent(pattern, evt) ? [pattern] : []);\n    const matchDelayed = (patterns, evt) => bind$3(defaultDelayedPatterns(patterns), pattern => matchesEvent(pattern, evt) ? [pattern] : []);\n    const action = (f, ...x) => () => f.apply(null, x);\n    const execute = (patterns, evt) => find$2(match$1(patterns, evt), pattern => pattern.action());\n    const executeWithDelayedAction = (patterns, evt) => findMap(matchDelayed(patterns, evt), pattern => pattern.action());\n\n    const moveH$1 = (editor, forward) => {\n      const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n      const range = editor.selection.getRng();\n      return moveHorizontally(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia$2).exists(newRange => {\n        moveToRange(editor, newRange);\n        return true;\n      });\n    };\n    const moveV$1 = (editor, down) => {\n      const direction = down ? 1 : -1;\n      const range = editor.selection.getRng();\n      return moveVertically(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia$2).exists(newRange => {\n        moveToRange(editor, newRange);\n        return true;\n      });\n    };\n    const moveToLineEndPoint = (editor, forward) => {\n      const isNearMedia = forward ? isAfterMedia : isBeforeMedia;\n      return moveToLineEndPoint$3(editor, forward, isNearMedia);\n    };\n\n    const adt = Adt.generate([\n      { none: ['current'] },\n      { first: ['current'] },\n      {\n        middle: [\n          'current',\n          'target'\n        ]\n      },\n      { last: ['current'] }\n    ]);\n    const none = current => adt.none(current);\n    const CellLocation = {\n      ...adt,\n      none\n    };\n\n    const firstLayer = (scope, selector) => {\n      return filterFirstLayer(scope, selector, always);\n    };\n    const filterFirstLayer = (scope, selector, predicate) => {\n      return bind$3(children$1(scope), x => {\n        if (is$1(x, selector)) {\n          return predicate(x) ? [x] : [];\n        } else {\n          return filterFirstLayer(x, selector, predicate);\n        }\n      });\n    };\n\n    const lookup$1 = (tags, element, isRoot = never) => {\n      if (isRoot(element)) {\n        return Optional.none();\n      }\n      if (contains$2(tags, name(element))) {\n        return Optional.some(element);\n      }\n      const isRootOrUpperTable = elm => is$1(elm, 'table') || isRoot(elm);\n      return ancestor$3(element, tags.join(','), isRootOrUpperTable);\n    };\n    const cell = (element, isRoot) => lookup$1([\n      'td',\n      'th'\n    ], element, isRoot);\n    const cells = ancestor => firstLayer(ancestor, 'th,td');\n    const table = (element, isRoot) => closest$3(element, 'table', isRoot);\n\n    const walk = (all, current, index, direction, isEligible = always) => {\n      const forwards = direction === 1;\n      if (!forwards && index <= 0) {\n        return CellLocation.first(all[0]);\n      } else if (forwards && index >= all.length - 1) {\n        return CellLocation.last(all[all.length - 1]);\n      } else {\n        const newIndex = index + direction;\n        const elem = all[newIndex];\n        return isEligible(elem) ? CellLocation.middle(current, elem) : walk(all, current, newIndex, direction, isEligible);\n      }\n    };\n    const detect = (current, isRoot) => {\n      return table(current, isRoot).bind(table => {\n        const all = cells(table);\n        const index = findIndex$2(all, x => eq(current, x));\n        return index.map(index => ({\n          index,\n          all\n        }));\n      });\n    };\n    const next = (current, isEligible, isRoot) => {\n      const detection = detect(current, isRoot);\n      return detection.fold(() => {\n        return CellLocation.none(current);\n      }, info => {\n        return walk(info.all, current, info.index, 1, isEligible);\n      });\n    };\n    const prev = (current, isEligible, isRoot) => {\n      const detection = detect(current, isRoot);\n      return detection.fold(() => {\n        return CellLocation.none();\n      }, info => {\n        return walk(info.all, current, info.index, -1, isEligible);\n      });\n    };\n\n    const deflate = (rect, delta) => ({\n      left: rect.left - delta,\n      top: rect.top - delta,\n      right: rect.right + delta * 2,\n      bottom: rect.bottom + delta * 2,\n      width: rect.width + delta,\n      height: rect.height + delta\n    });\n    const getCorners = (getYAxisValue, tds) => bind$3(tds, td => {\n      const rect = deflate(clone$1(td.getBoundingClientRect()), -1);\n      return [\n        {\n          x: rect.left,\n          y: getYAxisValue(rect),\n          cell: td\n        },\n        {\n          x: rect.right,\n          y: getYAxisValue(rect),\n          cell: td\n        }\n      ];\n    });\n    const findClosestCorner = (corners, x, y) => foldl(corners, (acc, newCorner) => acc.fold(() => Optional.some(newCorner), oldCorner => {\n      const oldDist = Math.sqrt(Math.abs(oldCorner.x - x) + Math.abs(oldCorner.y - y));\n      const newDist = Math.sqrt(Math.abs(newCorner.x - x) + Math.abs(newCorner.y - y));\n      return Optional.some(newDist < oldDist ? newCorner : oldCorner);\n    }), Optional.none());\n    const getClosestCell = (getYAxisValue, isTargetCorner, table, x, y) => {\n      const cells = descendants(SugarElement.fromDom(table), 'td,th,caption').map(e => e.dom);\n      const corners = filter$5(getCorners(getYAxisValue, cells), corner => isTargetCorner(corner, y));\n      return findClosestCorner(corners, x, y).map(corner => corner.cell);\n    };\n    const getBottomValue = rect => rect.bottom;\n    const getTopValue = rect => rect.top;\n    const isAbove = (corner, y) => corner.y < y;\n    const isBelow = (corner, y) => corner.y > y;\n    const getClosestCellAbove = curry(getClosestCell, getBottomValue, isAbove);\n    const getClosestCellBelow = curry(getClosestCell, getTopValue, isBelow);\n    const findClosestPositionInAboveCell = (table, pos) => head(pos.getClientRects()).bind(rect => getClosestCellAbove(table, rect.left, rect.top)).bind(cell => findClosestHorizontalPosition(getLastLinePositions(cell), pos));\n    const findClosestPositionInBelowCell = (table, pos) => last$3(pos.getClientRects()).bind(rect => getClosestCellBelow(table, rect.left, rect.top)).bind(cell => findClosestHorizontalPosition(getFirstLinePositions(cell), pos));\n\n    const hasNextBreak = (getPositionsUntil, scope, lineInfo) => lineInfo.breakAt.exists(breakPos => getPositionsUntil(scope, breakPos).breakAt.isSome());\n    const startsWithWrapBreak = lineInfo => lineInfo.breakType === BreakType.Wrap && lineInfo.positions.length === 0;\n    const startsWithBrBreak = lineInfo => lineInfo.breakType === BreakType.Br && lineInfo.positions.length === 1;\n    const isAtTableCellLine = (getPositionsUntil, scope, pos) => {\n      const lineInfo = getPositionsUntil(scope, pos);\n      if (startsWithWrapBreak(lineInfo) || !isBr$6(pos.getNode()) && startsWithBrBreak(lineInfo)) {\n        return !hasNextBreak(getPositionsUntil, scope, lineInfo);\n      } else {\n        return lineInfo.breakAt.isNone();\n      }\n    };\n    const isAtFirstTableCellLine = curry(isAtTableCellLine, getPositionsUntilPreviousLine);\n    const isAtLastTableCellLine = curry(isAtTableCellLine, getPositionsUntilNextLine);\n    const isCaretAtStartOrEndOfTable = (forward, rng, table) => {\n      const caretPos = CaretPosition.fromRangeStart(rng);\n      return positionIn(!forward, table).exists(pos => pos.isEqual(caretPos));\n    };\n    const navigateHorizontally = (editor, forward, table, _td) => {\n      const rng = editor.selection.getRng();\n      const direction = forward ? 1 : -1;\n      if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) {\n        showCaret(direction, editor, table, !forward, false).each(newRng => {\n          moveToRange(editor, newRng);\n        });\n        return true;\n      }\n      return false;\n    };\n    const getClosestAbovePosition = (root, table, start) => findClosestPositionInAboveCell(table, start).orThunk(() => head(start.getClientRects()).bind(rect => findClosestHorizontalPositionFromPoint(getPositionsAbove(root, CaretPosition.before(table)), rect.left))).getOr(CaretPosition.before(table));\n    const getClosestBelowPosition = (root, table, start) => findClosestPositionInBelowCell(table, start).orThunk(() => head(start.getClientRects()).bind(rect => findClosestHorizontalPositionFromPoint(getPositionsBelow(root, CaretPosition.after(table)), rect.left))).getOr(CaretPosition.after(table));\n    const getTable = (previous, pos) => {\n      const node = pos.getNode(previous);\n      return isTable$2(node) ? Optional.some(node) : Optional.none();\n    };\n    const renderBlock = (down, editor, table) => {\n      editor.undoManager.transact(() => {\n        const insertFn = down ? after$4 : before$3;\n        const rng = insertEmptyLine(editor, SugarElement.fromDom(table), insertFn);\n        moveToRange(editor, rng);\n      });\n    };\n    const moveCaret = (editor, down, pos) => {\n      const table = down ? getTable(true, pos) : getTable(false, pos);\n      const last = down === false;\n      table.fold(() => moveToRange(editor, pos.toRange()), table => positionIn(last, editor.getBody()).filter(lastPos => lastPos.isEqual(pos)).fold(() => moveToRange(editor, pos.toRange()), _ => renderBlock(down, editor, table)));\n    };\n    const navigateVertically = (editor, down, table, td) => {\n      const rng = editor.selection.getRng();\n      const pos = CaretPosition.fromRangeStart(rng);\n      const root = editor.getBody();\n      if (!down && isAtFirstTableCellLine(td, pos)) {\n        const newPos = getClosestAbovePosition(root, table, pos);\n        moveCaret(editor, down, newPos);\n        return true;\n      } else if (down && isAtLastTableCellLine(td, pos)) {\n        const newPos = getClosestBelowPosition(root, table, pos);\n        moveCaret(editor, down, newPos);\n        return true;\n      } else {\n        return false;\n      }\n    };\n    const move$1 = (editor, forward, mover) => Optional.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(td => Optional.from(editor.dom.getParent(td, 'table')).map(table => mover(editor, forward, table, td))).getOr(false);\n    const moveH = (editor, forward) => move$1(editor, forward, navigateHorizontally);\n    const moveV = (editor, forward) => move$1(editor, forward, navigateVertically);\n    const getCellFirstCursorPosition = cell => {\n      const selection = SimSelection.exact(cell, 0, cell, 0);\n      return toNative(selection);\n    };\n    const tabGo = (editor, isRoot, cell) => {\n      return cell.fold(Optional.none, Optional.none, (_current, next) => {\n        return first(next).map(cell => {\n          return getCellFirstCursorPosition(cell);\n        });\n      }, current => {\n        editor.execCommand('mceTableInsertRowAfter');\n        return tabForward(editor, isRoot, current);\n      });\n    };\n    const tabForward = (editor, isRoot, cell) => tabGo(editor, isRoot, next(cell, isEditable$3));\n    const tabBackward = (editor, isRoot, cell) => tabGo(editor, isRoot, prev(cell, isEditable$3));\n    const handleTab = (editor, forward) => {\n      const rootElements = [\n        'table',\n        'li',\n        'dl'\n      ];\n      const body = SugarElement.fromDom(editor.getBody());\n      const isRoot = element => {\n        const name$1 = name(element);\n        return eq(element, body) || contains$2(rootElements, name$1);\n      };\n      const rng = editor.selection.getRng();\n      const container = SugarElement.fromDom(!forward ? rng.startContainer : rng.endContainer);\n      return cell(container, isRoot).map(cell => {\n        table(cell, isRoot).each(table => {\n          editor.model.table.clearSelectedCells(table.dom);\n        });\n        editor.selection.collapse(!forward);\n        const navigation = !forward ? tabBackward : tabForward;\n        const rng = navigation(editor, isRoot, cell);\n        rng.each(range => {\n          editor.selection.setRng(range);\n        });\n        return true;\n      }).getOr(false);\n    };\n\n    const executeKeydownOverride$4 = (editor, caret, evt) => {\n      const isMac = Env.os.isMacOS() || Env.os.isiOS();\n      execute([\n        {\n          keyCode: VK.RIGHT,\n          action: action(moveH$2, editor, true)\n        },\n        {\n          keyCode: VK.LEFT,\n          action: action(moveH$2, editor, false)\n        },\n        {\n          keyCode: VK.UP,\n          action: action(moveV$3, editor, false)\n        },\n        {\n          keyCode: VK.DOWN,\n          action: action(moveV$3, editor, true)\n        },\n        ...isMac ? [\n          {\n            keyCode: VK.UP,\n            action: action(selectToEndPoint, editor, false),\n            metaKey: true,\n            shiftKey: true\n          },\n          {\n            keyCode: VK.DOWN,\n            action: action(selectToEndPoint, editor, true),\n            metaKey: true,\n            shiftKey: true\n          }\n        ] : [],\n        {\n          keyCode: VK.RIGHT,\n          action: action(moveH, editor, true)\n        },\n        {\n          keyCode: VK.LEFT,\n          action: action(moveH, editor, false)\n        },\n        {\n          keyCode: VK.UP,\n          action: action(moveV, editor, false)\n        },\n        {\n          keyCode: VK.DOWN,\n          action: action(moveV, editor, true)\n        },\n        {\n          keyCode: VK.RIGHT,\n          action: action(moveH$1, editor, true)\n        },\n        {\n          keyCode: VK.LEFT,\n          action: action(moveH$1, editor, false)\n        },\n        {\n          keyCode: VK.UP,\n          action: action(moveV$1, editor, false)\n        },\n        {\n          keyCode: VK.DOWN,\n          action: action(moveV$1, editor, true)\n        },\n        {\n          keyCode: VK.RIGHT,\n          action: action(move$2, editor, caret, true)\n        },\n        {\n          keyCode: VK.LEFT,\n          action: action(move$2, editor, caret, false)\n        },\n        {\n          keyCode: VK.RIGHT,\n          ctrlKey: !isMac,\n          altKey: isMac,\n          action: action(moveNextWord, editor, caret)\n        },\n        {\n          keyCode: VK.LEFT,\n          ctrlKey: !isMac,\n          altKey: isMac,\n          action: action(movePrevWord, editor, caret)\n        },\n        {\n          keyCode: VK.UP,\n          action: action(moveV$2, editor, false)\n        },\n        {\n          keyCode: VK.DOWN,\n          action: action(moveV$2, editor, true)\n        }\n      ], evt).each(_ => {\n        evt.preventDefault();\n      });\n    };\n    const setup$k = (editor, caret) => {\n      editor.on('keydown', evt => {\n        if (!evt.isDefaultPrevented()) {\n          executeKeydownOverride$4(editor, caret, evt);\n        }\n      });\n    };\n\n    const point = (container, offset) => ({\n      container,\n      offset\n    });\n\n    const DOM$7 = DOMUtils.DOM;\n    const alwaysNext = startNode => node => startNode === node ? -1 : 0;\n    const isBoundary = dom => node => dom.isBlock(node) || contains$2([\n      'BR',\n      'IMG',\n      'HR',\n      'INPUT'\n    ], node.nodeName) || dom.getContentEditable(node) === 'false';\n    const textBefore = (node, offset, rootNode) => {\n      if (isText$a(node) && offset >= 0) {\n        return Optional.some(point(node, offset));\n      } else {\n        const textSeeker = TextSeeker(DOM$7);\n        return Optional.from(textSeeker.backwards(node, offset, alwaysNext(node), rootNode)).map(prev => point(prev.container, prev.container.data.length));\n      }\n    };\n    const textAfter = (node, offset, rootNode) => {\n      if (isText$a(node) && offset >= node.length) {\n        return Optional.some(point(node, offset));\n      } else {\n        const textSeeker = TextSeeker(DOM$7);\n        return Optional.from(textSeeker.forwards(node, offset, alwaysNext(node), rootNode)).map(prev => point(prev.container, 0));\n      }\n    };\n    const scanLeft = (node, offset, rootNode) => {\n      if (!isText$a(node)) {\n        return Optional.none();\n      }\n      const text = node.data;\n      if (offset >= 0 && offset <= text.length) {\n        return Optional.some(point(node, offset));\n      } else {\n        const textSeeker = TextSeeker(DOM$7);\n        return Optional.from(textSeeker.backwards(node, offset, alwaysNext(node), rootNode)).bind(prev => {\n          const prevText = prev.container.data;\n          return scanLeft(prev.container, offset + prevText.length, rootNode);\n        });\n      }\n    };\n    const scanRight = (node, offset, rootNode) => {\n      if (!isText$a(node)) {\n        return Optional.none();\n      }\n      const text = node.data;\n      if (offset <= text.length) {\n        return Optional.some(point(node, offset));\n      } else {\n        const textSeeker = TextSeeker(DOM$7);\n        return Optional.from(textSeeker.forwards(node, offset, alwaysNext(node), rootNode)).bind(next => scanRight(next.container, offset - text.length, rootNode));\n      }\n    };\n    const repeatLeft = (dom, node, offset, process, rootNode) => {\n      const search = TextSeeker(dom, isBoundary(dom));\n      return Optional.from(search.backwards(node, offset, process, rootNode));\n    };\n\n    const isValidTextRange = rng => rng.collapsed && isText$a(rng.startContainer);\n    const getText = rng => trim$1(rng.toString().replace(/\\u00A0/g, ' '));\n    const isWhitespace = chr => chr !== '' && ' \\xA0\\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n\n    const stripTrigger = (text, trigger) => text.substring(trigger.length);\n    const findTrigger = (text, index, trigger) => {\n      let i;\n      const firstChar = trigger.charAt(0);\n      for (i = index - 1; i >= 0; i--) {\n        const char = text.charAt(i);\n        if (isWhitespace(char)) {\n          return Optional.none();\n        }\n        if (firstChar === char && contains$1(text, trigger, i, index)) {\n          break;\n        }\n      }\n      return Optional.some(i);\n    };\n    const findStart = (dom, initRange, trigger, minChars = 0) => {\n      if (!isValidTextRange(initRange)) {\n        return Optional.none();\n      }\n      const buffer = {\n        text: '',\n        offset: 0\n      };\n      const findTriggerIndex = (element, offset, text) => {\n        buffer.text = text + buffer.text;\n        buffer.offset += offset;\n        return findTrigger(buffer.text, buffer.offset, trigger).getOr(offset);\n      };\n      const root = dom.getParent(initRange.startContainer, dom.isBlock) || dom.getRoot();\n      return repeatLeft(dom, initRange.startContainer, initRange.startOffset, findTriggerIndex, root).bind(spot => {\n        const range = initRange.cloneRange();\n        range.setStart(spot.container, spot.offset);\n        range.setEnd(initRange.endContainer, initRange.endOffset);\n        if (range.collapsed) {\n          return Optional.none();\n        }\n        const text = getText(range);\n        const triggerIndex = text.lastIndexOf(trigger);\n        if (triggerIndex !== 0 || stripTrigger(text, trigger).length < minChars) {\n          return Optional.none();\n        } else {\n          return Optional.some({\n            text: stripTrigger(text, trigger),\n            range,\n            trigger\n          });\n        }\n      });\n    };\n    const getContext = (dom, initRange, trigger, minChars = 0) => detect$1(SugarElement.fromDom(initRange.startContainer)).fold(() => findStart(dom, initRange, trigger, minChars), elm => {\n      const range = dom.createRng();\n      range.selectNode(elm.dom);\n      const text = getText(range);\n      return Optional.some({\n        range,\n        text: stripTrigger(text, trigger),\n        trigger\n      });\n    });\n\n    const isText$1 = node => node.nodeType === TEXT;\n    const isElement = node => node.nodeType === ELEMENT;\n    const toLast = node => {\n      if (isText$1(node)) {\n        return point(node, node.data.length);\n      } else {\n        const children = node.childNodes;\n        return children.length > 0 ? toLast(children[children.length - 1]) : point(node, children.length);\n      }\n    };\n    const toLeaf = (node, offset) => {\n      const children = node.childNodes;\n      if (children.length > 0 && offset < children.length) {\n        return toLeaf(children[offset], 0);\n      } else if (children.length > 0 && isElement(node) && children.length === offset) {\n        return toLast(children[children.length - 1]);\n      } else {\n        return point(node, offset);\n      }\n    };\n\n    const isPreviousCharContent = (dom, leaf) => {\n      var _a;\n      const root = (_a = dom.getParent(leaf.container, dom.isBlock)) !== null && _a !== void 0 ? _a : dom.getRoot();\n      return repeatLeft(dom, leaf.container, leaf.offset, (_element, offset) => offset === 0 ? -1 : offset, root).filter(spot => {\n        const char = spot.container.data.charAt(spot.offset - 1);\n        return !isWhitespace(char);\n      }).isSome();\n    };\n    const isStartOfWord = dom => rng => {\n      const leaf = toLeaf(rng.startContainer, rng.startOffset);\n      return !isPreviousCharContent(dom, leaf);\n    };\n    const getTriggerContext = (dom, initRange, database) => findMap(database.triggers, trigger => getContext(dom, initRange, trigger));\n    const lookup = (editor, getDatabase) => {\n      const database = getDatabase();\n      const rng = editor.selection.getRng();\n      return getTriggerContext(editor.dom, rng, database).bind(context => lookupWithContext(editor, getDatabase, context));\n    };\n    const lookupWithContext = (editor, getDatabase, context, fetchOptions = {}) => {\n      var _a;\n      const database = getDatabase();\n      const rng = editor.selection.getRng();\n      const startText = (_a = rng.startContainer.nodeValue) !== null && _a !== void 0 ? _a : '';\n      const autocompleters = filter$5(database.lookupByTrigger(context.trigger), autocompleter => context.text.length >= autocompleter.minChars && autocompleter.matches.getOrThunk(() => isStartOfWord(editor.dom))(context.range, startText, context.text));\n      if (autocompleters.length === 0) {\n        return Optional.none();\n      }\n      const lookupData = Promise.all(map$3(autocompleters, ac => {\n        const fetchResult = ac.fetch(context.text, ac.maxResults, fetchOptions);\n        return fetchResult.then(results => ({\n          matchText: context.text,\n          items: results,\n          columns: ac.columns,\n          onAction: ac.onAction,\n          highlightOn: ac.highlightOn\n        }));\n      }));\n      return Optional.some({\n        lookupData,\n        context\n      });\n    };\n\n    var SimpleResultType;\n    (function (SimpleResultType) {\n      SimpleResultType[SimpleResultType['Error'] = 0] = 'Error';\n      SimpleResultType[SimpleResultType['Value'] = 1] = 'Value';\n    }(SimpleResultType || (SimpleResultType = {})));\n    const fold$1 = (res, onError, onValue) => res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);\n    const partition = results => {\n      const values = [];\n      const errors = [];\n      each$e(results, obj => {\n        fold$1(obj, err => errors.push(err), val => values.push(val));\n      });\n      return {\n        values,\n        errors\n      };\n    };\n    const mapError = (res, f) => {\n      if (res.stype === SimpleResultType.Error) {\n        return {\n          stype: SimpleResultType.Error,\n          serror: f(res.serror)\n        };\n      } else {\n        return res;\n      }\n    };\n    const map = (res, f) => {\n      if (res.stype === SimpleResultType.Value) {\n        return {\n          stype: SimpleResultType.Value,\n          svalue: f(res.svalue)\n        };\n      } else {\n        return res;\n      }\n    };\n    const bind$1 = (res, f) => {\n      if (res.stype === SimpleResultType.Value) {\n        return f(res.svalue);\n      } else {\n        return res;\n      }\n    };\n    const bindError = (res, f) => {\n      if (res.stype === SimpleResultType.Error) {\n        return f(res.serror);\n      } else {\n        return res;\n      }\n    };\n    const svalue = v => ({\n      stype: SimpleResultType.Value,\n      svalue: v\n    });\n    const serror = e => ({\n      stype: SimpleResultType.Error,\n      serror: e\n    });\n    const toResult = res => fold$1(res, Result.error, Result.value);\n    const fromResult = res => res.fold(serror, svalue);\n    const SimpleResult = {\n      fromResult,\n      toResult,\n      svalue,\n      partition,\n      serror,\n      bind: bind$1,\n      bindError,\n      map,\n      mapError,\n      fold: fold$1\n    };\n\n    const formatObj = input => {\n      return isObject(input) && keys(input).length > 100 ? ' removed due to size' : JSON.stringify(input, null, 2);\n    };\n    const formatErrors = errors => {\n      const es = errors.length > 10 ? errors.slice(0, 10).concat([{\n          path: [],\n          getErrorInfo: constant('... (only showing first ten failures)')\n        }]) : errors;\n      return map$3(es, e => {\n        return 'Failed path: (' + e.path.join(' > ') + ')\\n' + e.getErrorInfo();\n      });\n    };\n\n    const nu = (path, getErrorInfo) => {\n      return SimpleResult.serror([{\n          path,\n          getErrorInfo\n        }]);\n    };\n    const missingRequired = (path, key, obj) => nu(path, () => 'Could not find valid *required* value for \"' + key + '\" in ' + formatObj(obj));\n    const missingKey = (path, key) => nu(path, () => 'Choice schema did not contain choice key: \"' + key + '\"');\n    const missingBranch = (path, branches, branch) => nu(path, () => 'The chosen schema: \"' + branch + '\" did not exist in branches: ' + formatObj(branches));\n    const custom = (path, err) => nu(path, constant(err));\n\n    const chooseFrom = (path, input, branches, ch) => {\n      const fields = get$a(branches, ch);\n      return fields.fold(() => missingBranch(path, branches, ch), vp => vp.extract(path.concat(['branch: ' + ch]), input));\n    };\n    const choose$1 = (key, branches) => {\n      const extract = (path, input) => {\n        const choice = get$a(input, key);\n        return choice.fold(() => missingKey(path, key), chosen => chooseFrom(path, input, branches, chosen));\n      };\n      const toString = () => 'chooseOn(' + key + '). Possible values: ' + keys(branches);\n      return {\n        extract,\n        toString\n      };\n    };\n\n    const shallow = (old, nu) => {\n      return nu;\n    };\n    const deep = (old, nu) => {\n      const bothObjects = isPlainObject(old) && isPlainObject(nu);\n      return bothObjects ? deepMerge(old, nu) : nu;\n    };\n    const baseMerge = merger => {\n      return (...objects) => {\n        if (objects.length === 0) {\n          throw new Error(`Can't merge zero objects`);\n        }\n        const ret = {};\n        for (let j = 0; j < objects.length; j++) {\n          const curObject = objects[j];\n          for (const key in curObject) {\n            if (has$2(curObject, key)) {\n              ret[key] = merger(ret[key], curObject[key]);\n            }\n          }\n        }\n        return ret;\n      };\n    };\n    const deepMerge = baseMerge(deep);\n    const merge = baseMerge(shallow);\n\n    const required = () => ({\n      tag: 'required',\n      process: {}\n    });\n    const defaultedThunk = fallbackThunk => ({\n      tag: 'defaultedThunk',\n      process: fallbackThunk\n    });\n    const defaulted$1 = fallback => defaultedThunk(constant(fallback));\n    const asOption = () => ({\n      tag: 'option',\n      process: {}\n    });\n\n    const mergeValues = (values, base) => values.length > 0 ? SimpleResult.svalue(deepMerge(base, merge.apply(undefined, values))) : SimpleResult.svalue(base);\n    const mergeErrors = errors => compose(SimpleResult.serror, flatten)(errors);\n    const consolidateObj = (objects, base) => {\n      const partition = SimpleResult.partition(objects);\n      return partition.errors.length > 0 ? mergeErrors(partition.errors) : mergeValues(partition.values, base);\n    };\n    const consolidateArr = objects => {\n      const partitions = SimpleResult.partition(objects);\n      return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : SimpleResult.svalue(partitions.values);\n    };\n    const ResultCombine = {\n      consolidateObj,\n      consolidateArr\n    };\n\n    const field$1 = (key, newKey, presence, prop) => ({\n      tag: 'field',\n      key,\n      newKey,\n      presence,\n      prop\n    });\n    const customField$1 = (newKey, instantiator) => ({\n      tag: 'custom',\n      newKey,\n      instantiator\n    });\n    const fold = (value, ifField, ifCustom) => {\n      switch (value.tag) {\n      case 'field':\n        return ifField(value.key, value.newKey, value.presence, value.prop);\n      case 'custom':\n        return ifCustom(value.newKey, value.instantiator);\n      }\n    };\n\n    const value = validator => {\n      const extract = (path, val) => {\n        return SimpleResult.bindError(validator(val), err => custom(path, err));\n      };\n      const toString = constant('val');\n      return {\n        extract,\n        toString\n      };\n    };\n    const anyValue$1 = value(SimpleResult.svalue);\n\n    const requiredAccess = (path, obj, key, bundle) => get$a(obj, key).fold(() => missingRequired(path, key, obj), bundle);\n    const fallbackAccess = (obj, key, fallback, bundle) => {\n      const v = get$a(obj, key).getOrThunk(() => fallback(obj));\n      return bundle(v);\n    };\n    const optionAccess = (obj, key, bundle) => bundle(get$a(obj, key));\n    const optionDefaultedAccess = (obj, key, fallback, bundle) => {\n      const opt = get$a(obj, key).map(val => val === true ? fallback(obj) : val);\n      return bundle(opt);\n    };\n    const extractField = (field, path, obj, key, prop) => {\n      const bundle = av => prop.extract(path.concat([key]), av);\n      const bundleAsOption = optValue => optValue.fold(() => SimpleResult.svalue(Optional.none()), ov => {\n        const result = prop.extract(path.concat([key]), ov);\n        return SimpleResult.map(result, Optional.some);\n      });\n      switch (field.tag) {\n      case 'required':\n        return requiredAccess(path, obj, key, bundle);\n      case 'defaultedThunk':\n        return fallbackAccess(obj, key, field.process, bundle);\n      case 'option':\n        return optionAccess(obj, key, bundleAsOption);\n      case 'defaultedOptionThunk':\n        return optionDefaultedAccess(obj, key, field.process, bundleAsOption);\n      case 'mergeWithThunk': {\n          return fallbackAccess(obj, key, constant({}), v => {\n            const result = deepMerge(field.process(obj), v);\n            return bundle(result);\n          });\n        }\n      }\n    };\n    const extractFields = (path, obj, fields) => {\n      const success = {};\n      const errors = [];\n      for (const field of fields) {\n        fold(field, (key, newKey, presence, prop) => {\n          const result = extractField(presence, path, obj, key, prop);\n          SimpleResult.fold(result, err => {\n            errors.push(...err);\n          }, res => {\n            success[newKey] = res;\n          });\n        }, (newKey, instantiator) => {\n          success[newKey] = instantiator(obj);\n        });\n      }\n      return errors.length > 0 ? SimpleResult.serror(errors) : SimpleResult.svalue(success);\n    };\n    const objOf = values => {\n      const extract = (path, o) => extractFields(path, o, values);\n      const toString = () => {\n        const fieldStrings = map$3(values, value => fold(value, (key, _okey, _presence, prop) => key + ' -> ' + prop.toString(), (newKey, _instantiator) => 'state(' + newKey + ')'));\n        return 'obj{\\n' + fieldStrings.join('\\n') + '}';\n      };\n      return {\n        extract,\n        toString\n      };\n    };\n    const arrOf = prop => {\n      const extract = (path, array) => {\n        const results = map$3(array, (a, i) => prop.extract(path.concat(['[' + i + ']']), a));\n        return ResultCombine.consolidateArr(results);\n      };\n      const toString = () => 'array(' + prop.toString() + ')';\n      return {\n        extract,\n        toString\n      };\n    };\n\n    const valueOf = validator => value(v => validator(v).fold(SimpleResult.serror, SimpleResult.svalue));\n    const extractValue = (label, prop, obj) => {\n      const res = prop.extract([label], obj);\n      return SimpleResult.mapError(res, errs => ({\n        input: obj,\n        errors: errs\n      }));\n    };\n    const asRaw = (label, prop, obj) => SimpleResult.toResult(extractValue(label, prop, obj));\n    const formatError = errInfo => {\n      return 'Errors: \\n' + formatErrors(errInfo.errors).join('\\n') + '\\n\\nInput object: ' + formatObj(errInfo.input);\n    };\n    const choose = (key, branches) => choose$1(key, map$2(branches, objOf));\n\n    const anyValue = constant(anyValue$1);\n    const typedValue = (validator, expectedType) => value(a => {\n      const actualType = typeof a;\n      return validator(a) ? SimpleResult.svalue(a) : SimpleResult.serror(`Expected type: ${ expectedType } but got: ${ actualType }`);\n    });\n    const number = typedValue(isNumber, 'number');\n    const string = typedValue(isString, 'string');\n    const boolean = typedValue(isBoolean, 'boolean');\n    const functionProcessor = typedValue(isFunction, 'function');\n\n    const field = field$1;\n    const customField = customField$1;\n    const validateEnum = values => valueOf(value => contains$2(values, value) ? Result.value(value) : Result.error(`Unsupported value: \"${ value }\", choose one of \"${ values.join(', ') }\".`));\n    const requiredOf = (key, schema) => field(key, key, required(), schema);\n    const requiredString = key => requiredOf(key, string);\n    const requiredFunction = key => requiredOf(key, functionProcessor);\n    const requiredArrayOf = (key, schema) => field(key, key, required(), arrOf(schema));\n    const optionOf = (key, schema) => field(key, key, asOption(), schema);\n    const optionString = key => optionOf(key, string);\n    const optionFunction = key => optionOf(key, functionProcessor);\n    const defaulted = (key, fallback) => field(key, key, defaulted$1(fallback), anyValue());\n    const defaultedOf = (key, fallback, schema) => field(key, key, defaulted$1(fallback), schema);\n    const defaultedNumber = (key, fallback) => defaultedOf(key, fallback, number);\n    const defaultedString = (key, fallback) => defaultedOf(key, fallback, string);\n    const defaultedStringEnum = (key, fallback, values) => defaultedOf(key, fallback, validateEnum(values));\n    const defaultedBoolean = (key, fallback) => defaultedOf(key, fallback, boolean);\n    const defaultedFunction = (key, fallback) => defaultedOf(key, fallback, functionProcessor);\n    const defaultedArrayOf = (key, fallback, schema) => defaultedOf(key, fallback, arrOf(schema));\n\n    const type = requiredString('type');\n    const fetch$1 = requiredFunction('fetch');\n    const onAction = requiredFunction('onAction');\n    const onSetup = defaultedFunction('onSetup', () => noop);\n    const optionalText = optionString('text');\n    const optionalIcon = optionString('icon');\n    const optionalTooltip = optionString('tooltip');\n    const optionalLabel = optionString('label');\n    const active = defaultedBoolean('active', false);\n    const enabled = defaultedBoolean('enabled', true);\n    const primary = defaultedBoolean('primary', false);\n    const defaultedColumns = num => defaulted('columns', num);\n    const defaultedType = type => defaultedString('type', type);\n\n    const autocompleterSchema = objOf([\n      type,\n      requiredString('trigger'),\n      defaultedNumber('minChars', 1),\n      defaultedColumns(1),\n      defaultedNumber('maxResults', 10),\n      optionFunction('matches'),\n      fetch$1,\n      onAction,\n      defaultedArrayOf('highlightOn', [], string)\n    ]);\n    const createAutocompleter = spec => asRaw('Autocompleter', autocompleterSchema, {\n      trigger: spec.ch,\n      ...spec\n    });\n\n    const baseToolbarButtonFields = [\n      enabled,\n      optionalTooltip,\n      optionalIcon,\n      optionalText,\n      onSetup\n    ];\n\n    const baseToolbarToggleButtonFields = [active].concat(baseToolbarButtonFields);\n\n    const contextBarFields = [\n      defaultedFunction('predicate', never),\n      defaultedStringEnum('scope', 'node', [\n        'node',\n        'editor'\n      ]),\n      defaultedStringEnum('position', 'selection', [\n        'node',\n        'selection',\n        'line'\n      ])\n    ];\n\n    const contextButtonFields = baseToolbarButtonFields.concat([\n      defaultedType('contextformbutton'),\n      primary,\n      onAction,\n      customField('original', identity)\n    ]);\n    const contextToggleButtonFields = baseToolbarToggleButtonFields.concat([\n      defaultedType('contextformbutton'),\n      primary,\n      onAction,\n      customField('original', identity)\n    ]);\n    const launchButtonFields = baseToolbarButtonFields.concat([defaultedType('contextformbutton')]);\n    const launchToggleButtonFields = baseToolbarToggleButtonFields.concat([defaultedType('contextformtogglebutton')]);\n    const toggleOrNormal = choose('type', {\n      contextformbutton: contextButtonFields,\n      contextformtogglebutton: contextToggleButtonFields\n    });\n    objOf([\n      defaultedType('contextform'),\n      defaultedFunction('initValue', constant('')),\n      optionalLabel,\n      requiredArrayOf('commands', toggleOrNormal),\n      optionOf('launch', choose('type', {\n        contextformbutton: launchButtonFields,\n        contextformtogglebutton: launchToggleButtonFields\n      }))\n    ].concat(contextBarFields));\n\n    const register$2 = editor => {\n      const popups = editor.ui.registry.getAll().popups;\n      const dataset = map$2(popups, popup => createAutocompleter(popup).fold(err => {\n        throw new Error(formatError(err));\n      }, identity));\n      const triggers = stringArray(mapToArray(dataset, v => v.trigger));\n      const datasetValues = values(dataset);\n      const lookupByTrigger = trigger => filter$5(datasetValues, dv => dv.trigger === trigger);\n      return {\n        dataset,\n        triggers,\n        lookupByTrigger\n      };\n    };\n\n    const setupEditorInput = (editor, api) => {\n      const update = last$1(api.load, 50);\n      editor.on('keypress compositionend', e => {\n        if (e.which === 27) {\n          return;\n        }\n        update.throttle();\n      });\n      editor.on('keydown', e => {\n        const keyCode = e.which;\n        if (keyCode === 8) {\n          update.throttle();\n        } else if (keyCode === 27) {\n          api.cancelIfNecessary();\n        }\n      });\n      editor.on('remove', update.cancel);\n    };\n    const setup$j = editor => {\n      const activeAutocompleter = value$2();\n      const uiActive = Cell(false);\n      const isActive = activeAutocompleter.isSet;\n      const cancelIfNecessary = () => {\n        if (isActive()) {\n          removeAutocompleterDecoration(editor);\n          fireAutocompleterEnd(editor);\n          uiActive.set(false);\n          activeAutocompleter.clear();\n        }\n      };\n      const commenceIfNecessary = context => {\n        if (!isActive()) {\n          addAutocompleterDecoration(editor, context.range);\n          activeAutocompleter.set({\n            trigger: context.trigger,\n            matchLength: context.text.length\n          });\n        }\n      };\n      const getAutocompleters = cached(() => register$2(editor));\n      const doLookup = fetchOptions => activeAutocompleter.get().map(ac => getContext(editor.dom, editor.selection.getRng(), ac.trigger).bind(newContext => lookupWithContext(editor, getAutocompleters, newContext, fetchOptions))).getOrThunk(() => lookup(editor, getAutocompleters));\n      const load = fetchOptions => {\n        doLookup(fetchOptions).fold(cancelIfNecessary, lookupInfo => {\n          commenceIfNecessary(lookupInfo.context);\n          lookupInfo.lookupData.then(lookupData => {\n            activeAutocompleter.get().map(ac => {\n              const context = lookupInfo.context;\n              if (ac.trigger === context.trigger) {\n                if (context.text.length - ac.matchLength >= 10) {\n                  cancelIfNecessary();\n                } else {\n                  activeAutocompleter.set({\n                    ...ac,\n                    matchLength: context.text.length\n                  });\n                  if (uiActive.get()) {\n                    fireAutocompleterUpdate(editor, { lookupData });\n                  } else {\n                    uiActive.set(true);\n                    fireAutocompleterStart(editor, { lookupData });\n                  }\n                }\n              }\n            });\n          });\n        });\n      };\n      editor.addCommand('mceAutocompleterReload', (_ui, value) => {\n        const fetchOptions = isObject(value) ? value.fetchOptions : {};\n        load(fetchOptions);\n      });\n      editor.addCommand('mceAutocompleterClose', cancelIfNecessary);\n      setupEditorInput(editor, {\n        cancelIfNecessary,\n        load\n      });\n    };\n\n    const createAndFireInputEvent = eventType => (editor, inputType, specifics = {}) => {\n      const target = editor.getBody();\n      const overrides = {\n        bubbles: true,\n        composed: true,\n        data: null,\n        isComposing: false,\n        detail: 0,\n        view: null,\n        target,\n        currentTarget: target,\n        eventPhase: Event.AT_TARGET,\n        originalTarget: target,\n        explicitOriginalTarget: target,\n        isTrusted: false,\n        srcElement: target,\n        cancelable: false,\n        preventDefault: noop,\n        inputType\n      };\n      const input = clone$3(new InputEvent(eventType));\n      return editor.dispatch(eventType, {\n        ...input,\n        ...overrides,\n        ...specifics\n      });\n    };\n    const fireInputEvent = createAndFireInputEvent('input');\n    const fireBeforeInputEvent = createAndFireInputEvent('beforeinput');\n\n    const executeKeydownOverride$3 = (editor, caret, evt) => {\n      const inputType = evt.keyCode === VK.BACKSPACE ? 'deleteContentBackward' : 'deleteContentForward';\n      executeWithDelayedAction([\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete, editor)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$5, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$5, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$6, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$6, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$3, editor, caret, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$3, editor, caret, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$9, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$9, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$4, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$4, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$1, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$1, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$7, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$7, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$8, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$8, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$2, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$2, editor, true)\n        }\n      ], evt).filter(_ => editor.selection.isEditable()).each(applyAction => {\n        evt.preventDefault();\n        const beforeInput = fireBeforeInputEvent(editor, inputType);\n        if (!beforeInput.isDefaultPrevented()) {\n          applyAction();\n          fireInputEvent(editor, inputType);\n        }\n      });\n    };\n    const executeKeyupOverride = (editor, evt, isBackspaceKeydown) => {\n      const platform = detect$2();\n      const os = platform.os;\n      const browser = platform.browser;\n      const multiDeleteKeyPatterns = os.isMacOS() ? [\n        {\n          keyCode: VK.BACKSPACE,\n          altKey: true,\n          action: action(refreshCaret, editor)\n        },\n        {\n          keyCode: VK.DELETE,\n          altKey: true,\n          action: action(refreshCaret, editor)\n        }\n      ] : [\n        {\n          keyCode: VK.BACKSPACE,\n          ctrlKey: true,\n          action: action(refreshCaret, editor)\n        },\n        {\n          keyCode: VK.DELETE,\n          ctrlKey: true,\n          action: action(refreshCaret, editor)\n        }\n      ];\n      if (os.isMacOS() && isBackspaceKeydown) {\n        multiDeleteKeyPatterns.push({\n          keyCode: browser.isFirefox() ? 224 : 91,\n          action: action(refreshCaret, editor)\n        });\n      }\n      execute([\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(paddEmptyElement, editor)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(paddEmptyElement, editor)\n        },\n        ...multiDeleteKeyPatterns\n      ], evt);\n    };\n    const setup$i = (editor, caret) => {\n      let isBackspaceKeydown = false;\n      editor.on('keydown', evt => {\n        isBackspaceKeydown = evt.keyCode === VK.BACKSPACE;\n        if (!evt.isDefaultPrevented()) {\n          executeKeydownOverride$3(editor, caret, evt);\n        }\n      });\n      editor.on('keyup', evt => {\n        if (!evt.isDefaultPrevented()) {\n          executeKeyupOverride(editor, evt, isBackspaceKeydown);\n        }\n        isBackspaceKeydown = false;\n      });\n    };\n\n    const firstNonWhiteSpaceNodeSibling = node => {\n      while (node) {\n        if (isElement$6(node) || isText$a(node) && node.data && /[\\r\\n\\s]/.test(node.data)) {\n          return node;\n        }\n        node = node.nextSibling;\n      }\n      return null;\n    };\n    const moveToCaretPosition = (editor, root) => {\n      const dom = editor.dom;\n      const moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements();\n      if (!root) {\n        return;\n      }\n      if (/^(LI|DT|DD)$/.test(root.nodeName)) {\n        const firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild);\n        if (firstChild && /^(UL|OL|DL)$/.test(firstChild.nodeName)) {\n          root.insertBefore(dom.doc.createTextNode(nbsp), root.firstChild);\n        }\n      }\n      const rng = dom.createRng();\n      root.normalize();\n      if (root.hasChildNodes()) {\n        const walker = new DomTreeWalker(root, root);\n        let lastNode = root;\n        let node;\n        while (node = walker.current()) {\n          if (isText$a(node)) {\n            rng.setStart(node, 0);\n            rng.setEnd(node, 0);\n            break;\n          }\n          if (moveCaretBeforeOnEnterElementsMap[node.nodeName.toLowerCase()]) {\n            rng.setStartBefore(node);\n            rng.setEndBefore(node);\n            break;\n          }\n          lastNode = node;\n          node = walker.next();\n        }\n        if (!node) {\n          rng.setStart(lastNode, 0);\n          rng.setEnd(lastNode, 0);\n        }\n      } else {\n        if (isBr$6(root)) {\n          if (root.nextSibling && dom.isBlock(root.nextSibling)) {\n            rng.setStartBefore(root);\n            rng.setEndBefore(root);\n          } else {\n            rng.setStartAfter(root);\n            rng.setEndAfter(root);\n          }\n        } else {\n          rng.setStart(root, 0);\n          rng.setEnd(root, 0);\n        }\n      }\n      editor.selection.setRng(rng);\n      scrollRangeIntoView(editor, rng);\n    };\n    const getEditableRoot = (dom, node) => {\n      const root = dom.getRoot();\n      let editableRoot;\n      let parent = node;\n      while (parent !== root && parent && dom.getContentEditable(parent) !== 'false') {\n        if (dom.getContentEditable(parent) === 'true') {\n          editableRoot = parent;\n        }\n        parent = parent.parentNode;\n      }\n      return parent !== root ? editableRoot : root;\n    };\n    const getParentBlock$1 = editor => {\n      return Optional.from(editor.dom.getParent(editor.selection.getStart(true), editor.dom.isBlock));\n    };\n    const getParentBlockName = editor => {\n      return getParentBlock$1(editor).fold(constant(''), parentBlock => {\n        return parentBlock.nodeName.toUpperCase();\n      });\n    };\n    const isListItemParentBlock = editor => {\n      return getParentBlock$1(editor).filter(elm => {\n        return isListItem$1(SugarElement.fromDom(elm));\n      }).isSome();\n    };\n\n    const getDetailsRoot = (editor, element) => editor.dom.getParent(element, isDetails);\n    const isAtDetailsEdge = (root, element, isTextBlock) => {\n      let node = element;\n      while (node && node !== root && isNull(node.nextSibling)) {\n        const parent = node.parentElement;\n        if (!parent || !isTextBlock(parent)) {\n          return isDetails(parent);\n        }\n        node = parent;\n      }\n      return false;\n    };\n    const isLastEmptyBlockInDetails = (editor, shiftKey, element) => !shiftKey && element.nodeName.toLowerCase() === getForcedRootBlock(editor) && editor.dom.isEmpty(element) && isAtDetailsEdge(editor.getBody(), element, el => has$2(editor.schema.getTextBlockElements(), el.nodeName.toLowerCase()));\n    const insertNewLine = (editor, createNewBlock, parentBlock) => {\n      var _a, _b, _c;\n      const newBlock = createNewBlock(getForcedRootBlock(editor));\n      const root = getDetailsRoot(editor, parentBlock);\n      if (!root) {\n        return;\n      }\n      editor.dom.insertAfter(newBlock, root);\n      moveToCaretPosition(editor, newBlock);\n      if (((_c = (_b = (_a = parentBlock.parentElement) === null || _a === void 0 ? void 0 : _a.childNodes) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0) > 1) {\n        editor.dom.remove(parentBlock);\n      }\n    };\n\n    const hasFirstChild = (elm, name) => {\n      return elm.firstChild && elm.firstChild.nodeName === name;\n    };\n    const isFirstChild = elm => {\n      var _a;\n      return ((_a = elm.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild) === elm;\n    };\n    const hasParent = (elm, parentName) => {\n      const parentNode = elm === null || elm === void 0 ? void 0 : elm.parentNode;\n      return isNonNullable(parentNode) && parentNode.nodeName === parentName;\n    };\n    const isListBlock = elm => {\n      return isNonNullable(elm) && /^(OL|UL|LI)$/.test(elm.nodeName);\n    };\n    const isListItem = elm => {\n      return isNonNullable(elm) && /^(LI|DT|DD)$/.test(elm.nodeName);\n    };\n    const isNestedList = elm => {\n      return isListBlock(elm) && isListBlock(elm.parentNode);\n    };\n    const getContainerBlock = containerBlock => {\n      const containerBlockParent = containerBlock.parentNode;\n      return isListItem(containerBlockParent) ? containerBlockParent : containerBlock;\n    };\n    const isFirstOrLastLi = (containerBlock, parentBlock, first) => {\n      let node = containerBlock[first ? 'firstChild' : 'lastChild'];\n      while (node) {\n        if (isElement$6(node)) {\n          break;\n        }\n        node = node[first ? 'nextSibling' : 'previousSibling'];\n      }\n      return node === parentBlock;\n    };\n    const insert$3 = (editor, createNewBlock, containerBlock, parentBlock, newBlockName) => {\n      const dom = editor.dom;\n      const rng = editor.selection.getRng();\n      const containerParent = containerBlock.parentNode;\n      if (containerBlock === editor.getBody() || !containerParent) {\n        return;\n      }\n      if (isNestedList(containerBlock)) {\n        newBlockName = 'LI';\n      }\n      let newBlock = createNewBlock(newBlockName);\n      if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) {\n        if (hasParent(containerBlock, 'LI')) {\n          const containerBlockParent = getContainerBlock(containerBlock);\n          dom.insertAfter(newBlock, containerBlockParent);\n          if (isFirstChild(containerBlock)) {\n            dom.remove(containerBlockParent);\n          } else {\n            dom.remove(containerBlock);\n          }\n        } else {\n          dom.replace(newBlock, containerBlock);\n        }\n      } else if (isFirstOrLastLi(containerBlock, parentBlock, true)) {\n        if (hasParent(containerBlock, 'LI')) {\n          dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n          newBlock.appendChild(dom.doc.createTextNode(' '));\n          newBlock.appendChild(containerBlock);\n        } else {\n          containerParent.insertBefore(newBlock, containerBlock);\n        }\n        dom.remove(parentBlock);\n      } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) {\n        dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n        dom.remove(parentBlock);\n      } else {\n        containerBlock = getContainerBlock(containerBlock);\n        const tmpRng = rng.cloneRange();\n        tmpRng.setStartAfter(parentBlock);\n        tmpRng.setEndAfter(containerBlock);\n        const fragment = tmpRng.extractContents();\n        if (newBlockName === 'LI' && hasFirstChild(fragment, 'LI')) {\n          newBlock = fragment.firstChild;\n          dom.insertAfter(fragment, containerBlock);\n        } else {\n          dom.insertAfter(fragment, containerBlock);\n          dom.insertAfter(newBlock, containerBlock);\n        }\n        dom.remove(parentBlock);\n      }\n      moveToCaretPosition(editor, newBlock);\n    };\n\n    const trimZwsp = fragment => {\n      each$e(descendants$1(SugarElement.fromDom(fragment), isText$b), text => {\n        const rawNode = text.dom;\n        rawNode.nodeValue = trim$1(rawNode.data);\n      });\n    };\n    const isWithinNonEditableList = (editor, node) => {\n      const parentList = editor.dom.getParent(node, 'ol,ul,dl');\n      return parentList !== null && editor.dom.getContentEditableParent(parentList) === 'false';\n    };\n    const isEmptyAnchor = (dom, elm) => {\n      return elm && elm.nodeName === 'A' && dom.isEmpty(elm);\n    };\n    const emptyBlock = elm => {\n      elm.innerHTML = '<br data-mce-bogus=\"1\">';\n    };\n    const containerAndSiblingName = (container, nodeName) => {\n      return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName;\n    };\n    const canSplitBlock = (dom, node) => {\n      return isNonNullable(node) && dom.isBlock(node) && !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position) && dom.isEditable(node.parentNode) && dom.getContentEditable(node) !== 'false';\n    };\n    const trimInlineElementsOnLeftSideOfBlock = (dom, nonEmptyElementsMap, block) => {\n      var _a;\n      const firstChilds = [];\n      if (!block) {\n        return;\n      }\n      let currentNode = block;\n      while (currentNode = currentNode.firstChild) {\n        if (dom.isBlock(currentNode)) {\n          return;\n        }\n        if (isElement$6(currentNode) && !nonEmptyElementsMap[currentNode.nodeName.toLowerCase()]) {\n          firstChilds.push(currentNode);\n        }\n      }\n      let i = firstChilds.length;\n      while (i--) {\n        currentNode = firstChilds[i];\n        if (!currentNode.hasChildNodes() || currentNode.firstChild === currentNode.lastChild && ((_a = currentNode.firstChild) === null || _a === void 0 ? void 0 : _a.nodeValue) === '') {\n          dom.remove(currentNode);\n        } else {\n          if (isEmptyAnchor(dom, currentNode)) {\n            dom.remove(currentNode);\n          }\n        }\n      }\n    };\n    const normalizeZwspOffset = (start, container, offset) => {\n      if (!isText$a(container)) {\n        return offset;\n      } else if (start) {\n        return offset === 1 && container.data.charAt(offset - 1) === ZWSP$1 ? 0 : offset;\n      } else {\n        return offset === container.data.length - 1 && container.data.charAt(offset) === ZWSP$1 ? container.data.length : offset;\n      }\n    };\n    const includeZwspInRange = rng => {\n      const newRng = rng.cloneRange();\n      newRng.setStart(rng.startContainer, normalizeZwspOffset(true, rng.startContainer, rng.startOffset));\n      newRng.setEnd(rng.endContainer, normalizeZwspOffset(false, rng.endContainer, rng.endOffset));\n      return newRng;\n    };\n    const trimLeadingLineBreaks = node => {\n      let currentNode = node;\n      do {\n        if (isText$a(currentNode)) {\n          currentNode.data = currentNode.data.replace(/^[\\r\\n]+/, '');\n        }\n        currentNode = currentNode.firstChild;\n      } while (currentNode);\n    };\n    const applyAttributes = (editor, node, forcedRootBlockAttrs) => {\n      const dom = editor.dom;\n      Optional.from(forcedRootBlockAttrs.style).map(dom.parseStyle).each(attrStyles => {\n        const currentStyles = getAllRaw(SugarElement.fromDom(node));\n        const newStyles = {\n          ...currentStyles,\n          ...attrStyles\n        };\n        dom.setStyles(node, newStyles);\n      });\n      const attrClassesOpt = Optional.from(forcedRootBlockAttrs.class).map(attrClasses => attrClasses.split(/\\s+/));\n      const currentClassesOpt = Optional.from(node.className).map(currentClasses => filter$5(currentClasses.split(/\\s+/), clazz => clazz !== ''));\n      lift2(attrClassesOpt, currentClassesOpt, (attrClasses, currentClasses) => {\n        const filteredClasses = filter$5(currentClasses, clazz => !contains$2(attrClasses, clazz));\n        const newClasses = [\n          ...attrClasses,\n          ...filteredClasses\n        ];\n        dom.setAttrib(node, 'class', newClasses.join(' '));\n      });\n      const appliedAttrs = [\n        'style',\n        'class'\n      ];\n      const remainingAttrs = filter$4(forcedRootBlockAttrs, (_, attrs) => !contains$2(appliedAttrs, attrs));\n      dom.setAttribs(node, remainingAttrs);\n    };\n    const setForcedBlockAttrs = (editor, node) => {\n      const forcedRootBlockName = getForcedRootBlock(editor);\n      if (forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {\n        const forcedRootBlockAttrs = getForcedRootBlockAttrs(editor);\n        applyAttributes(editor, node, forcedRootBlockAttrs);\n      }\n    };\n    const wrapSelfAndSiblingsInDefaultBlock = (editor, newBlockName, rng, container, offset) => {\n      var _a, _b;\n      const dom = editor.dom;\n      const editableRoot = (_a = getEditableRoot(dom, container)) !== null && _a !== void 0 ? _a : dom.getRoot();\n      let parentBlock = dom.getParent(container, dom.isBlock);\n      if (!parentBlock || !canSplitBlock(dom, parentBlock)) {\n        parentBlock = parentBlock || editableRoot;\n        if (!parentBlock.hasChildNodes()) {\n          const newBlock = dom.create(newBlockName);\n          setForcedBlockAttrs(editor, newBlock);\n          parentBlock.appendChild(newBlock);\n          rng.setStart(newBlock, 0);\n          rng.setEnd(newBlock, 0);\n          return newBlock;\n        }\n        let node = container;\n        while (node && node.parentNode !== parentBlock) {\n          node = node.parentNode;\n        }\n        let startNode;\n        while (node && !dom.isBlock(node)) {\n          startNode = node;\n          node = node.previousSibling;\n        }\n        const startNodeName = (_b = startNode === null || startNode === void 0 ? void 0 : startNode.parentElement) === null || _b === void 0 ? void 0 : _b.nodeName;\n        if (startNode && startNodeName && editor.schema.isValidChild(startNodeName, newBlockName.toLowerCase())) {\n          const startNodeParent = startNode.parentNode;\n          const newBlock = dom.create(newBlockName);\n          setForcedBlockAttrs(editor, newBlock);\n          startNodeParent.insertBefore(newBlock, startNode);\n          node = startNode;\n          while (node && !dom.isBlock(node)) {\n            const next = node.nextSibling;\n            newBlock.appendChild(node);\n            node = next;\n          }\n          rng.setStart(container, offset);\n          rng.setEnd(container, offset);\n        }\n      }\n      return container;\n    };\n    const addBrToBlockIfNeeded = (dom, block) => {\n      block.normalize();\n      const lastChild = block.lastChild;\n      if (!lastChild || isElement$6(lastChild) && /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {\n        dom.add(block, 'br');\n      }\n    };\n    const shouldEndContainer = (editor, container) => {\n      const optionValue = shouldEndContainerOnEmptyBlock(editor);\n      if (isNullable(container)) {\n        return false;\n      } else if (isString(optionValue)) {\n        return contains$2(Tools.explode(optionValue), container.nodeName.toLowerCase());\n      } else {\n        return optionValue;\n      }\n    };\n    const insert$2 = (editor, evt) => {\n      let container;\n      let offset;\n      let parentBlockName;\n      let containerBlock;\n      let isAfterLastNodeInContainer = false;\n      const dom = editor.dom;\n      const schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements();\n      const rng = editor.selection.getRng();\n      const newBlockName = getForcedRootBlock(editor);\n      const isInRoot = rng.collapsed && rng.startContainer === editor.dom.getRoot();\n      const start = SugarElement.fromDom(rng.startContainer);\n      const child = child$1(start, rng.startOffset);\n      const isCef = child.exists(element => isHTMLElement(element) && !isEditable$3(element));\n      const inRootAndLastOrCef = isInRoot && isCef;\n      const createNewBlock = name => {\n        let node = container;\n        const textInlineElements = schema.getTextInlineElements();\n        let block;\n        if (name || parentBlockName === 'TABLE' || parentBlockName === 'HR') {\n          block = dom.create(name || newBlockName);\n        } else {\n          block = parentBlock.cloneNode(false);\n        }\n        let caretNode = block;\n        if (shouldKeepStyles(editor) === false) {\n          dom.setAttrib(block, 'style', null);\n          dom.setAttrib(block, 'class', null);\n        } else {\n          do {\n            if (textInlineElements[node.nodeName]) {\n              if (isCaretNode(node) || isBookmarkNode$1(node)) {\n                continue;\n              }\n              const clonedNode = node.cloneNode(false);\n              dom.setAttrib(clonedNode, 'id', '');\n              if (block.hasChildNodes()) {\n                clonedNode.appendChild(block.firstChild);\n                block.appendChild(clonedNode);\n              } else {\n                caretNode = clonedNode;\n                block.appendChild(clonedNode);\n              }\n            }\n          } while ((node = node.parentNode) && node !== editableRoot);\n        }\n        setForcedBlockAttrs(editor, block);\n        emptyBlock(caretNode);\n        return block;\n      };\n      const isCaretAtStartOrEndOfBlock = start => {\n        const normalizedOffset = normalizeZwspOffset(start, container, offset);\n        if (isText$a(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.data.length)) {\n          return false;\n        }\n        if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) {\n          return true;\n        }\n        if (start && isElement$6(container) && container === parentBlock.firstChild) {\n          return true;\n        }\n        if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) {\n          return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;\n        }\n        const walker = new DomTreeWalker(container, parentBlock);\n        if (isText$a(container)) {\n          if (start && normalizedOffset === 0) {\n            walker.prev();\n          } else if (!start && normalizedOffset === container.data.length) {\n            walker.next();\n          }\n        }\n        let node;\n        while (node = walker.current()) {\n          if (isElement$6(node)) {\n            if (!node.getAttribute('data-mce-bogus')) {\n              const name = node.nodeName.toLowerCase();\n              if (nonEmptyElementsMap[name] && name !== 'br') {\n                return false;\n              }\n            }\n          } else if (isText$a(node) && !isWhitespaceText(node.data)) {\n            return false;\n          }\n          if (start) {\n            walker.prev();\n          } else {\n            walker.next();\n          }\n        }\n        return true;\n      };\n      const insertNewBlockAfter = () => {\n        let block;\n        if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName !== 'HGROUP') {\n          block = createNewBlock(newBlockName);\n        } else {\n          block = createNewBlock();\n        }\n        if (shouldEndContainer(editor, containerBlock) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock, undefined, { includeZwsp: true })) {\n          block = dom.split(containerBlock, parentBlock);\n        } else {\n          dom.insertAfter(block, parentBlock);\n        }\n        moveToCaretPosition(editor, block);\n        return block;\n      };\n      normalize$2(dom, rng).each(normRng => {\n        rng.setStart(normRng.startContainer, normRng.startOffset);\n        rng.setEnd(normRng.endContainer, normRng.endOffset);\n      });\n      container = rng.startContainer;\n      offset = rng.startOffset;\n      const shiftKey = !!(evt && evt.shiftKey);\n      const ctrlKey = !!(evt && evt.ctrlKey);\n      if (isElement$6(container) && container.hasChildNodes() && !inRootAndLastOrCef) {\n        isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n        container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n        if (isAfterLastNodeInContainer && isText$a(container)) {\n          offset = container.data.length;\n        } else {\n          offset = 0;\n        }\n      }\n      const editableRoot = getEditableRoot(dom, container);\n      if (!editableRoot || isWithinNonEditableList(editor, container)) {\n        return;\n      }\n      if (!shiftKey) {\n        container = wrapSelfAndSiblingsInDefaultBlock(editor, newBlockName, rng, container, offset);\n      }\n      let parentBlock = dom.getParent(container, dom.isBlock) || dom.getRoot();\n      containerBlock = isNonNullable(parentBlock === null || parentBlock === void 0 ? void 0 : parentBlock.parentNode) ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n      parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\n      const containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n      if (containerBlockName === 'LI' && !ctrlKey) {\n        const liBlock = containerBlock;\n        parentBlock = liBlock;\n        containerBlock = liBlock.parentNode;\n        parentBlockName = containerBlockName;\n      }\n      if (isElement$6(containerBlock) && isLastEmptyBlockInDetails(editor, shiftKey, parentBlock)) {\n        return insertNewLine(editor, createNewBlock, parentBlock);\n      }\n      if (/^(LI|DT|DD)$/.test(parentBlockName) && isElement$6(containerBlock)) {\n        if (dom.isEmpty(parentBlock)) {\n          insert$3(editor, createNewBlock, containerBlock, parentBlock, newBlockName);\n          return;\n        }\n      }\n      if (!inRootAndLastOrCef && (parentBlock === editor.getBody() || !canSplitBlock(dom, parentBlock))) {\n        return;\n      }\n      const parentBlockParent = parentBlock.parentNode;\n      let newBlock;\n      if (inRootAndLastOrCef) {\n        newBlock = createNewBlock(newBlockName);\n        child.fold(() => {\n          append$1(start, SugarElement.fromDom(newBlock));\n        }, child => {\n          before$3(child, SugarElement.fromDom(newBlock));\n        });\n        editor.selection.setCursorLocation(newBlock, 0);\n      } else if (isCaretContainerBlock$1(parentBlock)) {\n        newBlock = showCaretContainerBlock(parentBlock);\n        if (dom.isEmpty(parentBlock)) {\n          emptyBlock(parentBlock);\n        }\n        setForcedBlockAttrs(editor, newBlock);\n        moveToCaretPosition(editor, newBlock);\n      } else if (isCaretAtStartOrEndOfBlock(false)) {\n        newBlock = insertNewBlockAfter();\n      } else if (isCaretAtStartOrEndOfBlock(true) && parentBlockParent) {\n        newBlock = parentBlockParent.insertBefore(createNewBlock(), parentBlock);\n        const isNearChildren = hasChildNodes(SugarElement.fromDom(rng.startContainer)) && rng.collapsed;\n        moveToCaretPosition(editor, containerAndSiblingName(parentBlock, 'HR') || isNearChildren ? newBlock : parentBlock);\n      } else {\n        const tmpRng = includeZwspInRange(rng).cloneRange();\n        tmpRng.setEndAfter(parentBlock);\n        const fragment = tmpRng.extractContents();\n        trimZwsp(fragment);\n        trimLeadingLineBreaks(fragment);\n        newBlock = fragment.firstChild;\n        dom.insertAfter(fragment, parentBlock);\n        trimInlineElementsOnLeftSideOfBlock(dom, nonEmptyElementsMap, newBlock);\n        addBrToBlockIfNeeded(dom, parentBlock);\n        if (dom.isEmpty(parentBlock)) {\n          emptyBlock(parentBlock);\n        }\n        newBlock.normalize();\n        if (dom.isEmpty(newBlock)) {\n          dom.remove(newBlock);\n          insertNewBlockAfter();\n        } else {\n          setForcedBlockAttrs(editor, newBlock);\n          moveToCaretPosition(editor, newBlock);\n        }\n      }\n      dom.setAttrib(newBlock, 'id', '');\n      editor.dispatch('NewBlock', { newBlock });\n    };\n    const fakeEventName$1 = 'insertParagraph';\n    const blockbreak = {\n      insert: insert$2,\n      fakeEventName: fakeEventName$1\n    };\n\n    const hasRightSideContent = (schema, container, parentBlock) => {\n      const walker = new DomTreeWalker(container, parentBlock);\n      let node;\n      const nonEmptyElementsMap = schema.getNonEmptyElements();\n      while (node = walker.next()) {\n        if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || isText$a(node) && node.length > 0) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const moveSelectionToBr = (editor, brElm, extraBr) => {\n      const rng = editor.dom.createRng();\n      if (!extraBr) {\n        rng.setStartAfter(brElm);\n        rng.setEndAfter(brElm);\n      } else {\n        rng.setStartBefore(brElm);\n        rng.setEndBefore(brElm);\n      }\n      editor.selection.setRng(rng);\n      scrollRangeIntoView(editor, rng);\n    };\n    const insertBrAtCaret = (editor, evt) => {\n      const selection = editor.selection;\n      const dom = editor.dom;\n      const rng = selection.getRng();\n      let brElm;\n      let extraBr = false;\n      normalize$2(dom, rng).each(normRng => {\n        rng.setStart(normRng.startContainer, normRng.startOffset);\n        rng.setEnd(normRng.endContainer, normRng.endOffset);\n      });\n      let offset = rng.startOffset;\n      let container = rng.startContainer;\n      if (isElement$6(container) && container.hasChildNodes()) {\n        const isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n        container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n        if (isAfterLastNodeInContainer && isText$a(container)) {\n          offset = container.data.length;\n        } else {\n          offset = 0;\n        }\n      }\n      let parentBlock = dom.getParent(container, dom.isBlock);\n      const containerBlock = parentBlock && parentBlock.parentNode ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n      const containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n      const isControlKey = !!(evt && evt.ctrlKey);\n      if (containerBlockName === 'LI' && !isControlKey) {\n        parentBlock = containerBlock;\n      }\n      if (isText$a(container) && offset >= container.data.length) {\n        if (!hasRightSideContent(editor.schema, container, parentBlock || dom.getRoot())) {\n          brElm = dom.create('br');\n          rng.insertNode(brElm);\n          rng.setStartAfter(brElm);\n          rng.setEndAfter(brElm);\n          extraBr = true;\n        }\n      }\n      brElm = dom.create('br');\n      rangeInsertNode(dom, rng, brElm);\n      moveSelectionToBr(editor, brElm, extraBr);\n      editor.undoManager.add();\n    };\n    const insertBrBefore = (editor, inline) => {\n      const br = SugarElement.fromTag('br');\n      before$3(SugarElement.fromDom(inline), br);\n      editor.undoManager.add();\n    };\n    const insertBrAfter = (editor, inline) => {\n      if (!hasBrAfter(editor.getBody(), inline)) {\n        after$4(SugarElement.fromDom(inline), SugarElement.fromTag('br'));\n      }\n      const br = SugarElement.fromTag('br');\n      after$4(SugarElement.fromDom(inline), br);\n      moveSelectionToBr(editor, br.dom, false);\n      editor.undoManager.add();\n    };\n    const isBeforeBr = pos => {\n      return isBr$6(pos.getNode());\n    };\n    const hasBrAfter = (rootNode, startNode) => {\n      if (isBeforeBr(CaretPosition.after(startNode))) {\n        return true;\n      } else {\n        return nextPosition(rootNode, CaretPosition.after(startNode)).map(pos => {\n          return isBr$6(pos.getNode());\n        }).getOr(false);\n      }\n    };\n    const isAnchorLink = elm => {\n      return elm && elm.nodeName === 'A' && 'href' in elm;\n    };\n    const isInsideAnchor = location => {\n      return location.fold(never, isAnchorLink, isAnchorLink, never);\n    };\n    const readInlineAnchorLocation = editor => {\n      const isInlineTarget$1 = curry(isInlineTarget, editor);\n      const position = CaretPosition.fromRangeStart(editor.selection.getRng());\n      return readLocation(isInlineTarget$1, editor.getBody(), position).filter(isInsideAnchor);\n    };\n    const insertBrOutsideAnchor = (editor, location) => {\n      location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);\n    };\n    const insert$1 = (editor, evt) => {\n      const anchorLocation = readInlineAnchorLocation(editor);\n      if (anchorLocation.isSome()) {\n        anchorLocation.each(curry(insertBrOutsideAnchor, editor));\n      } else {\n        insertBrAtCaret(editor, evt);\n      }\n    };\n    const fakeEventName = 'insertLineBreak';\n    const linebreak = {\n      insert: insert$1,\n      fakeEventName\n    };\n\n    const matchesSelector = (editor, selector) => {\n      return getParentBlock$1(editor).filter(parentBlock => {\n        return selector.length > 0 && is$1(SugarElement.fromDom(parentBlock), selector);\n      }).isSome();\n    };\n    const shouldInsertBr = editor => {\n      return matchesSelector(editor, getBrNewLineSelector(editor));\n    };\n    const shouldBlockNewLine$1 = editor => {\n      return matchesSelector(editor, getNoNewLineSelector(editor));\n    };\n\n    const newLineAction = Adt.generate([\n      { br: [] },\n      { block: [] },\n      { none: [] }\n    ]);\n    const shouldBlockNewLine = (editor, _shiftKey) => {\n      return shouldBlockNewLine$1(editor);\n    };\n    const inListBlock = requiredState => {\n      return (editor, _shiftKey) => {\n        return isListItemParentBlock(editor) === requiredState;\n      };\n    };\n    const inBlock = (blockName, requiredState) => (editor, _shiftKey) => {\n      const state = getParentBlockName(editor) === blockName.toUpperCase();\n      return state === requiredState;\n    };\n    const inCefBlock = editor => {\n      const editableRoot = getEditableRoot(editor.dom, editor.selection.getStart());\n      return isNullable(editableRoot);\n    };\n    const inPreBlock = requiredState => inBlock('pre', requiredState);\n    const inSummaryBlock = () => inBlock('summary', true);\n    const shouldPutBrInPre = requiredState => {\n      return (editor, _shiftKey) => {\n        return shouldPutBrInPre$1(editor) === requiredState;\n      };\n    };\n    const inBrContext = (editor, _shiftKey) => {\n      return shouldInsertBr(editor);\n    };\n    const hasShiftKey = (_editor, shiftKey) => {\n      return shiftKey;\n    };\n    const canInsertIntoEditableRoot = editor => {\n      const forcedRootBlock = getForcedRootBlock(editor);\n      const rootEditable = getEditableRoot(editor.dom, editor.selection.getStart());\n      return isNonNullable(rootEditable) && editor.schema.isValidChild(rootEditable.nodeName, forcedRootBlock);\n    };\n    const isInRootWithEmptyOrCEF = editor => {\n      const rng = editor.selection.getRng();\n      const isInRoot = rng.collapsed && rng.startContainer === editor.dom.getRoot();\n      const start = SugarElement.fromDom(rng.startContainer);\n      const child = child$1(start, rng.startOffset);\n      const isCefOpt = child.map(element => isHTMLElement(element) && !isEditable$3(element));\n      return isInRoot && isCefOpt.getOr(true);\n    };\n    const match = (predicates, action) => {\n      return (editor, shiftKey) => {\n        const isMatch = foldl(predicates, (res, p) => {\n          return res && p(editor, shiftKey);\n        }, true);\n        return isMatch ? Optional.some(action) : Optional.none();\n      };\n    };\n    const getAction = (editor, evt) => {\n      return evaluateUntil([\n        match([shouldBlockNewLine], newLineAction.none()),\n        match([\n          inPreBlock(true),\n          inCefBlock\n        ], newLineAction.none()),\n        match([inSummaryBlock()], newLineAction.br()),\n        match([\n          inPreBlock(true),\n          shouldPutBrInPre(false),\n          hasShiftKey\n        ], newLineAction.br()),\n        match([\n          inPreBlock(true),\n          shouldPutBrInPre(false)\n        ], newLineAction.block()),\n        match([\n          inPreBlock(true),\n          shouldPutBrInPre(true),\n          hasShiftKey\n        ], newLineAction.block()),\n        match([\n          inPreBlock(true),\n          shouldPutBrInPre(true)\n        ], newLineAction.br()),\n        match([\n          inListBlock(true),\n          hasShiftKey\n        ], newLineAction.br()),\n        match([inListBlock(true)], newLineAction.block()),\n        match([inBrContext], newLineAction.br()),\n        match([hasShiftKey], newLineAction.br()),\n        match([canInsertIntoEditableRoot], newLineAction.block()),\n        match([isInRootWithEmptyOrCEF], newLineAction.block())\n      ], [\n        editor,\n        !!(evt && evt.shiftKey)\n      ]).getOr(newLineAction.none());\n    };\n\n    const insertBreak = (breakType, editor, evt) => {\n      if (!editor.selection.isCollapsed()) {\n        execEditorDeleteCommand(editor);\n      }\n      if (isNonNullable(evt)) {\n        const event = fireBeforeInputEvent(editor, breakType.fakeEventName);\n        if (event.isDefaultPrevented()) {\n          return;\n        }\n      }\n      breakType.insert(editor, evt);\n      if (isNonNullable(evt)) {\n        fireInputEvent(editor, breakType.fakeEventName);\n      }\n    };\n    const insert = (editor, evt) => {\n      const br = () => insertBreak(linebreak, editor, evt);\n      const block = () => insertBreak(blockbreak, editor, evt);\n      const logicalAction = getAction(editor, evt);\n      switch (getNewlineBehavior(editor)) {\n      case 'linebreak':\n        logicalAction.fold(br, br, noop);\n        break;\n      case 'block':\n        logicalAction.fold(block, block, noop);\n        break;\n      case 'invert':\n        logicalAction.fold(block, br, noop);\n        break;\n      default:\n        logicalAction.fold(br, block, noop);\n        break;\n      }\n    };\n\n    const platform$2 = detect$2();\n    const isIOSSafari = platform$2.os.isiOS() && platform$2.browser.isSafari();\n    const handleEnterKeyEvent = (editor, event) => {\n      if (event.isDefaultPrevented()) {\n        return;\n      }\n      event.preventDefault();\n      endTypingLevelIgnoreLocks(editor.undoManager);\n      editor.undoManager.transact(() => {\n        insert(editor, event);\n      });\n    };\n    const isCaretAfterKoreanCharacter = rng => {\n      if (!rng.collapsed) {\n        return false;\n      }\n      const startContainer = rng.startContainer;\n      if (isText$a(startContainer)) {\n        const koreanCharRegex = /^[\\uAC00-\\uD7AF\\u1100-\\u11FF\\u3130-\\u318F\\uA960-\\uA97F\\uD7B0-\\uD7FF]$/;\n        const char = startContainer.data.charAt(rng.startOffset - 1);\n        return koreanCharRegex.test(char);\n      } else {\n        return false;\n      }\n    };\n    const setup$h = editor => {\n      let iOSSafariKeydownBookmark = Optional.none();\n      const iOSSafariKeydownOverride = editor => {\n        iOSSafariKeydownBookmark = Optional.some(editor.selection.getBookmark());\n        editor.undoManager.add();\n      };\n      const iOSSafariKeyupOverride = (editor, event) => {\n        editor.undoManager.undo();\n        iOSSafariKeydownBookmark.fold(noop, b => editor.selection.moveToBookmark(b));\n        handleEnterKeyEvent(editor, event);\n        iOSSafariKeydownBookmark = Optional.none();\n      };\n      editor.on('keydown', event => {\n        if (event.keyCode === VK.ENTER) {\n          if (isIOSSafari && isCaretAfterKoreanCharacter(editor.selection.getRng())) {\n            iOSSafariKeydownOverride(editor);\n          } else {\n            handleEnterKeyEvent(editor, event);\n          }\n        }\n      });\n      editor.on('keyup', event => {\n        if (event.keyCode === VK.ENTER) {\n          iOSSafariKeydownBookmark.each(() => iOSSafariKeyupOverride(editor, event));\n        }\n      });\n    };\n\n    const executeKeydownOverride$2 = (editor, caret, evt) => {\n      const isMac = Env.os.isMacOS() || Env.os.isiOS();\n      execute([\n        {\n          keyCode: VK.END,\n          action: action(moveToLineEndPoint$1, editor, true)\n        },\n        {\n          keyCode: VK.HOME,\n          action: action(moveToLineEndPoint$1, editor, false)\n        },\n        ...!isMac ? [\n          {\n            keyCode: VK.HOME,\n            action: action(selectToEndPoint, editor, false),\n            ctrlKey: true,\n            shiftKey: true\n          },\n          {\n            keyCode: VK.END,\n            action: action(selectToEndPoint, editor, true),\n            ctrlKey: true,\n            shiftKey: true\n          }\n        ] : [],\n        {\n          keyCode: VK.END,\n          action: action(moveToLineEndPoint, editor, true)\n        },\n        {\n          keyCode: VK.HOME,\n          action: action(moveToLineEndPoint, editor, false)\n        },\n        {\n          keyCode: VK.END,\n          action: action(moveToLineEndPoint$2, editor, true, caret)\n        },\n        {\n          keyCode: VK.HOME,\n          action: action(moveToLineEndPoint$2, editor, false, caret)\n        }\n      ], evt).each(_ => {\n        evt.preventDefault();\n      });\n    };\n    const setup$g = (editor, caret) => {\n      editor.on('keydown', evt => {\n        if (!evt.isDefaultPrevented()) {\n          executeKeydownOverride$2(editor, caret, evt);\n        }\n      });\n    };\n\n    const setup$f = editor => {\n      editor.on('input', e => {\n        if (!e.isComposing) {\n          normalizeNbspsInEditor(editor);\n        }\n      });\n    };\n\n    const platform$1 = detect$2();\n    const executeKeyupAction = (editor, caret, evt) => {\n      execute([\n        {\n          keyCode: VK.PAGE_UP,\n          action: action(moveToLineEndPoint$2, editor, false, caret)\n        },\n        {\n          keyCode: VK.PAGE_DOWN,\n          action: action(moveToLineEndPoint$2, editor, true, caret)\n        }\n      ], evt);\n    };\n    const stopImmediatePropagation = e => e.stopImmediatePropagation();\n    const isPageUpDown = evt => evt.keyCode === VK.PAGE_UP || evt.keyCode === VK.PAGE_DOWN;\n    const setNodeChangeBlocker = (blocked, editor, block) => {\n      if (block && !blocked.get()) {\n        editor.on('NodeChange', stopImmediatePropagation, true);\n      } else if (!block && blocked.get()) {\n        editor.off('NodeChange', stopImmediatePropagation);\n      }\n      blocked.set(block);\n    };\n    const setup$e = (editor, caret) => {\n      if (platform$1.os.isMacOS()) {\n        return;\n      }\n      const blocked = Cell(false);\n      editor.on('keydown', evt => {\n        if (isPageUpDown(evt)) {\n          setNodeChangeBlocker(blocked, editor, true);\n        }\n      });\n      editor.on('keyup', evt => {\n        if (!evt.isDefaultPrevented()) {\n          executeKeyupAction(editor, caret, evt);\n        }\n        if (isPageUpDown(evt) && blocked.get()) {\n          setNodeChangeBlocker(blocked, editor, false);\n          editor.nodeChanged();\n        }\n      });\n    };\n\n    const insertTextAtPosition = (text, pos) => {\n      const container = pos.container();\n      const offset = pos.offset();\n      if (isText$a(container)) {\n        container.insertData(offset, text);\n        return Optional.some(CaretPosition(container, offset + text.length));\n      } else {\n        return getElementFromPosition(pos).map(elm => {\n          const textNode = SugarElement.fromText(text);\n          if (pos.isAtEnd()) {\n            after$4(elm, textNode);\n          } else {\n            before$3(elm, textNode);\n          }\n          return CaretPosition(textNode.dom, text.length);\n        });\n      }\n    };\n    const insertNbspAtPosition = curry(insertTextAtPosition, nbsp);\n    const insertSpaceAtPosition = curry(insertTextAtPosition, ' ');\n\n    const locationToCaretPosition = root => location => location.fold(element => prevPosition(root.dom, CaretPosition.before(element)), element => firstPositionIn(element), element => lastPositionIn(element), element => nextPosition(root.dom, CaretPosition.after(element)));\n    const insertInlineBoundarySpaceOrNbsp = (root, pos) => checkPos => needsToHaveNbsp(root, checkPos) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\n    const setSelection = editor => pos => {\n      editor.selection.setRng(pos.toRange());\n      editor.nodeChanged();\n      return true;\n    };\n    const insertSpaceOrNbspAtSelection = editor => {\n      const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n      const root = SugarElement.fromDom(editor.getBody());\n      if (editor.selection.isCollapsed()) {\n        const isInlineTarget$1 = curry(isInlineTarget, editor);\n        const caretPosition = CaretPosition.fromRangeStart(editor.selection.getRng());\n        return readLocation(isInlineTarget$1, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).map(checkPos => () => insertInlineBoundarySpaceOrNbsp(root, pos)(checkPos).each(setSelection(editor)));\n      } else {\n        return Optional.none();\n      }\n    };\n\n    const executeKeydownOverride$1 = (editor, evt) => {\n      executeWithDelayedAction([{\n          keyCode: VK.SPACEBAR,\n          action: action(insertSpaceOrNbspAtSelection, editor)\n        }], evt).each(applyAction => {\n        evt.preventDefault();\n        const event = fireBeforeInputEvent(editor, 'insertText', { data: ' ' });\n        if (!event.isDefaultPrevented()) {\n          applyAction();\n          fireInputEvent(editor, 'insertText', { data: ' ' });\n        }\n      });\n    };\n    const setup$d = editor => {\n      editor.on('keydown', evt => {\n        if (!evt.isDefaultPrevented()) {\n          executeKeydownOverride$1(editor, evt);\n        }\n      });\n    };\n\n    const tableTabNavigation = editor => {\n      if (hasTableTabNavigation(editor)) {\n        return [\n          {\n            keyCode: VK.TAB,\n            action: action(handleTab, editor, true)\n          },\n          {\n            keyCode: VK.TAB,\n            shiftKey: true,\n            action: action(handleTab, editor, false)\n          }\n        ];\n      } else {\n        return [];\n      }\n    };\n    const executeKeydownOverride = (editor, evt) => {\n      execute([...tableTabNavigation(editor)], evt).each(_ => {\n        evt.preventDefault();\n      });\n    };\n    const setup$c = editor => {\n      editor.on('keydown', evt => {\n        if (!evt.isDefaultPrevented()) {\n          executeKeydownOverride(editor, evt);\n        }\n      });\n    };\n\n    const setup$b = editor => {\n      editor.addShortcut('Meta+P', '', 'mcePrint');\n      setup$j(editor);\n      if (isRtc(editor)) {\n        return Cell(null);\n      } else {\n        const caret = setupSelectedState(editor);\n        setup$l(editor);\n        setup$k(editor, caret);\n        setup$i(editor, caret);\n        setup$h(editor);\n        setup$d(editor);\n        setup$f(editor);\n        setup$c(editor);\n        setup$g(editor, caret);\n        setup$e(editor, caret);\n        return caret;\n      }\n    };\n\n    class NodeChange {\n      constructor(editor) {\n        this.lastPath = [];\n        this.editor = editor;\n        let lastRng;\n        const self = this;\n        if (!('onselectionchange' in editor.getDoc())) {\n          editor.on('NodeChange click mouseup keyup focus', e => {\n            const nativeRng = editor.selection.getRng();\n            const fakeRng = {\n              startContainer: nativeRng.startContainer,\n              startOffset: nativeRng.startOffset,\n              endContainer: nativeRng.endContainer,\n              endOffset: nativeRng.endOffset\n            };\n            if (e.type === 'nodechange' || !isEq$4(fakeRng, lastRng)) {\n              editor.dispatch('SelectionChange');\n            }\n            lastRng = fakeRng;\n          });\n        }\n        editor.on('contextmenu', () => {\n          editor.dispatch('SelectionChange');\n        });\n        editor.on('SelectionChange', () => {\n          const startElm = editor.selection.getStart(true);\n          if (!startElm) {\n            return;\n          }\n          if (hasAnyRanges(editor) && !self.isSameElementPath(startElm) && editor.dom.isChildOf(startElm, editor.getBody())) {\n            editor.nodeChanged({ selectionChange: true });\n          }\n        });\n        editor.on('mouseup', e => {\n          if (!e.isDefaultPrevented() && hasAnyRanges(editor)) {\n            if (editor.selection.getNode().nodeName === 'IMG') {\n              Delay.setEditorTimeout(editor, () => {\n                editor.nodeChanged();\n              });\n            } else {\n              editor.nodeChanged();\n            }\n          }\n        });\n      }\n      nodeChanged(args = {}) {\n        const selection = this.editor.selection;\n        let node;\n        if (this.editor.initialized && selection && !shouldDisableNodeChange(this.editor) && !this.editor.mode.isReadOnly()) {\n          const root = this.editor.getBody();\n          node = selection.getStart(true) || root;\n          if (node.ownerDocument !== this.editor.getDoc() || !this.editor.dom.isChildOf(node, root)) {\n            node = root;\n          }\n          const parents = [];\n          this.editor.dom.getParent(node, node => {\n            if (node === root) {\n              return true;\n            } else {\n              parents.push(node);\n              return false;\n            }\n          });\n          this.editor.dispatch('NodeChange', {\n            ...args,\n            element: node,\n            parents\n          });\n        }\n      }\n      isSameElementPath(startElm) {\n        let i;\n        const editor = this.editor;\n        const currentPath = reverse(editor.dom.getParents(startElm, always, editor.getBody()));\n        if (currentPath.length === this.lastPath.length) {\n          for (i = currentPath.length; i >= 0; i--) {\n            if (currentPath[i] !== this.lastPath[i]) {\n              break;\n            }\n          }\n          if (i === -1) {\n            this.lastPath = currentPath;\n            return true;\n          }\n        }\n        this.lastPath = currentPath;\n        return false;\n      }\n    }\n\n    const imageId = generate$1('image');\n    const getDragImage = transfer => {\n      const dt = transfer;\n      return Optional.from(dt[imageId]);\n    };\n    const setDragImage = (transfer, imageData) => {\n      const dt = transfer;\n      dt[imageId] = imageData;\n    };\n\n    const eventId = generate$1('event');\n    const getEvent = transfer => {\n      const dt = transfer;\n      return Optional.from(dt[eventId]);\n    };\n    const mkSetEventFn = type => transfer => {\n      const dt = transfer;\n      dt[eventId] = type;\n    };\n    const setEvent = (transfer, type) => mkSetEventFn(type)(transfer);\n    const setDragstartEvent = mkSetEventFn(0);\n    const setDropEvent = mkSetEventFn(2);\n    const setDragendEvent = mkSetEventFn(1);\n    const checkEvent = expectedType => transfer => {\n      const dt = transfer;\n      return Optional.from(dt[eventId]).exists(type => type === expectedType);\n    };\n    const isInDragStartEvent = checkEvent(0);\n\n    const createEmptyFileList = () => Object.freeze({\n      length: 0,\n      item: _ => null\n    });\n\n    const modeId = generate$1('mode');\n    const getMode = transfer => {\n      const dt = transfer;\n      return Optional.from(dt[modeId]);\n    };\n    const mkSetModeFn = mode => transfer => {\n      const dt = transfer;\n      dt[modeId] = mode;\n    };\n    const setMode$1 = (transfer, mode) => mkSetModeFn(mode)(transfer);\n    const setReadWriteMode = mkSetModeFn(0);\n    const setReadOnlyMode = mkSetModeFn(2);\n    const setProtectedMode = mkSetModeFn(1);\n    const checkMode = expectedMode => transfer => {\n      const dt = transfer;\n      return Optional.from(dt[modeId]).exists(mode => mode === expectedMode);\n    };\n    const isInReadWriteMode = checkMode(0);\n    const isInProtectedMode = checkMode(1);\n\n    const normalizeItems = (dataTransfer, itemsImpl) => ({\n      ...itemsImpl,\n      get length() {\n        return itemsImpl.length;\n      },\n      add: (data, type) => {\n        if (isInReadWriteMode(dataTransfer)) {\n          if (isString(data)) {\n            if (!isUndefined(type)) {\n              return itemsImpl.add(data, type);\n            }\n          } else {\n            return itemsImpl.add(data);\n          }\n        }\n        return null;\n      },\n      remove: idx => {\n        if (isInReadWriteMode(dataTransfer)) {\n          itemsImpl.remove(idx);\n        }\n      },\n      clear: () => {\n        if (isInReadWriteMode(dataTransfer)) {\n          itemsImpl.clear();\n        }\n      }\n    });\n\n    const validDropEffects = [\n      'none',\n      'copy',\n      'link',\n      'move'\n    ];\n    const validEffectAlloweds = [\n      'none',\n      'copy',\n      'copyLink',\n      'copyMove',\n      'link',\n      'linkMove',\n      'move',\n      'all',\n      'uninitialized'\n    ];\n    const createDataTransfer = () => {\n      const dataTransferImpl = new window.DataTransfer();\n      let dropEffect = 'move';\n      let effectAllowed = 'all';\n      const dataTransfer = {\n        get dropEffect() {\n          return dropEffect;\n        },\n        set dropEffect(effect) {\n          if (contains$2(validDropEffects, effect)) {\n            dropEffect = effect;\n          }\n        },\n        get effectAllowed() {\n          return effectAllowed;\n        },\n        set effectAllowed(allowed) {\n          if (isInDragStartEvent(dataTransfer) && contains$2(validEffectAlloweds, allowed)) {\n            effectAllowed = allowed;\n          }\n        },\n        get items() {\n          return normalizeItems(dataTransfer, dataTransferImpl.items);\n        },\n        get files() {\n          if (isInProtectedMode(dataTransfer)) {\n            return createEmptyFileList();\n          } else {\n            return dataTransferImpl.files;\n          }\n        },\n        get types() {\n          return dataTransferImpl.types;\n        },\n        setDragImage: (image, x, y) => {\n          if (isInReadWriteMode(dataTransfer)) {\n            setDragImage(dataTransfer, {\n              image,\n              x,\n              y\n            });\n            dataTransferImpl.setDragImage(image, x, y);\n          }\n        },\n        getData: format => {\n          if (isInProtectedMode(dataTransfer)) {\n            return '';\n          } else {\n            return dataTransferImpl.getData(format);\n          }\n        },\n        setData: (format, data) => {\n          if (isInReadWriteMode(dataTransfer)) {\n            dataTransferImpl.setData(format, data);\n          }\n        },\n        clearData: format => {\n          if (isInReadWriteMode(dataTransfer)) {\n            dataTransferImpl.clearData(format);\n          }\n        }\n      };\n      setReadWriteMode(dataTransfer);\n      return dataTransfer;\n    };\n    const cloneDataTransfer = original => {\n      const clone = createDataTransfer();\n      const originalMode = getMode(original);\n      setReadOnlyMode(original);\n      setDragstartEvent(clone);\n      clone.dropEffect = original.dropEffect;\n      clone.effectAllowed = original.effectAllowed;\n      getDragImage(original).each(imageData => clone.setDragImage(imageData.image, imageData.x, imageData.y));\n      each$e(original.types, type => {\n        if (type !== 'Files') {\n          clone.setData(type, original.getData(type));\n        }\n      });\n      each$e(original.files, file => clone.items.add(file));\n      getEvent(original).each(type => {\n        setEvent(clone, type);\n      });\n      originalMode.each(mode => {\n        setMode$1(original, mode);\n        setMode$1(clone, mode);\n      });\n      return clone;\n    };\n\n    const getHtmlData = dataTransfer => {\n      const html = dataTransfer.getData('text/html');\n      return html === '' ? Optional.none() : Optional.some(html);\n    };\n    const setHtmlData = (dataTransfer, html) => dataTransfer.setData('text/html', html);\n\n    const internalMimeType = 'x-tinymce/html';\n    const internalHtmlMime = constant(internalMimeType);\n    const internalMark = '<!-- ' + internalMimeType + ' -->';\n    const mark = html => internalMark + html;\n    const unmark = html => html.replace(internalMark, '');\n    const isMarked = html => html.indexOf(internalMark) !== -1;\n\n    const isPlainText = text => {\n      return !/<(?:\\/?(?!(?:div|p|br|span)>)\\w+|(?:(?!(?:span style=\"white-space:\\s?pre;?\">)|br\\s?\\/>))\\w+\\s[^>]+)>/i.test(text);\n    };\n    const openContainer = (rootTag, rootAttrs) => {\n      let tag = '<' + rootTag;\n      const attrs = mapToArray(rootAttrs, (value, key) => key + '=\"' + Entities.encodeAllRaw(value) + '\"');\n      if (attrs.length) {\n        tag += ' ' + attrs.join(' ');\n      }\n      return tag + '>';\n    };\n    const toBlockElements = (text, rootTag, rootAttrs) => {\n      const blocks = text.split(/\\n\\n/);\n      const tagOpen = openContainer(rootTag, rootAttrs);\n      const tagClose = '</' + rootTag + '>';\n      const paragraphs = map$3(blocks, p => {\n        return p.split(/\\n/).join('<br />');\n      });\n      const stitch = p => {\n        return tagOpen + p + tagClose;\n      };\n      return paragraphs.length === 1 ? paragraphs[0] : map$3(paragraphs, stitch).join('');\n    };\n\n    const pasteBinDefaultContent = '%MCEPASTEBIN%';\n    const create$6 = (editor, lastRngCell) => {\n      const {dom, selection} = editor;\n      const body = editor.getBody();\n      lastRngCell.set(selection.getRng());\n      const pasteBinElm = dom.add(editor.getBody(), 'div', {\n        'id': 'mcepastebin',\n        'class': 'mce-pastebin',\n        'contentEditable': true,\n        'data-mce-bogus': 'all',\n        'style': 'position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0'\n      }, pasteBinDefaultContent);\n      if (Env.browser.isFirefox()) {\n        dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) === 'rtl' ? 65535 : -65535);\n      }\n      dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', e => {\n        e.stopPropagation();\n      });\n      pasteBinElm.focus();\n      selection.select(pasteBinElm, true);\n    };\n    const remove = (editor, lastRngCell) => {\n      const dom = editor.dom;\n      if (getEl(editor)) {\n        let pasteBinClone;\n        const lastRng = lastRngCell.get();\n        while (pasteBinClone = getEl(editor)) {\n          dom.remove(pasteBinClone);\n          dom.unbind(pasteBinClone);\n        }\n        if (lastRng) {\n          editor.selection.setRng(lastRng);\n        }\n      }\n      lastRngCell.set(null);\n    };\n    const getEl = editor => editor.dom.get('mcepastebin');\n    const isPasteBin = elm => isNonNullable(elm) && elm.id === 'mcepastebin';\n    const getHtml = editor => {\n      const dom = editor.dom;\n      const copyAndRemove = (toElm, fromElm) => {\n        toElm.appendChild(fromElm);\n        dom.remove(fromElm, true);\n      };\n      const [pasteBinElm, ...pasteBinClones] = filter$5(editor.getBody().childNodes, isPasteBin);\n      each$e(pasteBinClones, pasteBinClone => {\n        copyAndRemove(pasteBinElm, pasteBinClone);\n      });\n      const dirtyWrappers = dom.select('div[id=mcepastebin]', pasteBinElm);\n      for (let i = dirtyWrappers.length - 1; i >= 0; i--) {\n        const cleanWrapper = dom.create('div');\n        pasteBinElm.insertBefore(cleanWrapper, dirtyWrappers[i]);\n        copyAndRemove(cleanWrapper, dirtyWrappers[i]);\n      }\n      return pasteBinElm ? pasteBinElm.innerHTML : '';\n    };\n    const isDefaultPasteBinContent = content => content === pasteBinDefaultContent;\n    const PasteBin = editor => {\n      const lastRng = Cell(null);\n      return {\n        create: () => create$6(editor, lastRng),\n        remove: () => remove(editor, lastRng),\n        getEl: () => getEl(editor),\n        getHtml: () => getHtml(editor),\n        getLastRng: lastRng.get\n      };\n    };\n\n    const filter$1 = (content, items) => {\n      Tools.each(items, v => {\n        if (is$4(v, RegExp)) {\n          content = content.replace(v, '');\n        } else {\n          content = content.replace(v[0], v[1]);\n        }\n      });\n      return content;\n    };\n    const innerText = html => {\n      const schema = Schema();\n      const domParser = DomParser({}, schema);\n      let text = '';\n      const voidElements = schema.getVoidElements();\n      const ignoreElements = Tools.makeMap('script noscript style textarea video audio iframe object', ' ');\n      const blockElements = schema.getBlockElements();\n      const walk = node => {\n        const name = node.name, currentNode = node;\n        if (name === 'br') {\n          text += '\\n';\n          return;\n        }\n        if (name === 'wbr') {\n          return;\n        }\n        if (voidElements[name]) {\n          text += ' ';\n        }\n        if (ignoreElements[name]) {\n          text += ' ';\n          return;\n        }\n        if (node.type === 3) {\n          text += node.value;\n        }\n        if (!(node.name in schema.getVoidElements())) {\n          let currentNode = node.firstChild;\n          if (currentNode) {\n            do {\n              walk(currentNode);\n            } while (currentNode = currentNode.next);\n          }\n        }\n        if (blockElements[name] && currentNode.next) {\n          text += '\\n';\n          if (name === 'p') {\n            text += '\\n';\n          }\n        }\n      };\n      html = filter$1(html, [/<!\\[[^\\]]+\\]>/g]);\n      walk(domParser.parse(html));\n      return text;\n    };\n    const trimHtml = html => {\n      const trimSpaces = (all, s1, s2) => {\n        if (!s1 && !s2) {\n          return ' ';\n        }\n        return nbsp;\n      };\n      html = filter$1(html, [\n        /^[\\s\\S]*<body[^>]*>\\s*|\\s*<\\/body[^>]*>[\\s\\S]*$/ig,\n        /<!--StartFragment-->|<!--EndFragment-->/g,\n        [\n          /( ?)<span class=\"Apple-converted-space\">\\u00a0<\\/span>( ?)/g,\n          trimSpaces\n        ],\n        /<br class=\"Apple-interchange-newline\">/g,\n        /<br>$/i\n      ]);\n      return html;\n    };\n    const createIdGenerator = prefix => {\n      let count = 0;\n      return () => {\n        return prefix + count++;\n      };\n    };\n    const getImageMimeType = ext => {\n      const lowerExt = ext.toLowerCase();\n      const mimeOverrides = {\n        jpg: 'jpeg',\n        jpe: 'jpeg',\n        jfi: 'jpeg',\n        jif: 'jpeg',\n        jfif: 'jpeg',\n        pjpeg: 'jpeg',\n        pjp: 'jpeg',\n        svg: 'svg+xml'\n      };\n      return Tools.hasOwn(mimeOverrides, lowerExt) ? 'image/' + mimeOverrides[lowerExt] : 'image/' + lowerExt;\n    };\n\n    const preProcess = (editor, html) => {\n      const parser = DomParser({ sanitize: shouldSanitizeXss(editor) }, editor.schema);\n      parser.addNodeFilter('meta', nodes => {\n        Tools.each(nodes, node => {\n          node.remove();\n        });\n      });\n      const fragment = parser.parse(html, {\n        forced_root_block: false,\n        isRootContent: true\n      });\n      return HtmlSerializer({ validate: true }, editor.schema).serialize(fragment);\n    };\n    const processResult = (content, cancelled) => ({\n      content,\n      cancelled\n    });\n    const postProcessFilter = (editor, html, internal) => {\n      const tempBody = editor.dom.create('div', { style: 'display:none' }, html);\n      const postProcessArgs = firePastePostProcess(editor, tempBody, internal);\n      return processResult(postProcessArgs.node.innerHTML, postProcessArgs.isDefaultPrevented());\n    };\n    const filterContent = (editor, content, internal) => {\n      const preProcessArgs = firePastePreProcess(editor, content, internal);\n      const filteredContent = preProcess(editor, preProcessArgs.content);\n      if (editor.hasEventListeners('PastePostProcess') && !preProcessArgs.isDefaultPrevented()) {\n        return postProcessFilter(editor, filteredContent, internal);\n      } else {\n        return processResult(filteredContent, preProcessArgs.isDefaultPrevented());\n      }\n    };\n    const process = (editor, html, internal) => {\n      return filterContent(editor, html, internal);\n    };\n\n    const pasteHtml$1 = (editor, html) => {\n      editor.insertContent(html, {\n        merge: shouldPasteMergeFormats(editor),\n        paste: true\n      });\n      return true;\n    };\n    const isAbsoluteUrl = url => /^https?:\\/\\/[\\w\\-\\/+=.,!;:&%@^~(){}?#]+$/i.test(url);\n    const isImageUrl = (editor, url) => {\n      return isAbsoluteUrl(url) && exists(getAllowedImageFileTypes(editor), type => endsWith(url.toLowerCase(), `.${ type.toLowerCase() }`));\n    };\n    const createImage = (editor, url, pasteHtmlFn) => {\n      editor.undoManager.extra(() => {\n        pasteHtmlFn(editor, url);\n      }, () => {\n        editor.insertContent('<img src=\"' + url + '\">');\n      });\n      return true;\n    };\n    const createLink = (editor, url, pasteHtmlFn) => {\n      editor.undoManager.extra(() => {\n        pasteHtmlFn(editor, url);\n      }, () => {\n        editor.execCommand('mceInsertLink', false, url);\n      });\n      return true;\n    };\n    const linkSelection = (editor, html, pasteHtmlFn) => !editor.selection.isCollapsed() && isAbsoluteUrl(html) ? createLink(editor, html, pasteHtmlFn) : false;\n    const insertImage = (editor, html, pasteHtmlFn) => isImageUrl(editor, html) ? createImage(editor, html, pasteHtmlFn) : false;\n    const smartInsertContent = (editor, html) => {\n      Tools.each([\n        linkSelection,\n        insertImage,\n        pasteHtml$1\n      ], action => {\n        return !action(editor, html, pasteHtml$1);\n      });\n    };\n    const insertContent = (editor, html, pasteAsText) => {\n      if (pasteAsText || !isSmartPasteEnabled(editor)) {\n        pasteHtml$1(editor, html);\n      } else {\n        smartInsertContent(editor, html);\n      }\n    };\n\n    const uniqueId = createIdGenerator('mceclip');\n    const createPasteDataTransfer = html => {\n      const dataTransfer = createDataTransfer();\n      setHtmlData(dataTransfer, html);\n      setReadOnlyMode(dataTransfer);\n      return dataTransfer;\n    };\n    const doPaste = (editor, content, internal, pasteAsText) => {\n      const res = process(editor, content, internal);\n      if (!res.cancelled) {\n        const content = res.content;\n        const args = fireBeforeInputEvent(editor, 'insertFromPaste', { dataTransfer: createPasteDataTransfer(content) });\n        if (!args.isDefaultPrevented()) {\n          insertContent(editor, content, pasteAsText);\n          fireInputEvent(editor, 'insertFromPaste');\n        }\n      }\n    };\n    const pasteHtml = (editor, html, internalFlag) => {\n      const internal = internalFlag ? internalFlag : isMarked(html);\n      doPaste(editor, unmark(html), internal, false);\n    };\n    const pasteText = (editor, text) => {\n      const encodedText = editor.dom.encode(text).replace(/\\r\\n/g, '\\n');\n      const normalizedText = normalize$4(encodedText, getPasteTabSpaces(editor));\n      const html = toBlockElements(normalizedText, getForcedRootBlock(editor), getForcedRootBlockAttrs(editor));\n      doPaste(editor, html, false, true);\n    };\n    const getDataTransferItems = dataTransfer => {\n      const items = {};\n      if (dataTransfer && dataTransfer.types) {\n        for (let i = 0; i < dataTransfer.types.length; i++) {\n          const contentType = dataTransfer.types[i];\n          try {\n            items[contentType] = dataTransfer.getData(contentType);\n          } catch (ex) {\n            items[contentType] = '';\n          }\n        }\n      }\n      return items;\n    };\n    const hasContentType = (clipboardContent, mimeType) => mimeType in clipboardContent && clipboardContent[mimeType].length > 0;\n    const hasHtmlOrText = content => hasContentType(content, 'text/html') || hasContentType(content, 'text/plain');\n    const extractFilename = (editor, str) => {\n      const m = str.match(/([\\s\\S]+?)(?:\\.[a-z0-9.]+)$/i);\n      return isNonNullable(m) ? editor.dom.encode(m[1]) : undefined;\n    };\n    const createBlobInfo = (editor, blobCache, file, base64) => {\n      const id = uniqueId();\n      const useFileName = shouldReuseFileName(editor) && isNonNullable(file.name);\n      const name = useFileName ? extractFilename(editor, file.name) : id;\n      const filename = useFileName ? file.name : undefined;\n      const blobInfo = blobCache.create(id, file, base64, name, filename);\n      blobCache.add(blobInfo);\n      return blobInfo;\n    };\n    const pasteImage = (editor, imageItem) => {\n      parseDataUri(imageItem.uri).each(({data, type, base64Encoded}) => {\n        const base64 = base64Encoded ? data : btoa(data);\n        const file = imageItem.file;\n        const blobCache = editor.editorUpload.blobCache;\n        const existingBlobInfo = blobCache.getByData(base64, type);\n        const blobInfo = existingBlobInfo !== null && existingBlobInfo !== void 0 ? existingBlobInfo : createBlobInfo(editor, blobCache, file, base64);\n        pasteHtml(editor, `<img src=\"${ blobInfo.blobUri() }\">`, false);\n      });\n    };\n    const isClipboardEvent = event => event.type === 'paste';\n    const readFilesAsDataUris = items => Promise.all(map$3(items, file => {\n      return blobToDataUri(file).then(uri => ({\n        file,\n        uri\n      }));\n    }));\n    const isImage = editor => {\n      const allowedExtensions = getAllowedImageFileTypes(editor);\n      return file => startsWith(file.type, 'image/') && exists(allowedExtensions, extension => {\n        return getImageMimeType(extension) === file.type;\n      });\n    };\n    const getImagesFromDataTransfer = (editor, dataTransfer) => {\n      const items = dataTransfer.items ? bind$3(from(dataTransfer.items), item => {\n        return item.kind === 'file' ? [item.getAsFile()] : [];\n      }) : [];\n      const files = dataTransfer.files ? from(dataTransfer.files) : [];\n      return filter$5(items.length > 0 ? items : files, isImage(editor));\n    };\n    const pasteImageData = (editor, e, rng) => {\n      const dataTransfer = isClipboardEvent(e) ? e.clipboardData : e.dataTransfer;\n      if (shouldPasteDataImages(editor) && dataTransfer) {\n        const images = getImagesFromDataTransfer(editor, dataTransfer);\n        if (images.length > 0) {\n          e.preventDefault();\n          readFilesAsDataUris(images).then(fileResults => {\n            if (rng) {\n              editor.selection.setRng(rng);\n            }\n            each$e(fileResults, result => {\n              pasteImage(editor, result);\n            });\n          });\n          return true;\n        }\n      }\n      return false;\n    };\n    const isBrokenAndroidClipboardEvent = e => {\n      var _a, _b;\n      return Env.os.isAndroid() && ((_b = (_a = e.clipboardData) === null || _a === void 0 ? void 0 : _a.items) === null || _b === void 0 ? void 0 : _b.length) === 0;\n    };\n    const isKeyboardPasteEvent = e => VK.metaKeyPressed(e) && e.keyCode === 86 || e.shiftKey && e.keyCode === 45;\n    const insertClipboardContent = (editor, clipboardContent, html, plainTextMode) => {\n      let content = trimHtml(html);\n      const isInternal = hasContentType(clipboardContent, internalHtmlMime()) || isMarked(html);\n      const isPlainTextHtml = !isInternal && isPlainText(content);\n      const isAbsoluteUrl$1 = isAbsoluteUrl(content);\n      if (isDefaultPasteBinContent(content) || !content.length || isPlainTextHtml && !isAbsoluteUrl$1) {\n        plainTextMode = true;\n      }\n      if (plainTextMode || isAbsoluteUrl$1) {\n        if (hasContentType(clipboardContent, 'text/plain') && isPlainTextHtml) {\n          content = clipboardContent['text/plain'];\n        } else {\n          content = innerText(content);\n        }\n      }\n      if (isDefaultPasteBinContent(content)) {\n        return;\n      }\n      if (plainTextMode) {\n        pasteText(editor, content);\n      } else {\n        pasteHtml(editor, content, isInternal);\n      }\n    };\n    const registerEventHandlers = (editor, pasteBin, pasteFormat) => {\n      let keyboardPastePlainTextState;\n      const getLastRng = () => pasteBin.getLastRng() || editor.selection.getRng();\n      editor.on('keydown', e => {\n        if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {\n          keyboardPastePlainTextState = e.shiftKey && e.keyCode === 86;\n        }\n      });\n      editor.on('paste', e => {\n        if (e.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e)) {\n          return;\n        }\n        const plainTextMode = pasteFormat.get() === 'text' || keyboardPastePlainTextState;\n        keyboardPastePlainTextState = false;\n        const clipboardContent = getDataTransferItems(e.clipboardData);\n        if (!hasHtmlOrText(clipboardContent) && pasteImageData(editor, e, getLastRng())) {\n          return;\n        }\n        e.preventDefault();\n        if (hasContentType(clipboardContent, 'text/html')) {\n          insertClipboardContent(editor, clipboardContent, clipboardContent['text/html'], plainTextMode);\n        } else if (hasContentType(clipboardContent, 'text/plain') && hasContentType(clipboardContent, 'text/uri-list')) {\n          insertClipboardContent(editor, clipboardContent, clipboardContent['text/plain'], plainTextMode);\n        } else {\n          pasteBin.create();\n          Delay.setEditorTimeout(editor, () => {\n            const html = pasteBin.getHtml();\n            pasteBin.remove();\n            insertClipboardContent(editor, clipboardContent, html, plainTextMode);\n          }, 0);\n        }\n      });\n    };\n    const registerDataImageFilter = editor => {\n      const isWebKitFakeUrl = src => startsWith(src, 'webkit-fake-url');\n      const isDataUri = src => startsWith(src, 'data:');\n      const isPasteInsert = args => {\n        var _a;\n        return ((_a = args.data) === null || _a === void 0 ? void 0 : _a.paste) === true;\n      };\n      editor.parser.addNodeFilter('img', (nodes, name, args) => {\n        if (!shouldPasteDataImages(editor) && isPasteInsert(args)) {\n          for (const node of nodes) {\n            const src = node.attr('src');\n            if (isString(src) && !node.attr('data-mce-object') && src !== Env.transparentSrc) {\n              if (isWebKitFakeUrl(src)) {\n                node.remove();\n              } else if (!shouldAllowHtmlDataUrls(editor) && isDataUri(src)) {\n                node.remove();\n              }\n            }\n          }\n        }\n      });\n    };\n    const registerEventsAndFilters = (editor, pasteBin, pasteFormat) => {\n      registerEventHandlers(editor, pasteBin, pasteFormat);\n      registerDataImageFilter(editor);\n    };\n\n    const togglePlainTextPaste = (editor, pasteFormat) => {\n      if (pasteFormat.get() === 'text') {\n        pasteFormat.set('html');\n        firePastePlainTextToggle(editor, false);\n      } else {\n        pasteFormat.set('text');\n        firePastePlainTextToggle(editor, true);\n      }\n      editor.focus();\n    };\n    const register$1 = (editor, pasteFormat) => {\n      editor.addCommand('mceTogglePlainTextPaste', () => {\n        togglePlainTextPaste(editor, pasteFormat);\n      });\n      editor.addCommand('mceInsertClipboardContent', (ui, value) => {\n        if (value.html) {\n          pasteHtml(editor, value.html, value.internal);\n        }\n        if (value.text) {\n          pasteText(editor, value.text);\n        }\n      });\n    };\n\n    const setHtml5Clipboard = (clipboardData, html, text) => {\n      if (clipboardData) {\n        try {\n          clipboardData.clearData();\n          clipboardData.setData('text/html', html);\n          clipboardData.setData('text/plain', text);\n          clipboardData.setData(internalHtmlMime(), html);\n          return true;\n        } catch (e) {\n          return false;\n        }\n      } else {\n        return false;\n      }\n    };\n    const setClipboardData = (evt, data, fallback, done) => {\n      if (setHtml5Clipboard(evt.clipboardData, data.html, data.text)) {\n        evt.preventDefault();\n        done();\n      } else {\n        fallback(data.html, done);\n      }\n    };\n    const fallback = editor => (html, done) => {\n      const {dom, selection} = editor;\n      const outer = dom.create('div', {\n        'contenteditable': 'false',\n        'data-mce-bogus': 'all'\n      });\n      const inner = dom.create('div', { contenteditable: 'true' }, html);\n      dom.setStyles(outer, {\n        position: 'fixed',\n        top: '0',\n        left: '-3000px',\n        width: '1000px',\n        overflow: 'hidden'\n      });\n      outer.appendChild(inner);\n      dom.add(editor.getBody(), outer);\n      const range = selection.getRng();\n      inner.focus();\n      const offscreenRange = dom.createRng();\n      offscreenRange.selectNodeContents(inner);\n      selection.setRng(offscreenRange);\n      Delay.setEditorTimeout(editor, () => {\n        selection.setRng(range);\n        dom.remove(outer);\n        done();\n      }, 0);\n    };\n    const getData = editor => ({\n      html: mark(editor.selection.getContent({ contextual: true })),\n      text: editor.selection.getContent({ format: 'text' })\n    });\n    const isTableSelection = editor => !!editor.dom.getParent(editor.selection.getStart(), 'td[data-mce-selected],th[data-mce-selected]', editor.getBody());\n    const hasSelectedContent = editor => !editor.selection.isCollapsed() || isTableSelection(editor);\n    const cut = editor => evt => {\n      if (!evt.isDefaultPrevented() && hasSelectedContent(editor)) {\n        setClipboardData(evt, getData(editor), fallback(editor), () => {\n          if (Env.browser.isChromium() || Env.browser.isFirefox()) {\n            const rng = editor.selection.getRng();\n            Delay.setEditorTimeout(editor, () => {\n              editor.selection.setRng(rng);\n              editor.execCommand('Delete');\n            }, 0);\n          } else {\n            editor.execCommand('Delete');\n          }\n        });\n      }\n    };\n    const copy = editor => evt => {\n      if (!evt.isDefaultPrevented() && hasSelectedContent(editor)) {\n        setClipboardData(evt, getData(editor), fallback(editor), noop);\n      }\n    };\n    const register = editor => {\n      editor.on('cut', cut(editor));\n      editor.on('copy', copy(editor));\n    };\n\n    const getCaretRangeFromEvent = (editor, e) => {\n      var _a, _b;\n      return RangeUtils.getCaretRangeFromPoint((_a = e.clientX) !== null && _a !== void 0 ? _a : 0, (_b = e.clientY) !== null && _b !== void 0 ? _b : 0, editor.getDoc());\n    };\n    const isPlainTextFileUrl = content => {\n      const plainTextContent = content['text/plain'];\n      return plainTextContent ? plainTextContent.indexOf('file://') === 0 : false;\n    };\n    const setFocusedRange = (editor, rng) => {\n      editor.focus();\n      if (rng) {\n        editor.selection.setRng(rng);\n      }\n    };\n    const hasImage = dataTransfer => exists(dataTransfer.files, file => /^image\\//.test(file.type));\n    const isTransparentBlockDrop = (dom, schema, target, dropContent) => {\n      const parentTransparent = dom.getParent(target, node => isTransparentBlock(schema, node));\n      if (parentTransparent && has$2(dropContent, 'text/html')) {\n        const fragment = new DOMParser().parseFromString(dropContent['text/html'], 'text/html').body;\n        return !isNull(fragment.querySelector(parentTransparent.nodeName.toLowerCase()));\n      } else {\n        return false;\n      }\n    };\n    const setup$a = (editor, draggingInternallyState) => {\n      if (shouldPasteBlockDrop(editor)) {\n        editor.on('dragend dragover draggesture dragdrop drop drag', e => {\n          e.preventDefault();\n          e.stopPropagation();\n        });\n      }\n      if (!shouldPasteDataImages(editor)) {\n        editor.on('drop', e => {\n          const dataTransfer = e.dataTransfer;\n          if (dataTransfer && hasImage(dataTransfer)) {\n            e.preventDefault();\n          }\n        });\n      }\n      editor.on('drop', e => {\n        if (e.isDefaultPrevented()) {\n          return;\n        }\n        const rng = getCaretRangeFromEvent(editor, e);\n        if (isNullable(rng)) {\n          return;\n        }\n        const dropContent = getDataTransferItems(e.dataTransfer);\n        const internal = hasContentType(dropContent, internalHtmlMime());\n        if ((!hasHtmlOrText(dropContent) || isPlainTextFileUrl(dropContent)) && pasteImageData(editor, e, rng)) {\n          return;\n        }\n        const internalContent = dropContent[internalHtmlMime()];\n        const content = internalContent || dropContent['text/html'] || dropContent['text/plain'];\n        const transparentElementDrop = isTransparentBlockDrop(editor.dom, editor.schema, rng.startContainer, dropContent);\n        if (draggingInternallyState.get() && !transparentElementDrop) {\n          return;\n        }\n        if (content) {\n          e.preventDefault();\n          Delay.setEditorTimeout(editor, () => {\n            editor.undoManager.transact(() => {\n              if (internalContent) {\n                editor.execCommand('Delete');\n              }\n              setFocusedRange(editor, rng);\n              const trimmedContent = trimHtml(content);\n              if (dropContent['text/html']) {\n                pasteHtml(editor, trimmedContent, internal);\n              } else {\n                pasteText(editor, trimmedContent);\n              }\n            });\n          });\n        }\n      });\n      editor.on('dragstart', _e => {\n        draggingInternallyState.set(true);\n      });\n      editor.on('dragover dragend', e => {\n        if (shouldPasteDataImages(editor) && !draggingInternallyState.get()) {\n          e.preventDefault();\n          setFocusedRange(editor, getCaretRangeFromEvent(editor, e));\n        }\n        if (e.type === 'dragend') {\n          draggingInternallyState.set(false);\n        }\n      });\n    };\n\n    const setup$9 = editor => {\n      const processEvent = f => e => {\n        f(editor, e);\n      };\n      const preProcess = getPastePreProcess(editor);\n      if (isFunction(preProcess)) {\n        editor.on('PastePreProcess', processEvent(preProcess));\n      }\n      const postProcess = getPastePostProcess(editor);\n      if (isFunction(postProcess)) {\n        editor.on('PastePostProcess', processEvent(postProcess));\n      }\n    };\n\n    const addPreProcessFilter = (editor, filterFunc) => {\n      editor.on('PastePreProcess', e => {\n        e.content = filterFunc(editor, e.content, e.internal);\n      });\n    };\n    const rgbRegExp = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/gi;\n    const rgbToHex = value => Tools.trim(value).replace(rgbRegExp, rgbaToHexString).toLowerCase();\n    const removeWebKitStyles = (editor, content, internal) => {\n      const webKitStylesOption = getPasteWebkitStyles(editor);\n      if (internal || webKitStylesOption === 'all' || !shouldPasteRemoveWebKitStyles(editor)) {\n        return content;\n      }\n      const webKitStyles = webKitStylesOption ? webKitStylesOption.split(/[, ]/) : [];\n      if (webKitStyles && webKitStylesOption !== 'none') {\n        const dom = editor.dom, node = editor.selection.getNode();\n        content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, (all, before, value, after) => {\n          const inputStyles = dom.parseStyle(dom.decode(value));\n          const outputStyles = {};\n          for (let i = 0; i < webKitStyles.length; i++) {\n            const inputValue = inputStyles[webKitStyles[i]];\n            let compareInput = inputValue;\n            let currentValue = dom.getStyle(node, webKitStyles[i], true);\n            if (/color/.test(webKitStyles[i])) {\n              compareInput = rgbToHex(compareInput);\n              currentValue = rgbToHex(currentValue);\n            }\n            if (currentValue !== compareInput) {\n              outputStyles[webKitStyles[i]] = inputValue;\n            }\n          }\n          const outputStyle = dom.serializeStyle(outputStyles, 'span');\n          if (outputStyle) {\n            return before + ' style=\"' + outputStyle + '\"' + after;\n          }\n          return before + after;\n        });\n      } else {\n        content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, '$1$3');\n      }\n      content = content.replace(/(<[^>]+) data-mce-style=\"([^\"]+)\"([^>]*>)/gi, (all, before, value, after) => {\n        return before + ' style=\"' + value + '\"' + after;\n      });\n      return content;\n    };\n    const setup$8 = editor => {\n      if (Env.browser.isChromium() || Env.browser.isSafari()) {\n        addPreProcessFilter(editor, removeWebKitStyles);\n      }\n    };\n\n    const setup$7 = editor => {\n      const draggingInternallyState = Cell(false);\n      const pasteFormat = Cell(isPasteAsTextEnabled(editor) ? 'text' : 'html');\n      const pasteBin = PasteBin(editor);\n      setup$8(editor);\n      register$1(editor, pasteFormat);\n      setup$9(editor);\n      editor.on('PreInit', () => {\n        register(editor);\n        setup$a(editor, draggingInternallyState);\n        registerEventsAndFilters(editor, pasteBin, pasteFormat);\n      });\n    };\n\n    const preventSummaryToggle = editor => {\n      editor.on('click', e => {\n        if (editor.dom.getParent(e.target, 'details')) {\n          e.preventDefault();\n        }\n      });\n    };\n    const filterDetails = editor => {\n      editor.parser.addNodeFilter('details', elms => {\n        const initialStateOption = getDetailsInitialState(editor);\n        each$e(elms, details => {\n          if (initialStateOption === 'expanded') {\n            details.attr('open', 'open');\n          } else if (initialStateOption === 'collapsed') {\n            details.attr('open', null);\n          }\n        });\n      });\n      editor.serializer.addNodeFilter('details', elms => {\n        const serializedStateOption = getDetailsSerializedState(editor);\n        each$e(elms, details => {\n          if (serializedStateOption === 'expanded') {\n            details.attr('open', 'open');\n          } else if (serializedStateOption === 'collapsed') {\n            details.attr('open', null);\n          }\n        });\n      });\n    };\n    const emptyNodeContents = node => fillWithPaddingBr(SugarElement.fromDom(node));\n    const setCaretToPosition = (editor, position) => {\n      const node = position.getNode();\n      if (!isUndefined(node)) {\n        editor.selection.setCursorLocation(node, position.offset());\n      }\n    };\n    const isEntireNodeSelected = (rng, node) => {\n      var _a;\n      return rng.startOffset === 0 && rng.endOffset === ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.length);\n    };\n    const platform = detect$2();\n    const browser = platform.browser;\n    const os = platform.os;\n    const isSafari = browser.isSafari();\n    const isMacOSOriOS = os.isMacOS() || os.isiOS();\n    const isCaretInTheBeginningOf = (caretPos, element) => firstPositionIn(element).exists(pos => pos.isEqual(caretPos));\n    const isCaretInTheEndOf = (caretPos, element) => {\n      return lastPositionIn(element).exists(pos => {\n        if (isBr$6(pos.getNode())) {\n          return prevPosition(element, pos).exists(pos2 => pos2.isEqual(caretPos)) || pos.isEqual(caretPos);\n        } else {\n          return pos.isEqual(caretPos);\n        }\n      });\n    };\n    const getDetailsElements = (dom, rng) => {\n      const startDetails = Optional.from(dom.getParent(rng.startContainer, 'details'));\n      const endDetails = Optional.from(dom.getParent(rng.endContainer, 'details'));\n      if (startDetails.isSome() || endDetails.isSome()) {\n        const startSummary = startDetails.bind(details => Optional.from(dom.select('summary', details)[0]));\n        return Optional.some({\n          startSummary,\n          startDetails,\n          endDetails\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const isPartialDelete = (rng, detailsElements) => {\n      const containsStart = element => element.contains(rng.startContainer);\n      const containsEnd = element => element.contains(rng.endContainer);\n      const startInSummary = detailsElements.startSummary.exists(containsStart);\n      const endInSummary = detailsElements.startSummary.exists(containsEnd);\n      const isPartiallySelectedDetailsElements = detailsElements.startDetails.forall(startDetails => detailsElements.endDetails.forall(endDetails => startDetails !== endDetails));\n      const isInPartiallySelectedSummary = (startInSummary || endInSummary) && !(startInSummary && endInSummary);\n      return isInPartiallySelectedSummary || isPartiallySelectedDetailsElements;\n    };\n    const isCaretAtStartOfSummary = (caretPos, detailsElements) => detailsElements.startSummary.exists(summary => isCaretInTheBeginningOf(caretPos, summary));\n    const isCaretAtEndOfSummary = (caretPos, detailsElements) => detailsElements.startSummary.exists(summary => isCaretInTheEndOf(caretPos, summary));\n    const isCaretInFirstPositionInBody = (caretPos, detailsElements) => detailsElements.startDetails.exists(details => prevPosition(details, caretPos).forall(pos => detailsElements.startSummary.exists(summary => !summary.contains(caretPos.container()) && summary.contains(pos.container()))));\n    const isCaretInLastPositionInBody = (root, caretPos, detailsElements) => detailsElements.startDetails.exists(details => nextPosition(root, caretPos).forall(pos => !details.contains(pos.container())));\n    const isInDetailsElement = (dom, pos) => isNonNullable(dom.getParent(pos.container(), 'details'));\n    const moveCaretToDetailsPos = (editor, pos) => {\n      const details = editor.dom.getParent(pos.container(), 'details');\n      if (details && !details.open) {\n        const summary = editor.dom.select('summary', details)[0];\n        if (summary) {\n          lastPositionIn(summary).each(pos => setCaretToPosition(editor, pos));\n        }\n      } else {\n        setCaretToPosition(editor, pos);\n      }\n    };\n    const preventDeleteIntoDetails = (editor, forward) => {\n      const {dom, selection} = editor;\n      const root = editor.getBody();\n      if (editor.selection.isCollapsed()) {\n        const caretPos = CaretPosition.fromRangeStart(selection.getRng());\n        const parentBlock = dom.getParent(caretPos.container(), dom.isBlock);\n        if (parentBlock && dom.isEmpty(parentBlock)) {\n          if (isNull(parentBlock.nextSibling)) {\n            const pos = prevPosition(root, caretPos).filter(pos => isInDetailsElement(dom, pos));\n            if (pos.isSome()) {\n              pos.each(pos => {\n                if (!forward) {\n                  moveCaretToDetailsPos(editor, pos);\n                }\n              });\n              return true;\n            }\n          } else if (isNull(parentBlock.previousSibling)) {\n            const pos = nextPosition(root, caretPos).filter(pos => isInDetailsElement(dom, pos));\n            if (pos) {\n              return true;\n            }\n          }\n        }\n        return navigate(forward, root, caretPos).fold(never, pos => {\n          if (isInDetailsElement(dom, pos)) {\n            if (parentBlock && dom.isEmpty(parentBlock)) {\n              editor.dom.remove(parentBlock);\n            }\n            if (!forward) {\n              moveCaretToDetailsPos(editor, pos);\n            }\n            return true;\n          } else {\n            return false;\n          }\n        });\n      } else {\n        return false;\n      }\n    };\n    const preventDeleteSummaryAction = (editor, detailElements, e) => {\n      const selection = editor.selection;\n      const node = selection.getNode();\n      const rng = selection.getRng();\n      const isBackspace = e.keyCode === VK.BACKSPACE;\n      const isDelete = e.keyCode === VK.DELETE;\n      const isCollapsed = editor.selection.isCollapsed();\n      const caretPos = CaretPosition.fromRangeStart(rng);\n      const root = editor.getBody();\n      if (!isCollapsed && isPartialDelete(rng, detailElements)) {\n        return true;\n      } else if (isCollapsed && isBackspace && isCaretAtStartOfSummary(caretPos, detailElements)) {\n        return true;\n      } else if (isCollapsed && isDelete && isCaretAtEndOfSummary(caretPos, detailElements)) {\n        return true;\n      } else if (isCollapsed && isBackspace && isCaretInFirstPositionInBody(caretPos, detailElements)) {\n        return true;\n      } else if (isCollapsed && isDelete && isCaretInLastPositionInBody(root, caretPos, detailElements)) {\n        return true;\n      } else if (isSafari && isSummary(node)) {\n        if (!isCollapsed && isEntireNodeSelected(rng, node) || willDeleteLastPositionInElement(isDelete, caretPos, node)) {\n          emptyNodeContents(node);\n        } else {\n          editor.undoManager.transact(() => {\n            const sel = selection.getSel();\n            let {anchorNode, anchorOffset, focusNode, focusOffset} = sel !== null && sel !== void 0 ? sel : {};\n            const applySelection = () => {\n              if (isNonNullable(anchorNode) && isNonNullable(anchorOffset) && isNonNullable(focusNode) && isNonNullable(focusOffset)) {\n                sel === null || sel === void 0 ? void 0 : sel.setBaseAndExtent(anchorNode, anchorOffset, focusNode, focusOffset);\n              }\n            };\n            const updateSelection = () => {\n              anchorNode = sel === null || sel === void 0 ? void 0 : sel.anchorNode;\n              anchorOffset = sel === null || sel === void 0 ? void 0 : sel.anchorOffset;\n              focusNode = sel === null || sel === void 0 ? void 0 : sel.focusNode;\n              focusOffset = sel === null || sel === void 0 ? void 0 : sel.focusOffset;\n            };\n            const appendAllChildNodes = (from, to) => {\n              each$e(from.childNodes, child => {\n                if (isNode(child)) {\n                  to.appendChild(child);\n                }\n              });\n            };\n            const container = editor.dom.create('span', { 'data-mce-bogus': 'all' });\n            appendAllChildNodes(node, container);\n            node.appendChild(container);\n            applySelection();\n            if (isCollapsed && (isMacOSOriOS && (e.altKey || isBackspace && e.metaKey) || !isMacOSOriOS && e.ctrlKey)) {\n              sel === null || sel === void 0 ? void 0 : sel.modify('extend', isBackspace ? 'left' : 'right', e.metaKey ? 'line' : 'word');\n            }\n            if (!selection.isCollapsed() && isEntireNodeSelected(selection.getRng(), container)) {\n              emptyNodeContents(node);\n            } else {\n              editor.execCommand(isBackspace ? 'Delete' : 'ForwardDelete');\n              updateSelection();\n              appendAllChildNodes(container, node);\n              applySelection();\n            }\n            editor.dom.remove(container);\n          });\n        }\n        return true;\n      }\n      return false;\n    };\n    const preventDeletingSummary = editor => {\n      editor.on('keydown', e => {\n        if (e.keyCode === VK.BACKSPACE || e.keyCode === VK.DELETE) {\n          getDetailsElements(editor.dom, editor.selection.getRng()).fold(() => {\n            if (preventDeleteIntoDetails(editor, e.keyCode === VK.DELETE)) {\n              e.preventDefault();\n            }\n          }, detailsElements => {\n            if (preventDeleteSummaryAction(editor, detailsElements, e)) {\n              e.preventDefault();\n            }\n          });\n        }\n      });\n    };\n    const setup$6 = editor => {\n      preventSummaryToggle(editor);\n      filterDetails(editor);\n      preventDeletingSummary(editor);\n    };\n\n    const isBr = isBr$6;\n    const isText = isText$a;\n    const isContentEditableFalse$2 = elm => isContentEditableFalse$b(elm.dom);\n    const isContentEditableTrue = elm => isContentEditableTrue$3(elm.dom);\n    const isRoot = rootNode => elm => eq(SugarElement.fromDom(rootNode), elm);\n    const getClosestScope = (node, rootNode) => closest$4(SugarElement.fromDom(node), elm => isContentEditableTrue(elm) || isBlock$2(elm), isRoot(rootNode)).getOr(SugarElement.fromDom(rootNode)).dom;\n    const getClosestCef = (node, rootNode) => closest$4(SugarElement.fromDom(node), isContentEditableFalse$2, isRoot(rootNode));\n    const findEdgeCaretCandidate = (startNode, scope, forward) => {\n      const walker = new DomTreeWalker(startNode, scope);\n      const next = forward ? walker.next.bind(walker) : walker.prev.bind(walker);\n      let result = startNode;\n      for (let current = forward ? startNode : next(); current && !isBr(current); current = next()) {\n        if (isCaretCandidate$3(current)) {\n          result = current;\n        }\n      }\n      return result;\n    };\n    const findClosestBlockRange = (startRng, rootNode) => {\n      const startPos = CaretPosition.fromRangeStart(startRng);\n      const clickNode = startPos.getNode();\n      const scope = getClosestScope(clickNode, rootNode);\n      const startNode = findEdgeCaretCandidate(clickNode, scope, false);\n      const endNode = findEdgeCaretCandidate(clickNode, scope, true);\n      const rng = document.createRange();\n      getClosestCef(startNode, scope).fold(() => {\n        if (isText(startNode)) {\n          rng.setStart(startNode, 0);\n        } else {\n          rng.setStartBefore(startNode);\n        }\n      }, cef => rng.setStartBefore(cef.dom));\n      getClosestCef(endNode, scope).fold(() => {\n        if (isText(endNode)) {\n          rng.setEnd(endNode, endNode.data.length);\n        } else {\n          rng.setEndAfter(endNode);\n        }\n      }, cef => rng.setEndAfter(cef.dom));\n      return rng;\n    };\n    const onTripleClickSelect = editor => {\n      const rng = findClosestBlockRange(editor.selection.getRng(), editor.getBody());\n      editor.selection.setRng(normalize(rng));\n    };\n    const setup$5 = editor => {\n      editor.on('mousedown', e => {\n        if (e.detail >= 3) {\n          e.preventDefault();\n          onTripleClickSelect(editor);\n        }\n      });\n    };\n\n    var FakeCaretPosition;\n    (function (FakeCaretPosition) {\n      FakeCaretPosition['Before'] = 'before';\n      FakeCaretPosition['After'] = 'after';\n    }(FakeCaretPosition || (FakeCaretPosition = {})));\n    const distanceToRectLeft = (clientRect, clientX) => Math.abs(clientRect.left - clientX);\n    const distanceToRectRight = (clientRect, clientX) => Math.abs(clientRect.right - clientX);\n    const isInsideY = (clientY, clientRect) => clientY >= clientRect.top && clientY <= clientRect.bottom;\n    const collidesY = (r1, r2) => r1.top < r2.bottom && r1.bottom > r2.top;\n    const isOverlapping = (r1, r2) => {\n      const overlap = overlapY(r1, r2) / Math.min(r1.height, r2.height);\n      return collidesY(r1, r2) && overlap > 0.5;\n    };\n    const splitRectsPerAxis = (rects, y) => {\n      const intersectingRects = filter$5(rects, rect => isInsideY(y, rect));\n      return boundingClientRectFromRects(intersectingRects).fold(() => [\n        [],\n        rects\n      ], boundingRect => {\n        const {\n          pass: horizontal,\n          fail: vertical\n        } = partition$2(rects, rect => isOverlapping(rect, boundingRect));\n        return [\n          horizontal,\n          vertical\n        ];\n      });\n    };\n    const clientInfo = (rect, clientX) => {\n      return {\n        node: rect.node,\n        position: distanceToRectLeft(rect, clientX) < distanceToRectRight(rect, clientX) ? FakeCaretPosition.Before : FakeCaretPosition.After\n      };\n    };\n    const horizontalDistance = (rect, x, _y) => x > rect.left && x < rect.right ? 0 : Math.min(Math.abs(rect.left - x), Math.abs(rect.right - x));\n    const closestChildCaretCandidateNodeRect = (children, clientX, clientY) => {\n      const caretCandidateRect = rect => {\n        if (isCaretCandidate$3(rect.node)) {\n          return Optional.some(rect);\n        } else if (isElement$6(rect.node)) {\n          return closestChildCaretCandidateNodeRect(from(rect.node.childNodes), clientX, clientY);\n        } else {\n          return Optional.none();\n        }\n      };\n      const getClosestTextNode = (rects, distance) => {\n        if (rects.length >= 2) {\n          const r1 = caretCandidateRect(rects[0]).getOr(rects[0]);\n          const r2 = caretCandidateRect(rects[1]).getOr(rects[1]);\n          const deltaDistance = Math.abs(distance(r1, clientX, clientY) - distance(r2, clientX, clientY));\n          if (deltaDistance < 2) {\n            if (isText$a(r1.node)) {\n              return Optional.some(r1);\n            } else if (isText$a(r2.node)) {\n              return Optional.some(r2);\n            }\n          }\n        }\n        return Optional.none();\n      };\n      const findClosestCaretCandidateNodeRect = (rects, distance) => {\n        const sortedRects = sort(rects, (r1, r2) => distance(r1, clientX, clientY) - distance(r2, clientX, clientY));\n        return getClosestTextNode(sortedRects, distance).orThunk(() => findMap(sortedRects, caretCandidateRect));\n      };\n      const [horizontalRects, verticalRects] = splitRectsPerAxis(getClientRects(children), clientY);\n      const {\n        pass: above,\n        fail: below\n      } = partition$2(verticalRects, rect => rect.top < clientY);\n      return findClosestCaretCandidateNodeRect(horizontalRects, horizontalDistance).orThunk(() => findClosestCaretCandidateNodeRect(below, distanceToRectEdgeFromXY)).orThunk(() => findClosestCaretCandidateNodeRect(above, distanceToRectEdgeFromXY));\n    };\n    const traverseUp = (rootElm, scope, clientX, clientY) => {\n      const helper = (scope, prevScope) => {\n        const isDragGhostContainer = node => isElement$6(node) && node.classList.contains('mce-drag-container');\n        const childNodesWithoutGhost = filter$5(scope.dom.childNodes, not(isDragGhostContainer));\n        return prevScope.fold(() => closestChildCaretCandidateNodeRect(childNodesWithoutGhost, clientX, clientY), prevScope => {\n          const uncheckedChildren = filter$5(childNodesWithoutGhost, node => node !== prevScope.dom);\n          return closestChildCaretCandidateNodeRect(uncheckedChildren, clientX, clientY);\n        }).orThunk(() => {\n          const parent = eq(scope, rootElm) ? Optional.none() : parentElement(scope);\n          return parent.bind(newScope => helper(newScope, Optional.some(scope)));\n        });\n      };\n      return helper(scope, Optional.none());\n    };\n    const closestCaretCandidateNodeRect = (root, clientX, clientY) => {\n      const rootElm = SugarElement.fromDom(root);\n      const ownerDoc = documentOrOwner(rootElm);\n      const elementAtPoint = SugarElement.fromPoint(ownerDoc, clientX, clientY).filter(elm => contains(rootElm, elm));\n      const element = elementAtPoint.getOr(rootElm);\n      return traverseUp(rootElm, element, clientX, clientY);\n    };\n    const closestFakeCaretCandidate = (root, clientX, clientY) => closestCaretCandidateNodeRect(root, clientX, clientY).filter(rect => isFakeCaretTarget(rect.node)).map(rect => clientInfo(rect, clientX));\n\n    const getAbsolutePosition = elm => {\n      var _a, _b;\n      const clientRect = elm.getBoundingClientRect();\n      const doc = elm.ownerDocument;\n      const docElem = doc.documentElement;\n      const win = doc.defaultView;\n      return {\n        top: clientRect.top + ((_a = win === null || win === void 0 ? void 0 : win.scrollY) !== null && _a !== void 0 ? _a : 0) - docElem.clientTop,\n        left: clientRect.left + ((_b = win === null || win === void 0 ? void 0 : win.scrollX) !== null && _b !== void 0 ? _b : 0) - docElem.clientLeft\n      };\n    };\n    const getBodyPosition = editor => editor.inline ? getAbsolutePosition(editor.getBody()) : {\n      left: 0,\n      top: 0\n    };\n    const getScrollPosition = editor => {\n      const body = editor.getBody();\n      return editor.inline ? {\n        left: body.scrollLeft,\n        top: body.scrollTop\n      } : {\n        left: 0,\n        top: 0\n      };\n    };\n    const getBodyScroll = editor => {\n      const body = editor.getBody(), docElm = editor.getDoc().documentElement;\n      const inlineScroll = {\n        left: body.scrollLeft,\n        top: body.scrollTop\n      };\n      const iframeScroll = {\n        left: body.scrollLeft || docElm.scrollLeft,\n        top: body.scrollTop || docElm.scrollTop\n      };\n      return editor.inline ? inlineScroll : iframeScroll;\n    };\n    const getMousePosition = (editor, event) => {\n      if (event.target.ownerDocument !== editor.getDoc()) {\n        const iframePosition = getAbsolutePosition(editor.getContentAreaContainer());\n        const scrollPosition = getBodyScroll(editor);\n        return {\n          left: event.pageX - iframePosition.left + scrollPosition.left,\n          top: event.pageY - iframePosition.top + scrollPosition.top\n        };\n      }\n      return {\n        left: event.pageX,\n        top: event.pageY\n      };\n    };\n    const calculatePosition = (bodyPosition, scrollPosition, mousePosition) => ({\n      pageX: mousePosition.left - bodyPosition.left + scrollPosition.left,\n      pageY: mousePosition.top - bodyPosition.top + scrollPosition.top\n    });\n    const calc = (editor, event) => calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event));\n\n    const getTargetProps = target => ({\n      target,\n      srcElement: target\n    });\n    const makeDndEventFromMouseEvent = (type, mouseEvent, target, dataTransfer) => ({\n      ...mouseEvent,\n      dataTransfer,\n      type,\n      ...getTargetProps(target)\n    });\n    const makeDndEvent = (type, target, dataTransfer) => {\n      const fail = die('Function not supported on simulated event.');\n      const event = {\n        bubbles: true,\n        cancelBubble: false,\n        cancelable: true,\n        composed: false,\n        currentTarget: null,\n        defaultPrevented: false,\n        eventPhase: 0,\n        isTrusted: true,\n        returnValue: false,\n        timeStamp: 0,\n        type,\n        composedPath: fail,\n        initEvent: fail,\n        preventDefault: noop,\n        stopImmediatePropagation: noop,\n        stopPropagation: noop,\n        AT_TARGET: window.Event.AT_TARGET,\n        BUBBLING_PHASE: window.Event.BUBBLING_PHASE,\n        CAPTURING_PHASE: window.Event.CAPTURING_PHASE,\n        NONE: window.Event.NONE,\n        altKey: false,\n        button: 0,\n        buttons: 0,\n        clientX: 0,\n        clientY: 0,\n        ctrlKey: false,\n        metaKey: false,\n        movementX: 0,\n        movementY: 0,\n        offsetX: 0,\n        offsetY: 0,\n        pageX: 0,\n        pageY: 0,\n        relatedTarget: null,\n        screenX: 0,\n        screenY: 0,\n        shiftKey: false,\n        x: 0,\n        y: 0,\n        detail: 0,\n        view: null,\n        which: 0,\n        initUIEvent: fail,\n        initMouseEvent: fail,\n        getModifierState: fail,\n        dataTransfer,\n        ...getTargetProps(target)\n      };\n      return event;\n    };\n    const makeDataTransferCopyForDragEvent = (dataTransfer, eventType) => {\n      const copy = cloneDataTransfer(dataTransfer);\n      if (eventType === 'dragstart') {\n        setDragstartEvent(copy);\n        setReadWriteMode(copy);\n      } else if (eventType === 'drop') {\n        setDropEvent(copy);\n        setReadOnlyMode(copy);\n      } else {\n        setDragendEvent(copy);\n        setProtectedMode(copy);\n      }\n      return copy;\n    };\n    const makeDragEvent = (type, target, dataTransfer, mouseEvent) => {\n      const dataTransferForDispatch = makeDataTransferCopyForDragEvent(dataTransfer, type);\n      return isUndefined(mouseEvent) ? makeDndEvent(type, target, dataTransferForDispatch) : makeDndEventFromMouseEvent(type, mouseEvent, target, dataTransferForDispatch);\n    };\n\n    const scrollPixelsPerInterval = 32;\n    const scrollIntervalValue = 100;\n    const mouseRangeToTriggerScrollInsideEditor = 8;\n    const mouseRangeToTriggerScrollOutsideEditor = 16;\n    const isContentEditableFalse$1 = isContentEditableFalse$b;\n    const isContentEditable = or(isContentEditableFalse$1, isContentEditableTrue$3);\n    const isDraggable = (dom, rootElm, elm) => isContentEditableFalse$1(elm) && elm !== rootElm && dom.isEditable(elm.parentElement);\n    const isValidDropTarget = (editor, targetElement, dragElement) => {\n      if (isNullable(targetElement)) {\n        return false;\n      } else if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {\n        return false;\n      } else {\n        return editor.dom.isEditable(targetElement);\n      }\n    };\n    const createGhost = (editor, elm, width, height) => {\n      const dom = editor.dom;\n      const clonedElm = elm.cloneNode(true);\n      dom.setStyles(clonedElm, {\n        width,\n        height\n      });\n      dom.setAttrib(clonedElm, 'data-mce-selected', null);\n      const ghostElm = dom.create('div', {\n        'class': 'mce-drag-container',\n        'data-mce-bogus': 'all',\n        'unselectable': 'on',\n        'contenteditable': 'false'\n      });\n      dom.setStyles(ghostElm, {\n        position: 'absolute',\n        opacity: 0.5,\n        overflow: 'hidden',\n        border: 0,\n        padding: 0,\n        margin: 0,\n        width,\n        height\n      });\n      dom.setStyles(clonedElm, {\n        margin: 0,\n        boxSizing: 'border-box'\n      });\n      ghostElm.appendChild(clonedElm);\n      return ghostElm;\n    };\n    const appendGhostToBody = (ghostElm, bodyElm) => {\n      if (ghostElm.parentNode !== bodyElm) {\n        bodyElm.appendChild(ghostElm);\n      }\n    };\n    const scrollEditor = (direction, amount) => win => () => {\n      const current = direction === 'left' ? win.scrollX : win.scrollY;\n      win.scroll({\n        [direction]: current + amount,\n        behavior: 'smooth'\n      });\n    };\n    const scrollLeft = scrollEditor('left', -scrollPixelsPerInterval);\n    const scrollRight = scrollEditor('left', scrollPixelsPerInterval);\n    const scrollUp = scrollEditor('top', -scrollPixelsPerInterval);\n    const scrollDown = scrollEditor('top', scrollPixelsPerInterval);\n    const moveGhost = (ghostElm, position, width, height, maxX, maxY, mouseY, mouseX, contentAreaContainer, win, state, mouseEventOriginatedFromWithinTheEditor) => {\n      let overflowX = 0, overflowY = 0;\n      ghostElm.style.left = position.pageX + 'px';\n      ghostElm.style.top = position.pageY + 'px';\n      if (position.pageX + width > maxX) {\n        overflowX = position.pageX + width - maxX;\n      }\n      if (position.pageY + height > maxY) {\n        overflowY = position.pageY + height - maxY;\n      }\n      ghostElm.style.width = width - overflowX + 'px';\n      ghostElm.style.height = height - overflowY + 'px';\n      const clientHeight = contentAreaContainer.clientHeight;\n      const clientWidth = contentAreaContainer.clientWidth;\n      const outerMouseY = mouseY + contentAreaContainer.getBoundingClientRect().top;\n      const outerMouseX = mouseX + contentAreaContainer.getBoundingClientRect().left;\n      state.on(state => {\n        state.intervalId.clear();\n        if (state.dragging && mouseEventOriginatedFromWithinTheEditor) {\n          if (mouseY + mouseRangeToTriggerScrollInsideEditor >= clientHeight) {\n            state.intervalId.set(scrollDown(win));\n          } else if (mouseY - mouseRangeToTriggerScrollInsideEditor <= 0) {\n            state.intervalId.set(scrollUp(win));\n          } else if (mouseX + mouseRangeToTriggerScrollInsideEditor >= clientWidth) {\n            state.intervalId.set(scrollRight(win));\n          } else if (mouseX - mouseRangeToTriggerScrollInsideEditor <= 0) {\n            state.intervalId.set(scrollLeft(win));\n          } else if (outerMouseY + mouseRangeToTriggerScrollOutsideEditor >= window.innerHeight) {\n            state.intervalId.set(scrollDown(window));\n          } else if (outerMouseY - mouseRangeToTriggerScrollOutsideEditor <= 0) {\n            state.intervalId.set(scrollUp(window));\n          } else if (outerMouseX + mouseRangeToTriggerScrollOutsideEditor >= window.innerWidth) {\n            state.intervalId.set(scrollRight(window));\n          } else if (outerMouseX - mouseRangeToTriggerScrollOutsideEditor <= 0) {\n            state.intervalId.set(scrollLeft(window));\n          }\n        }\n      });\n    };\n    const removeElement = elm => {\n      if (elm && elm.parentNode) {\n        elm.parentNode.removeChild(elm);\n      }\n    };\n    const removeElementWithPadding = (dom, elm) => {\n      const parentBlock = dom.getParent(elm.parentNode, dom.isBlock);\n      removeElement(elm);\n      if (parentBlock && parentBlock !== dom.getRoot() && dom.isEmpty(parentBlock)) {\n        fillWithPaddingBr(SugarElement.fromDom(parentBlock));\n      }\n    };\n    const isLeftMouseButtonPressed = e => e.button === 0;\n    const applyRelPos = (state, position) => ({\n      pageX: position.pageX - state.relX,\n      pageY: position.pageY + 5\n    });\n    const start = (state, editor) => e => {\n      if (isLeftMouseButtonPressed(e)) {\n        const ceElm = find$2(editor.dom.getParents(e.target), isContentEditable).getOr(null);\n        if (isNonNullable(ceElm) && isDraggable(editor.dom, editor.getBody(), ceElm)) {\n          const elmPos = editor.dom.getPos(ceElm);\n          const bodyElm = editor.getBody();\n          const docElm = editor.getDoc().documentElement;\n          state.set({\n            element: ceElm,\n            dataTransfer: createDataTransfer(),\n            dragging: false,\n            screenX: e.screenX,\n            screenY: e.screenY,\n            maxX: (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2,\n            maxY: (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2,\n            relX: e.pageX - elmPos.x,\n            relY: e.pageY - elmPos.y,\n            width: ceElm.offsetWidth,\n            height: ceElm.offsetHeight,\n            ghost: createGhost(editor, ceElm, ceElm.offsetWidth, ceElm.offsetHeight),\n            intervalId: repeatable(scrollIntervalValue)\n          });\n        }\n      }\n    };\n    const placeCaretAt = (editor, clientX, clientY) => {\n      editor._selectionOverrides.hideFakeCaret();\n      closestFakeCaretCandidate(editor.getBody(), clientX, clientY).fold(() => editor.selection.placeCaretAt(clientX, clientY), caretInfo => {\n        const range = editor._selectionOverrides.showCaret(1, caretInfo.node, caretInfo.position === FakeCaretPosition.Before, false);\n        if (range) {\n          editor.selection.setRng(range);\n        } else {\n          editor.selection.placeCaretAt(clientX, clientY);\n        }\n      });\n    };\n    const dispatchDragEvent = (editor, type, target, dataTransfer, mouseEvent) => {\n      if (type === 'dragstart') {\n        setHtmlData(dataTransfer, editor.dom.getOuterHTML(target));\n      }\n      const event = makeDragEvent(type, target, dataTransfer, mouseEvent);\n      const args = editor.dispatch(type, event);\n      return args;\n    };\n    const move = (state, editor) => {\n      const throttledPlaceCaretAt = first$1((clientX, clientY) => placeCaretAt(editor, clientX, clientY), 0);\n      editor.on('remove', throttledPlaceCaretAt.cancel);\n      const state_ = state;\n      return e => state.on(state => {\n        const movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));\n        if (!state.dragging && movement > 10) {\n          const args = dispatchDragEvent(editor, 'dragstart', state.element, state.dataTransfer, e);\n          if (isNonNullable(args.dataTransfer)) {\n            state.dataTransfer = args.dataTransfer;\n          }\n          if (args.isDefaultPrevented()) {\n            return;\n          }\n          state.dragging = true;\n          editor.focus();\n        }\n        if (state.dragging) {\n          const mouseEventOriginatedFromWithinTheEditor = e.currentTarget === editor.getDoc().documentElement;\n          const targetPos = applyRelPos(state, calc(editor, e));\n          appendGhostToBody(state.ghost, editor.getBody());\n          moveGhost(state.ghost, targetPos, state.width, state.height, state.maxX, state.maxY, e.clientY, e.clientX, editor.getContentAreaContainer(), editor.getWin(), state_, mouseEventOriginatedFromWithinTheEditor);\n          throttledPlaceCaretAt.throttle(e.clientX, e.clientY);\n        }\n      });\n    };\n    const getRawTarget = selection => {\n      const sel = selection.getSel();\n      if (isNonNullable(sel)) {\n        const rng = sel.getRangeAt(0);\n        const startContainer = rng.startContainer;\n        return isText$a(startContainer) ? startContainer.parentNode : startContainer;\n      } else {\n        return null;\n      }\n    };\n    const drop = (state, editor) => e => {\n      state.on(state => {\n        var _a;\n        state.intervalId.clear();\n        if (state.dragging) {\n          if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {\n            const dropTarget = (_a = editor.getDoc().elementFromPoint(e.clientX, e.clientY)) !== null && _a !== void 0 ? _a : editor.getBody();\n            const args = dispatchDragEvent(editor, 'drop', dropTarget, state.dataTransfer, e);\n            if (!args.isDefaultPrevented()) {\n              editor.undoManager.transact(() => {\n                removeElementWithPadding(editor.dom, state.element);\n                getHtmlData(state.dataTransfer).each(content => editor.insertContent(content));\n                editor._selectionOverrides.hideFakeCaret();\n              });\n            }\n          }\n          dispatchDragEvent(editor, 'dragend', editor.getBody(), state.dataTransfer, e);\n        }\n      });\n      removeDragState(state);\n    };\n    const stopDragging = (state, editor, e) => {\n      state.on(state => {\n        state.intervalId.clear();\n        if (state.dragging) {\n          e.fold(() => dispatchDragEvent(editor, 'dragend', state.element, state.dataTransfer), mouseEvent => dispatchDragEvent(editor, 'dragend', state.element, state.dataTransfer, mouseEvent));\n        }\n      });\n      removeDragState(state);\n    };\n    const stop = (state, editor) => e => stopDragging(state, editor, Optional.some(e));\n    const removeDragState = state => {\n      state.on(state => {\n        state.intervalId.clear();\n        removeElement(state.ghost);\n      });\n      state.clear();\n    };\n    const bindFakeDragEvents = editor => {\n      const state = value$2();\n      const pageDom = DOMUtils.DOM;\n      const rootDocument = document;\n      const dragStartHandler = start(state, editor);\n      const dragHandler = move(state, editor);\n      const dropHandler = drop(state, editor);\n      const dragEndHandler = stop(state, editor);\n      editor.on('mousedown', dragStartHandler);\n      editor.on('mousemove', dragHandler);\n      editor.on('mouseup', dropHandler);\n      pageDom.bind(rootDocument, 'mousemove', dragHandler);\n      pageDom.bind(rootDocument, 'mouseup', dragEndHandler);\n      editor.on('remove', () => {\n        pageDom.unbind(rootDocument, 'mousemove', dragHandler);\n        pageDom.unbind(rootDocument, 'mouseup', dragEndHandler);\n      });\n      editor.on('keydown', e => {\n        if (e.keyCode === VK.ESC) {\n          stopDragging(state, editor, Optional.none());\n        }\n      });\n    };\n    const blockUnsupportedFileDrop = editor => {\n      const preventFileDrop = e => {\n        if (!e.isDefaultPrevented()) {\n          const dataTransfer = e.dataTransfer;\n          if (dataTransfer && (contains$2(dataTransfer.types, 'Files') || dataTransfer.files.length > 0)) {\n            e.preventDefault();\n            if (e.type === 'drop') {\n              displayError(editor, 'Dropped file type is not supported');\n            }\n          }\n        }\n      };\n      const preventFileDropIfUIElement = e => {\n        if (isUIElement(editor, e.target)) {\n          preventFileDrop(e);\n        }\n      };\n      const setup = () => {\n        const pageDom = DOMUtils.DOM;\n        const dom = editor.dom;\n        const doc = document;\n        const editorRoot = editor.inline ? editor.getBody() : editor.getDoc();\n        const eventNames = [\n          'drop',\n          'dragover'\n        ];\n        each$e(eventNames, name => {\n          pageDom.bind(doc, name, preventFileDropIfUIElement);\n          dom.bind(editorRoot, name, preventFileDrop);\n        });\n        editor.on('remove', () => {\n          each$e(eventNames, name => {\n            pageDom.unbind(doc, name, preventFileDropIfUIElement);\n            dom.unbind(editorRoot, name, preventFileDrop);\n          });\n        });\n      };\n      editor.on('init', () => {\n        Delay.setEditorTimeout(editor, setup, 0);\n      });\n    };\n    const init$2 = editor => {\n      bindFakeDragEvents(editor);\n      if (shouldBlockUnsupportedDrop(editor)) {\n        blockUnsupportedFileDrop(editor);\n      }\n    };\n\n    const setup$4 = editor => {\n      const renderFocusCaret = first$1(() => {\n        if (!editor.removed && editor.getBody().contains(document.activeElement)) {\n          const rng = editor.selection.getRng();\n          if (rng.collapsed) {\n            const caretRange = renderRangeCaret(editor, rng, false);\n            editor.selection.setRng(caretRange);\n          }\n        }\n      }, 0);\n      editor.on('focus', () => {\n        renderFocusCaret.throttle();\n      });\n      editor.on('blur', () => {\n        renderFocusCaret.cancel();\n      });\n    };\n\n    const setup$3 = editor => {\n      editor.on('init', () => {\n        editor.on('focusin', e => {\n          const target = e.target;\n          if (isMedia$2(target)) {\n            const ceRoot = getContentEditableRoot$1(editor.getBody(), target);\n            const node = isContentEditableFalse$b(ceRoot) ? ceRoot : target;\n            if (editor.selection.getNode() !== node) {\n              selectNode(editor, node).each(rng => editor.selection.setRng(rng));\n            }\n          }\n        });\n      });\n    };\n\n    const isContentEditableFalse = isContentEditableFalse$b;\n    const getContentEditableRoot = (editor, node) => getContentEditableRoot$1(editor.getBody(), node);\n    const SelectionOverrides = editor => {\n      const selection = editor.selection, dom = editor.dom;\n      const rootNode = editor.getBody();\n      const fakeCaret = FakeCaret(editor, rootNode, dom.isBlock, () => hasFocus(editor));\n      const realSelectionId = 'sel-' + dom.uniqueId();\n      const elementSelectionAttr = 'data-mce-selected';\n      let selectedElement;\n      const isFakeSelectionElement = node => isNonNullable(node) && dom.hasClass(node, 'mce-offscreen-selection');\n      const isFakeSelectionTargetElement = node => node !== rootNode && (isContentEditableFalse(node) || isMedia$2(node)) && dom.isChildOf(node, rootNode) && dom.isEditable(node.parentNode);\n      const setRange = range => {\n        if (range) {\n          selection.setRng(range);\n        }\n      };\n      const showCaret = (direction, node, before, scrollIntoView = true) => {\n        const e = editor.dispatch('ShowCaret', {\n          target: node,\n          direction,\n          before\n        });\n        if (e.isDefaultPrevented()) {\n          return null;\n        }\n        if (scrollIntoView) {\n          selection.scrollIntoView(node, direction === -1);\n        }\n        return fakeCaret.show(before, node);\n      };\n      const showBlockCaretContainer = blockCaretContainer => {\n        if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n          showCaretContainerBlock(blockCaretContainer);\n          selection.scrollIntoView(blockCaretContainer);\n        }\n      };\n      const registerEvents = () => {\n        editor.on('click', e => {\n          if (!dom.isEditable(e.target)) {\n            e.preventDefault();\n            editor.focus();\n          }\n        });\n        editor.on('blur NewBlock', removeElementSelection);\n        editor.on('ResizeWindow FullscreenStateChanged', fakeCaret.reposition);\n        editor.on('tap', e => {\n          const targetElm = e.target;\n          const contentEditableRoot = getContentEditableRoot(editor, targetElm);\n          if (isContentEditableFalse(contentEditableRoot)) {\n            e.preventDefault();\n            selectNode(editor, contentEditableRoot).each(setElementSelection);\n          } else if (isFakeSelectionTargetElement(targetElm)) {\n            selectNode(editor, targetElm).each(setElementSelection);\n          }\n        }, true);\n        editor.on('mousedown', e => {\n          const targetElm = e.target;\n          if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !dom.isChildOf(targetElm, rootNode)) {\n            return;\n          }\n          if (!isXYInContentArea(editor, e.clientX, e.clientY)) {\n            return;\n          }\n          removeElementSelection();\n          hideFakeCaret();\n          const closestContentEditable = getContentEditableRoot(editor, targetElm);\n          if (isContentEditableFalse(closestContentEditable)) {\n            e.preventDefault();\n            selectNode(editor, closestContentEditable).each(setElementSelection);\n          } else {\n            closestFakeCaretCandidate(rootNode, e.clientX, e.clientY).each(caretInfo => {\n              e.preventDefault();\n              const range = showCaret(1, caretInfo.node, caretInfo.position === FakeCaretPosition.Before, false);\n              setRange(range);\n              if (isElement$6(closestContentEditable)) {\n                closestContentEditable.focus();\n              } else {\n                editor.getBody().focus();\n              }\n            });\n          }\n        });\n        editor.on('keypress', e => {\n          if (VK.modifierPressed(e)) {\n            return;\n          }\n          if (isContentEditableFalse(selection.getNode())) {\n            e.preventDefault();\n          }\n        });\n        editor.on('GetSelectionRange', e => {\n          let rng = e.range;\n          if (selectedElement) {\n            if (!selectedElement.parentNode) {\n              selectedElement = null;\n              return;\n            }\n            rng = rng.cloneRange();\n            rng.selectNode(selectedElement);\n            e.range = rng;\n          }\n        });\n        editor.on('SetSelectionRange', e => {\n          e.range = normalizeVoidElementSelection(e.range);\n          const rng = setElementSelection(e.range, e.forward);\n          if (rng) {\n            e.range = rng;\n          }\n        });\n        const isPasteBin = node => isElement$6(node) && node.id === 'mcepastebin';\n        editor.on('AfterSetSelectionRange', e => {\n          const rng = e.range;\n          const parent = rng.startContainer.parentElement;\n          if (!isRangeInCaretContainer(rng) && !isPasteBin(parent)) {\n            hideFakeCaret();\n          }\n          if (!isFakeSelectionElement(parent)) {\n            removeElementSelection();\n          }\n        });\n        init$2(editor);\n        setup$4(editor);\n        setup$3(editor);\n      };\n      const isWithinCaretContainer = node => isCaretContainer$2(node) || startsWithCaretContainer$1(node) || endsWithCaretContainer$1(node);\n      const isRangeInCaretContainer = rng => isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);\n      const normalizeVoidElementSelection = rng => {\n        const voidElements = editor.schema.getVoidElements();\n        const newRng = dom.createRng();\n        const startContainer = rng.startContainer;\n        const startOffset = rng.startOffset;\n        const endContainer = rng.endContainer;\n        const endOffset = rng.endOffset;\n        if (has$2(voidElements, startContainer.nodeName.toLowerCase())) {\n          if (startOffset === 0) {\n            newRng.setStartBefore(startContainer);\n          } else {\n            newRng.setStartAfter(startContainer);\n          }\n        } else {\n          newRng.setStart(startContainer, startOffset);\n        }\n        if (has$2(voidElements, endContainer.nodeName.toLowerCase())) {\n          if (endOffset === 0) {\n            newRng.setEndBefore(endContainer);\n          } else {\n            newRng.setEndAfter(endContainer);\n          }\n        } else {\n          newRng.setEnd(endContainer, endOffset);\n        }\n        return newRng;\n      };\n      const setupOffscreenSelection = (node, targetClone) => {\n        const body = SugarElement.fromDom(editor.getBody());\n        const doc = editor.getDoc();\n        const realSelectionContainer = descendant(body, '#' + realSelectionId).getOrThunk(() => {\n          const newContainer = SugarElement.fromHtml('<div data-mce-bogus=\"all\" class=\"mce-offscreen-selection\"></div>', doc);\n          set$3(newContainer, 'id', realSelectionId);\n          append$1(body, newContainer);\n          return newContainer;\n        });\n        const newRange = dom.createRng();\n        empty(realSelectionContainer);\n        append(realSelectionContainer, [\n          SugarElement.fromText(nbsp, doc),\n          SugarElement.fromDom(targetClone),\n          SugarElement.fromText(nbsp, doc)\n        ]);\n        newRange.setStart(realSelectionContainer.dom.firstChild, 1);\n        newRange.setEnd(realSelectionContainer.dom.lastChild, 0);\n        setAll(realSelectionContainer, { top: dom.getPos(node, editor.getBody()).y + 'px' });\n        focus$1(realSelectionContainer);\n        const sel = selection.getSel();\n        if (sel) {\n          sel.removeAllRanges();\n          sel.addRange(newRange);\n        }\n        return newRange;\n      };\n      const selectElement = elm => {\n        const targetClone = elm.cloneNode(true);\n        const e = editor.dispatch('ObjectSelected', {\n          target: elm,\n          targetClone\n        });\n        if (e.isDefaultPrevented()) {\n          return null;\n        }\n        const range = setupOffscreenSelection(elm, e.targetClone);\n        const nodeElm = SugarElement.fromDom(elm);\n        each$e(descendants(SugarElement.fromDom(editor.getBody()), `*[${ elementSelectionAttr }]`), elm => {\n          if (!eq(nodeElm, elm)) {\n            remove$a(elm, elementSelectionAttr);\n          }\n        });\n        if (!dom.getAttrib(elm, elementSelectionAttr)) {\n          elm.setAttribute(elementSelectionAttr, '1');\n        }\n        selectedElement = elm;\n        hideFakeCaret();\n        return range;\n      };\n      const setElementSelection = (range, forward) => {\n        if (!range) {\n          return null;\n        }\n        if (range.collapsed) {\n          if (!isRangeInCaretContainer(range)) {\n            const dir = forward ? 1 : -1;\n            const caretPosition = getNormalizedRangeEndPoint(dir, rootNode, range);\n            const beforeNode = caretPosition.getNode(!forward);\n            if (isNonNullable(beforeNode)) {\n              if (isFakeCaretTarget(beforeNode)) {\n                return showCaret(dir, beforeNode, forward ? !caretPosition.isAtEnd() : false, false);\n              }\n              if (isCaretContainerInline(beforeNode) && isContentEditableFalse$b(beforeNode.nextSibling)) {\n                const rng = dom.createRng();\n                rng.setStart(beforeNode, 0);\n                rng.setEnd(beforeNode, 0);\n                return rng;\n              }\n            }\n            const afterNode = caretPosition.getNode(forward);\n            if (isNonNullable(afterNode)) {\n              if (isFakeCaretTarget(afterNode)) {\n                return showCaret(dir, afterNode, forward ? false : !caretPosition.isAtEnd(), false);\n              }\n              if (isCaretContainerInline(afterNode) && isContentEditableFalse$b(afterNode.previousSibling)) {\n                const rng = dom.createRng();\n                rng.setStart(afterNode, 1);\n                rng.setEnd(afterNode, 1);\n                return rng;\n              }\n            }\n          }\n          return null;\n        }\n        let startContainer = range.startContainer;\n        let startOffset = range.startOffset;\n        const endOffset = range.endOffset;\n        if (isText$a(startContainer) && startOffset === 0 && isContentEditableFalse(startContainer.parentNode)) {\n          startContainer = startContainer.parentNode;\n          startOffset = dom.nodeIndex(startContainer);\n          startContainer = startContainer.parentNode;\n        }\n        if (!isElement$6(startContainer)) {\n          return null;\n        }\n        if (endOffset === startOffset + 1 && startContainer === range.endContainer) {\n          const node = startContainer.childNodes[startOffset];\n          if (isFakeSelectionTargetElement(node)) {\n            return selectElement(node);\n          }\n        }\n        return null;\n      };\n      const removeElementSelection = () => {\n        if (selectedElement) {\n          selectedElement.removeAttribute(elementSelectionAttr);\n        }\n        descendant(SugarElement.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$5);\n        selectedElement = null;\n      };\n      const destroy = () => {\n        fakeCaret.destroy();\n        selectedElement = null;\n      };\n      const hideFakeCaret = () => {\n        fakeCaret.hide();\n      };\n      if (!isRtc(editor)) {\n        registerEvents();\n      }\n      return {\n        showCaret,\n        showBlockCaretContainer,\n        hideFakeCaret,\n        destroy\n      };\n    };\n\n    const getNormalizedTextOffset = (container, offset) => {\n      let normalizedOffset = offset;\n      for (let node = container.previousSibling; isText$a(node); node = node.previousSibling) {\n        normalizedOffset += node.data.length;\n      }\n      return normalizedOffset;\n    };\n    const generatePath = (dom, root, node, offset, normalized) => {\n      if (isText$a(node) && (offset < 0 || offset > node.data.length)) {\n        return [];\n      }\n      const p = normalized && isText$a(node) ? [getNormalizedTextOffset(node, offset)] : [offset];\n      let current = node;\n      while (current !== root && current.parentNode) {\n        p.push(dom.nodeIndex(current, normalized));\n        current = current.parentNode;\n      }\n      return current === root ? p.reverse() : [];\n    };\n    const generatePathRange = (dom, root, startNode, startOffset, endNode, endOffset, normalized = false) => {\n      const start = generatePath(dom, root, startNode, startOffset, normalized);\n      const end = generatePath(dom, root, endNode, endOffset, normalized);\n      return {\n        start,\n        end\n      };\n    };\n    const resolvePath = (root, path) => {\n      const nodePath = path.slice();\n      const offset = nodePath.pop();\n      if (!isNumber(offset)) {\n        return Optional.none();\n      } else {\n        const resolvedNode = foldl(nodePath, (optNode, index) => optNode.bind(node => Optional.from(node.childNodes[index])), Optional.some(root));\n        return resolvedNode.bind(node => {\n          if (isText$a(node) && (offset < 0 || offset > node.data.length)) {\n            return Optional.none();\n          } else {\n            return Optional.some({\n              node,\n              offset\n            });\n          }\n        });\n      }\n    };\n    const resolvePathRange = (root, range) => resolvePath(root, range.start).bind(({\n      node: startNode,\n      offset: startOffset\n    }) => resolvePath(root, range.end).map(({\n      node: endNode,\n      offset: endOffset\n    }) => {\n      const rng = document.createRange();\n      rng.setStart(startNode, startOffset);\n      rng.setEnd(endNode, endOffset);\n      return rng;\n    }));\n    const generatePathRangeFromRange = (dom, root, range, normalized = false) => generatePathRange(dom, root, range.startContainer, range.startOffset, range.endContainer, range.endOffset, normalized);\n\n    const cleanEmptyNodes = (dom, node, isRoot) => {\n      if (node && dom.isEmpty(node) && !isRoot(node)) {\n        const parent = node.parentNode;\n        dom.remove(node);\n        cleanEmptyNodes(dom, parent, isRoot);\n      }\n    };\n    const deleteRng = (dom, rng, isRoot, clean = true) => {\n      const startParent = rng.startContainer.parentNode;\n      const endParent = rng.endContainer.parentNode;\n      rng.deleteContents();\n      if (clean && !isRoot(rng.startContainer)) {\n        if (isText$a(rng.startContainer) && rng.startContainer.data.length === 0) {\n          dom.remove(rng.startContainer);\n        }\n        if (isText$a(rng.endContainer) && rng.endContainer.data.length === 0) {\n          dom.remove(rng.endContainer);\n        }\n        cleanEmptyNodes(dom, startParent, isRoot);\n        if (startParent !== endParent) {\n          cleanEmptyNodes(dom, endParent, isRoot);\n        }\n      }\n    };\n    const getParentBlock = (editor, rng) => Optional.from(editor.dom.getParent(rng.startContainer, editor.dom.isBlock));\n    const resolveFromDynamicPatterns = (patternSet, block, beforeText) => {\n      const dynamicPatterns = patternSet.dynamicPatternsLookup({\n        text: beforeText,\n        block\n      });\n      return {\n        ...patternSet,\n        blockPatterns: getBlockPatterns(dynamicPatterns).concat(patternSet.blockPatterns),\n        inlinePatterns: getInlinePatterns(dynamicPatterns).concat(patternSet.inlinePatterns)\n      };\n    };\n    const getBeforeText = (dom, block, node, offset) => {\n      const rng = dom.createRng();\n      rng.setStart(block, 0);\n      rng.setEnd(node, offset);\n      return rng.toString();\n    };\n\n    const startsWithSingleSpace = s => /^\\s[^\\s]/.test(s);\n    const stripPattern = (dom, block, pattern) => {\n      const firstTextNode = textAfter(block, 0, block);\n      firstTextNode.each(spot => {\n        const node = spot.container;\n        scanRight(node, pattern.start.length, block).each(end => {\n          const rng = dom.createRng();\n          rng.setStart(node, 0);\n          rng.setEnd(end.container, end.offset);\n          deleteRng(dom, rng, e => e === block);\n        });\n        const text = SugarElement.fromDom(node);\n        const textContent = get$3(text);\n        if (startsWithSingleSpace(textContent)) {\n          set(text, textContent.slice(1));\n        }\n      });\n    };\n    const applyPattern$1 = (editor, match) => {\n      const dom = editor.dom;\n      const pattern = match.pattern;\n      const rng = resolvePathRange(dom.getRoot(), match.range).getOrDie('Unable to resolve path range');\n      const isBlockFormatName = (name, formatter) => {\n        const formatSet = formatter.get(name);\n        return isArray$1(formatSet) && head(formatSet).exists(format => has$2(format, 'block'));\n      };\n      getParentBlock(editor, rng).each(block => {\n        if (pattern.type === 'block-format') {\n          if (isBlockFormatName(pattern.format, editor.formatter)) {\n            editor.undoManager.transact(() => {\n              stripPattern(editor.dom, block, pattern);\n              editor.formatter.apply(pattern.format);\n            });\n          }\n        } else if (pattern.type === 'block-command') {\n          editor.undoManager.transact(() => {\n            stripPattern(editor.dom, block, pattern);\n            editor.execCommand(pattern.cmd, false, pattern.value);\n          });\n        }\n      });\n      return true;\n    };\n    const sortPatterns$1 = patterns => sort(patterns, (a, b) => b.start.length - a.start.length);\n    const findPattern$1 = (patterns, text) => {\n      const sortedPatterns = sortPatterns$1(patterns);\n      const nuText = text.replace(nbsp, ' ');\n      return find$2(sortedPatterns, pattern => text.indexOf(pattern.start) === 0 || nuText.indexOf(pattern.start) === 0);\n    };\n    const findPatterns$1 = (editor, block, patternSet, normalizedMatches) => {\n      var _a;\n      const dom = editor.dom;\n      const forcedRootBlock = getForcedRootBlock(editor);\n      if (!dom.is(block, forcedRootBlock)) {\n        return [];\n      }\n      const blockText = (_a = block.textContent) !== null && _a !== void 0 ? _a : '';\n      return findPattern$1(patternSet.blockPatterns, blockText).map(pattern => {\n        if (Tools.trim(blockText).length === pattern.start.length) {\n          return [];\n        }\n        return [{\n            pattern,\n            range: generatePathRange(dom, dom.getRoot(), block, 0, block, 0, normalizedMatches)\n          }];\n      }).getOr([]);\n    };\n    const applyMatches$1 = (editor, matches) => {\n      if (matches.length === 0) {\n        return;\n      }\n      const bookmark = editor.selection.getBookmark();\n      each$e(matches, match => applyPattern$1(editor, match));\n      editor.selection.moveToBookmark(bookmark);\n    };\n\n    const newMarker = (dom, id) => dom.create('span', {\n      'data-mce-type': 'bookmark',\n      id\n    });\n    const rangeFromMarker = (dom, marker) => {\n      const rng = dom.createRng();\n      rng.setStartAfter(marker.start);\n      rng.setEndBefore(marker.end);\n      return rng;\n    };\n    const createMarker = (dom, markerPrefix, pathRange) => {\n      const rng = resolvePathRange(dom.getRoot(), pathRange).getOrDie('Unable to resolve path range');\n      const startNode = rng.startContainer;\n      const endNode = rng.endContainer;\n      const textEnd = rng.endOffset === 0 ? endNode : endNode.splitText(rng.endOffset);\n      const textStart = rng.startOffset === 0 ? startNode : startNode.splitText(rng.startOffset);\n      const startParentNode = textStart.parentNode;\n      const endParentNode = textEnd.parentNode;\n      return {\n        prefix: markerPrefix,\n        end: endParentNode.insertBefore(newMarker(dom, markerPrefix + '-end'), textEnd),\n        start: startParentNode.insertBefore(newMarker(dom, markerPrefix + '-start'), textStart)\n      };\n    };\n    const removeMarker = (dom, marker, isRoot) => {\n      cleanEmptyNodes(dom, dom.get(marker.prefix + '-end'), isRoot);\n      cleanEmptyNodes(dom, dom.get(marker.prefix + '-start'), isRoot);\n    };\n\n    const isReplacementPattern = pattern => pattern.start.length === 0;\n    const matchesPattern = patternContent => (element, offset) => {\n      const text = element.data;\n      const searchText = text.substring(0, offset);\n      const startEndIndex = searchText.lastIndexOf(patternContent.charAt(patternContent.length - 1));\n      const startIndex = searchText.lastIndexOf(patternContent);\n      if (startIndex !== -1) {\n        return startIndex + patternContent.length;\n      } else if (startEndIndex !== -1) {\n        return startEndIndex + 1;\n      } else {\n        return -1;\n      }\n    };\n    const findPatternStartFromSpot = (dom, pattern, block, spot) => {\n      const startPattern = pattern.start;\n      const startSpot = repeatLeft(dom, spot.container, spot.offset, matchesPattern(startPattern), block);\n      return startSpot.bind(spot => {\n        var _a, _b;\n        const startPatternIndex = (_b = (_a = block.textContent) === null || _a === void 0 ? void 0 : _a.indexOf(startPattern)) !== null && _b !== void 0 ? _b : -1;\n        const isCompleteMatch = startPatternIndex !== -1 && spot.offset >= startPatternIndex + startPattern.length;\n        if (isCompleteMatch) {\n          const rng = dom.createRng();\n          rng.setStart(spot.container, spot.offset - startPattern.length);\n          rng.setEnd(spot.container, spot.offset);\n          return Optional.some(rng);\n        } else {\n          const offset = spot.offset - startPattern.length;\n          return scanLeft(spot.container, offset, block).map(nextSpot => {\n            const rng = dom.createRng();\n            rng.setStart(nextSpot.container, nextSpot.offset);\n            rng.setEnd(spot.container, spot.offset);\n            return rng;\n          }).filter(rng => rng.toString() === startPattern).orThunk(() => findPatternStartFromSpot(dom, pattern, block, point(spot.container, 0)));\n        }\n      });\n    };\n    const findPatternStart = (dom, pattern, node, offset, block, requireGap = false) => {\n      if (pattern.start.length === 0 && !requireGap) {\n        const rng = dom.createRng();\n        rng.setStart(node, offset);\n        rng.setEnd(node, offset);\n        return Optional.some(rng);\n      }\n      return textBefore(node, offset, block).bind(spot => {\n        const start = findPatternStartFromSpot(dom, pattern, block, spot);\n        return start.bind(startRange => {\n          var _a;\n          if (requireGap) {\n            if (startRange.endContainer === spot.container && startRange.endOffset === spot.offset) {\n              return Optional.none();\n            } else if (spot.offset === 0 && ((_a = startRange.endContainer.textContent) === null || _a === void 0 ? void 0 : _a.length) === startRange.endOffset) {\n              return Optional.none();\n            }\n          }\n          return Optional.some(startRange);\n        });\n      });\n    };\n    const findPattern = (editor, block, details, normalizedMatches) => {\n      const dom = editor.dom;\n      const root = dom.getRoot();\n      const pattern = details.pattern;\n      const endNode = details.position.container;\n      const endOffset = details.position.offset;\n      return scanLeft(endNode, endOffset - details.pattern.end.length, block).bind(spot => {\n        const endPathRng = generatePathRange(dom, root, spot.container, spot.offset, endNode, endOffset, normalizedMatches);\n        if (isReplacementPattern(pattern)) {\n          return Optional.some({\n            matches: [{\n                pattern,\n                startRng: endPathRng,\n                endRng: endPathRng\n              }],\n            position: spot\n          });\n        } else {\n          const resultsOpt = findPatternsRec(editor, details.remainingPatterns, spot.container, spot.offset, block, normalizedMatches);\n          const results = resultsOpt.getOr({\n            matches: [],\n            position: spot\n          });\n          const pos = results.position;\n          const start = findPatternStart(dom, pattern, pos.container, pos.offset, block, resultsOpt.isNone());\n          return start.map(startRng => {\n            const startPathRng = generatePathRangeFromRange(dom, root, startRng, normalizedMatches);\n            return {\n              matches: results.matches.concat([{\n                  pattern,\n                  startRng: startPathRng,\n                  endRng: endPathRng\n                }]),\n              position: point(startRng.startContainer, startRng.startOffset)\n            };\n          });\n        }\n      });\n    };\n    const findPatternsRec = (editor, patterns, node, offset, block, normalizedMatches) => {\n      const dom = editor.dom;\n      return textBefore(node, offset, dom.getRoot()).bind(endSpot => {\n        const text = getBeforeText(dom, block, node, offset);\n        for (let i = 0; i < patterns.length; i++) {\n          const pattern = patterns[i];\n          if (!endsWith(text, pattern.end)) {\n            continue;\n          }\n          const patternsWithoutCurrent = patterns.slice();\n          patternsWithoutCurrent.splice(i, 1);\n          const result = findPattern(editor, block, {\n            pattern,\n            remainingPatterns: patternsWithoutCurrent,\n            position: endSpot\n          }, normalizedMatches);\n          if (result.isNone() && offset > 0) {\n            return findPatternsRec(editor, patterns, node, offset - 1, block, normalizedMatches);\n          }\n          if (result.isSome()) {\n            return result;\n          }\n        }\n        return Optional.none();\n      });\n    };\n    const applyPattern = (editor, pattern, patternRange) => {\n      editor.selection.setRng(patternRange);\n      if (pattern.type === 'inline-format') {\n        each$e(pattern.format, format => {\n          editor.formatter.apply(format);\n        });\n      } else {\n        editor.execCommand(pattern.cmd, false, pattern.value);\n      }\n    };\n    const applyReplacementPattern = (editor, pattern, marker, isRoot) => {\n      const markerRange = rangeFromMarker(editor.dom, marker);\n      deleteRng(editor.dom, markerRange, isRoot);\n      applyPattern(editor, pattern, markerRange);\n    };\n    const applyPatternWithContent = (editor, pattern, startMarker, endMarker, isRoot) => {\n      const dom = editor.dom;\n      const markerEndRange = rangeFromMarker(dom, endMarker);\n      const markerStartRange = rangeFromMarker(dom, startMarker);\n      deleteRng(dom, markerStartRange, isRoot);\n      deleteRng(dom, markerEndRange, isRoot);\n      const patternMarker = {\n        prefix: startMarker.prefix,\n        start: startMarker.end,\n        end: endMarker.start\n      };\n      const patternRange = rangeFromMarker(dom, patternMarker);\n      applyPattern(editor, pattern, patternRange);\n    };\n    const addMarkers = (dom, matches) => {\n      const markerPrefix = generate$1('mce_textpattern');\n      const matchesWithEnds = foldr(matches, (acc, match) => {\n        const endMarker = createMarker(dom, markerPrefix + `_end${ acc.length }`, match.endRng);\n        return acc.concat([{\n            ...match,\n            endMarker\n          }]);\n      }, []);\n      return foldr(matchesWithEnds, (acc, match) => {\n        const idx = matchesWithEnds.length - acc.length - 1;\n        const startMarker = isReplacementPattern(match.pattern) ? match.endMarker : createMarker(dom, markerPrefix + `_start${ idx }`, match.startRng);\n        return acc.concat([{\n            ...match,\n            startMarker\n          }]);\n      }, []);\n    };\n    const sortPatterns = patterns => sort(patterns, (a, b) => b.end.length - a.end.length);\n    const getBestMatches = (matches, matchesWithSortedPatterns) => {\n      const hasSameMatches = forall(matches, match => exists(matchesWithSortedPatterns, sortedMatch => match.pattern.start === sortedMatch.pattern.start && match.pattern.end === sortedMatch.pattern.end));\n      if (matches.length === matchesWithSortedPatterns.length) {\n        if (hasSameMatches) {\n          return matches;\n        } else {\n          return matchesWithSortedPatterns;\n        }\n      }\n      return matches.length > matchesWithSortedPatterns.length ? matches : matchesWithSortedPatterns;\n    };\n    const findPatterns = (editor, block, node, offset, patternSet, normalizedMatches) => {\n      const matches = findPatternsRec(editor, patternSet.inlinePatterns, node, offset, block, normalizedMatches).fold(() => [], result => result.matches);\n      const matchesWithSortedPatterns = findPatternsRec(editor, sortPatterns(patternSet.inlinePatterns), node, offset, block, normalizedMatches).fold(() => [], result => result.matches);\n      return getBestMatches(matches, matchesWithSortedPatterns);\n    };\n    const applyMatches = (editor, matches) => {\n      if (matches.length === 0) {\n        return;\n      }\n      const dom = editor.dom;\n      const bookmark = editor.selection.getBookmark();\n      const matchesWithMarkers = addMarkers(dom, matches);\n      each$e(matchesWithMarkers, match => {\n        const block = dom.getParent(match.startMarker.start, dom.isBlock);\n        const isRoot = node => node === block;\n        if (isReplacementPattern(match.pattern)) {\n          applyReplacementPattern(editor, match.pattern, match.endMarker, isRoot);\n        } else {\n          applyPatternWithContent(editor, match.pattern, match.startMarker, match.endMarker, isRoot);\n        }\n        removeMarker(dom, match.endMarker, isRoot);\n        removeMarker(dom, match.startMarker, isRoot);\n      });\n      editor.selection.moveToBookmark(bookmark);\n    };\n\n    const handleEnter = (editor, patternSet) => {\n      const rng = editor.selection.getRng();\n      return getParentBlock(editor, rng).map(block => {\n        var _a;\n        const offset = Math.max(0, rng.startOffset);\n        const dynamicPatternSet = resolveFromDynamicPatterns(patternSet, block, (_a = block.textContent) !== null && _a !== void 0 ? _a : '');\n        const inlineMatches = findPatterns(editor, block, rng.startContainer, offset, dynamicPatternSet, true);\n        const blockMatches = findPatterns$1(editor, block, dynamicPatternSet, true);\n        if (blockMatches.length > 0 || inlineMatches.length > 0) {\n          editor.undoManager.add();\n          editor.undoManager.extra(() => {\n            editor.execCommand('mceInsertNewLine');\n          }, () => {\n            editor.insertContent(zeroWidth);\n            applyMatches(editor, inlineMatches);\n            applyMatches$1(editor, blockMatches);\n            const range = editor.selection.getRng();\n            const spot = textBefore(range.startContainer, range.startOffset, editor.dom.getRoot());\n            editor.execCommand('mceInsertNewLine');\n            spot.each(s => {\n              const node = s.container;\n              if (node.data.charAt(s.offset - 1) === zeroWidth) {\n                node.deleteData(s.offset - 1, 1);\n                cleanEmptyNodes(editor.dom, node.parentNode, e => e === editor.dom.getRoot());\n              }\n            });\n          });\n          return true;\n        }\n        return false;\n      }).getOr(false);\n    };\n    const handleInlineKey = (editor, patternSet) => {\n      const rng = editor.selection.getRng();\n      getParentBlock(editor, rng).map(block => {\n        const offset = Math.max(0, rng.startOffset - 1);\n        const beforeText = getBeforeText(editor.dom, block, rng.startContainer, offset);\n        const dynamicPatternSet = resolveFromDynamicPatterns(patternSet, block, beforeText);\n        const inlineMatches = findPatterns(editor, block, rng.startContainer, offset, dynamicPatternSet, false);\n        if (inlineMatches.length > 0) {\n          editor.undoManager.transact(() => {\n            applyMatches(editor, inlineMatches);\n          });\n        }\n      });\n    };\n    const checkKeyEvent = (codes, event, predicate) => {\n      for (let i = 0; i < codes.length; i++) {\n        if (predicate(codes[i], event)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const checkKeyCode = (codes, event) => checkKeyEvent(codes, event, (code, event) => {\n      return code === event.keyCode && !VK.modifierPressed(event);\n    });\n    const checkCharCode = (chars, event) => checkKeyEvent(chars, event, (chr, event) => {\n      return chr.charCodeAt(0) === event.charCode;\n    });\n\n    const setup$2 = editor => {\n      const charCodes = [\n        ',',\n        '.',\n        ';',\n        ':',\n        '!',\n        '?'\n      ];\n      const keyCodes = [32];\n      const getPatternSet = () => createPatternSet(getTextPatterns(editor), getTextPatternsLookup(editor));\n      const hasDynamicPatterns = () => hasTextPatternsLookup(editor);\n      editor.on('keydown', e => {\n        if (e.keyCode === 13 && !VK.modifierPressed(e) && editor.selection.isCollapsed()) {\n          const patternSet = getPatternSet();\n          const hasPatterns = patternSet.inlinePatterns.length > 0 || patternSet.blockPatterns.length > 0 || hasDynamicPatterns();\n          if (hasPatterns && handleEnter(editor, patternSet)) {\n            e.preventDefault();\n          }\n        }\n      }, true);\n      const handleInlineTrigger = () => {\n        if (editor.selection.isCollapsed()) {\n          const patternSet = getPatternSet();\n          const hasPatterns = patternSet.inlinePatterns.length > 0 || hasDynamicPatterns();\n          if (hasPatterns) {\n            handleInlineKey(editor, patternSet);\n          }\n        }\n      };\n      editor.on('keyup', e => {\n        if (checkKeyCode(keyCodes, e)) {\n          handleInlineTrigger();\n        }\n      });\n      editor.on('keypress', e => {\n        if (checkCharCode(charCodes, e)) {\n          Delay.setEditorTimeout(editor, handleInlineTrigger);\n        }\n      });\n    };\n\n    const setup$1 = editor => {\n      setup$2(editor);\n    };\n\n    const Quirks = editor => {\n      const each = Tools.each;\n      const BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, parser = editor.parser;\n      const browser = Env.browser;\n      const isGecko = browser.isFirefox();\n      const isWebKit = browser.isChromium() || browser.isSafari();\n      const isiOS = Env.deviceType.isiPhone() || Env.deviceType.isiPad();\n      const isMac = Env.os.isMacOS() || Env.os.isiOS();\n      const setEditorCommandState = (cmd, state) => {\n        try {\n          editor.getDoc().execCommand(cmd, false, String(state));\n        } catch (ex) {\n        }\n      };\n      const isDefaultPrevented = e => {\n        return e.isDefaultPrevented();\n      };\n      const emptyEditorWhenDeleting = () => {\n        const serializeRng = rng => {\n          const body = dom.create('body');\n          const contents = rng.cloneContents();\n          body.appendChild(contents);\n          return selection.serializer.serialize(body, { format: 'html' });\n        };\n        const allContentsSelected = rng => {\n          const selection = serializeRng(rng);\n          const allRng = dom.createRng();\n          allRng.selectNode(editor.getBody());\n          const allSelection = serializeRng(allRng);\n          return selection === allSelection;\n        };\n        editor.on('keydown', e => {\n          const keyCode = e.keyCode;\n          if (!isDefaultPrevented(e) && (keyCode === DELETE || keyCode === BACKSPACE) && editor.selection.isEditable()) {\n            const isCollapsed = editor.selection.isCollapsed();\n            const body = editor.getBody();\n            if (isCollapsed && !dom.isEmpty(body)) {\n              return;\n            }\n            if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) {\n              return;\n            }\n            e.preventDefault();\n            editor.setContent('');\n            if (body.firstChild && dom.isBlock(body.firstChild)) {\n              editor.selection.setCursorLocation(body.firstChild, 0);\n            } else {\n              editor.selection.setCursorLocation(body, 0);\n            }\n            editor.nodeChanged();\n          }\n        });\n      };\n      const selectAll = () => {\n        editor.shortcuts.add('meta+a', null, 'SelectAll');\n      };\n      const documentElementEditingFocus = () => {\n        if (!editor.inline) {\n          dom.bind(editor.getDoc(), 'mousedown mouseup', e => {\n            let rng;\n            if (e.target === editor.getDoc().documentElement) {\n              rng = selection.getRng();\n              editor.getBody().focus();\n              if (e.type === 'mousedown') {\n                if (isCaretContainer$2(rng.startContainer)) {\n                  return;\n                }\n                selection.placeCaretAt(e.clientX, e.clientY);\n              } else {\n                selection.setRng(rng);\n              }\n            }\n          });\n        }\n      };\n      const removeHrOnBackspace = () => {\n        editor.on('keydown', e => {\n          if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n            if (!editor.getBody().getElementsByTagName('hr').length) {\n              return;\n            }\n            if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n              const node = selection.getNode();\n              const previousSibling = node.previousSibling;\n              if (node.nodeName === 'HR') {\n                dom.remove(node);\n                e.preventDefault();\n                return;\n              }\n              if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'hr') {\n                dom.remove(previousSibling);\n                e.preventDefault();\n              }\n            }\n          }\n        });\n      };\n      const focusBody = () => {\n        if (!Range.prototype.getClientRects) {\n          editor.on('mousedown', e => {\n            if (!isDefaultPrevented(e) && e.target.nodeName === 'HTML') {\n              const body = editor.getBody();\n              body.blur();\n              Delay.setEditorTimeout(editor, () => {\n                body.focus();\n              });\n            }\n          });\n        }\n      };\n      const selectControlElements = () => {\n        const visualAidsAnchorClass = getVisualAidsAnchorClass(editor);\n        editor.on('click', e => {\n          const target = e.target;\n          if (/^(IMG|HR)$/.test(target.nodeName) && dom.isEditable(target.parentNode)) {\n            e.preventDefault();\n            editor.selection.select(target);\n            editor.nodeChanged();\n          }\n          if (target.nodeName === 'A' && dom.hasClass(target, visualAidsAnchorClass) && target.childNodes.length === 0 && dom.isEditable(target.parentNode)) {\n            e.preventDefault();\n            selection.select(target);\n          }\n        });\n      };\n      const removeStylesWhenDeletingAcrossBlockElements = () => {\n        const getAttributeApplyFunction = () => {\n          const template = dom.getAttribs(selection.getStart().cloneNode(false));\n          return () => {\n            const target = selection.getStart();\n            if (target !== editor.getBody()) {\n              dom.setAttrib(target, 'style', null);\n              each(template, attr => {\n                target.setAttributeNode(attr.cloneNode(true));\n              });\n            }\n          };\n        };\n        const isSelectionAcrossElements = () => {\n          return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) !== dom.getParent(selection.getEnd(), dom.isBlock);\n        };\n        editor.on('keypress', e => {\n          let applyAttributes;\n          if (!isDefaultPrevented(e) && (e.keyCode === 8 || e.keyCode === 46) && isSelectionAcrossElements()) {\n            applyAttributes = getAttributeApplyFunction();\n            editor.getDoc().execCommand('delete', false);\n            applyAttributes();\n            e.preventDefault();\n            return false;\n          } else {\n            return true;\n          }\n        });\n        dom.bind(editor.getDoc(), 'cut', e => {\n          if (!isDefaultPrevented(e) && isSelectionAcrossElements()) {\n            const applyAttributes = getAttributeApplyFunction();\n            Delay.setEditorTimeout(editor, () => {\n              applyAttributes();\n            });\n          }\n        });\n      };\n      const disableBackspaceIntoATable = () => {\n        editor.on('keydown', e => {\n          if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n            if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n              const previousSibling = selection.getNode().previousSibling;\n              if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'table') {\n                e.preventDefault();\n                return false;\n              }\n            }\n          }\n          return true;\n        });\n      };\n      const removeBlockQuoteOnBackSpace = () => {\n        editor.on('keydown', e => {\n          if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {\n            return;\n          }\n          let rng = selection.getRng();\n          const container = rng.startContainer;\n          const offset = rng.startOffset;\n          const root = dom.getRoot();\n          let parent = container;\n          if (!rng.collapsed || offset !== 0) {\n            return;\n          }\n          while (parent.parentNode && parent.parentNode.firstChild === parent && parent.parentNode !== root) {\n            parent = parent.parentNode;\n          }\n          if (parent.nodeName === 'BLOCKQUOTE') {\n            editor.formatter.toggle('blockquote', undefined, parent);\n            rng = dom.createRng();\n            rng.setStart(container, 0);\n            rng.setEnd(container, 0);\n            selection.setRng(rng);\n          }\n        });\n      };\n      const setGeckoEditingOptions = () => {\n        const setOpts = () => {\n          setEditorCommandState('StyleWithCSS', false);\n          setEditorCommandState('enableInlineTableEditing', false);\n          if (!getObjectResizing(editor)) {\n            setEditorCommandState('enableObjectResizing', false);\n          }\n        };\n        if (!isReadOnly$1(editor)) {\n          editor.on('BeforeExecCommand mousedown', setOpts);\n        }\n      };\n      const addBrAfterLastLinks = () => {\n        const fixLinks = () => {\n          each(dom.select('a:not([data-mce-block])'), node => {\n            var _a;\n            let parentNode = node.parentNode;\n            const root = dom.getRoot();\n            if ((parentNode === null || parentNode === void 0 ? void 0 : parentNode.lastChild) === node) {\n              while (parentNode && !dom.isBlock(parentNode)) {\n                if (((_a = parentNode.parentNode) === null || _a === void 0 ? void 0 : _a.lastChild) !== parentNode || parentNode === root) {\n                  return;\n                }\n                parentNode = parentNode.parentNode;\n              }\n              dom.add(parentNode, 'br', { 'data-mce-bogus': 1 });\n            }\n          });\n        };\n        editor.on('SetContent ExecCommand', e => {\n          if (e.type === 'setcontent' || e.command === 'mceInsertLink') {\n            fixLinks();\n          }\n        });\n      };\n      const setDefaultBlockType = () => {\n        editor.on('init', () => {\n          setEditorCommandState('DefaultParagraphSeparator', getForcedRootBlock(editor));\n        });\n      };\n      const isAllContentSelected = editor => {\n        const body = editor.getBody();\n        const rng = editor.selection.getRng();\n        return rng.startContainer === rng.endContainer && rng.startContainer === body && rng.startOffset === 0 && rng.endOffset === body.childNodes.length;\n      };\n      const normalizeSelection = () => {\n        editor.on('keyup focusin mouseup', e => {\n          if (!VK.modifierPressed(e) && !isAllContentSelected(editor)) {\n            selection.normalize();\n          }\n        }, true);\n      };\n      const showBrokenImageIcon = () => {\n        editor.contentStyles.push('img:-moz-broken {' + '-moz-force-broken-image-icon:1;' + 'min-width:24px;' + 'min-height:24px' + '}');\n      };\n      const restoreFocusOnKeyDown = () => {\n        if (!editor.inline) {\n          editor.on('keydown', () => {\n            if (document.activeElement === document.body) {\n              editor.getWin().focus();\n            }\n          });\n        }\n      };\n      const bodyHeight = () => {\n        if (!editor.inline) {\n          editor.contentStyles.push('body {min-height: 150px}');\n          editor.on('click', e => {\n            let rng;\n            if (e.target.nodeName === 'HTML') {\n              rng = editor.selection.getRng();\n              editor.getBody().focus();\n              editor.selection.setRng(rng);\n              editor.selection.normalize();\n              editor.nodeChanged();\n            }\n          });\n        }\n      };\n      const blockCmdArrowNavigation = () => {\n        if (isMac) {\n          editor.on('keydown', e => {\n            if (VK.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) {\n              e.preventDefault();\n              const selection = editor.selection.getSel();\n              selection.modify('move', e.keyCode === 37 ? 'backward' : 'forward', 'lineboundary');\n            }\n          });\n        }\n      };\n      const tapLinksAndImages = () => {\n        editor.on('click', e => {\n          let elm = e.target;\n          do {\n            if (elm.tagName === 'A') {\n              e.preventDefault();\n              return;\n            }\n          } while (elm = elm.parentNode);\n        });\n        editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}');\n      };\n      const blockFormSubmitInsideEditor = () => {\n        editor.on('init', () => {\n          editor.dom.bind(editor.getBody(), 'submit', e => {\n            e.preventDefault();\n          });\n        });\n      };\n      const removeAppleInterchangeBrs = () => {\n        parser.addNodeFilter('br', nodes => {\n          let i = nodes.length;\n          while (i--) {\n            if (nodes[i].attr('class') === 'Apple-interchange-newline') {\n              nodes[i].remove();\n            }\n          }\n        });\n      };\n      const refreshContentEditable = noop;\n      const isHidden = () => {\n        if (!isGecko || editor.removed) {\n          return false;\n        }\n        const sel = editor.selection.getSel();\n        return !sel || !sel.rangeCount || sel.rangeCount === 0;\n      };\n      const setupRtc = () => {\n        if (isWebKit) {\n          documentElementEditingFocus();\n          selectControlElements();\n          blockFormSubmitInsideEditor();\n          selectAll();\n          if (isiOS) {\n            restoreFocusOnKeyDown();\n            bodyHeight();\n            tapLinksAndImages();\n          }\n        }\n        if (isGecko) {\n          focusBody();\n          setGeckoEditingOptions();\n          showBrokenImageIcon();\n          blockCmdArrowNavigation();\n        }\n      };\n      const dropDragEndEvent = () => {\n        editor.on('drop', event => {\n          var _a;\n          const data = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.getData('text/html');\n          if (isString(data) && /^<img[^>]*>$/.test(data)) {\n            editor.dispatch('dragend', new window.DragEvent('dragend', event));\n          }\n        });\n      };\n      const setup = () => {\n        removeBlockQuoteOnBackSpace();\n        emptyEditorWhenDeleting();\n        if (!Env.windowsPhone) {\n          normalizeSelection();\n        }\n        if (isWebKit) {\n          documentElementEditingFocus();\n          selectControlElements();\n          setDefaultBlockType();\n          blockFormSubmitInsideEditor();\n          disableBackspaceIntoATable();\n          removeAppleInterchangeBrs();\n          if (isiOS) {\n            restoreFocusOnKeyDown();\n            bodyHeight();\n            tapLinksAndImages();\n          } else {\n            selectAll();\n          }\n        }\n        if (isGecko) {\n          removeHrOnBackspace();\n          focusBody();\n          removeStylesWhenDeletingAcrossBlockElements();\n          setGeckoEditingOptions();\n          addBrAfterLastLinks();\n          showBrokenImageIcon();\n          blockCmdArrowNavigation();\n          disableBackspaceIntoATable();\n          dropDragEndEvent();\n        }\n      };\n      if (isRtc(editor)) {\n        setupRtc();\n      } else {\n        setup();\n      }\n      return {\n        refreshContentEditable,\n        isHidden\n      };\n    };\n\n    const DOM$6 = DOMUtils.DOM;\n    const appendStyle = (editor, text) => {\n      const body = SugarElement.fromDom(editor.getBody());\n      const container = getStyleContainer(getRootNode(body));\n      const style = SugarElement.fromTag('style');\n      set$3(style, 'type', 'text/css');\n      append$1(style, SugarElement.fromText(text));\n      append$1(container, style);\n      editor.on('remove', () => {\n        remove$5(style);\n      });\n    };\n    const getRootName = editor => editor.inline ? editor.getElement().nodeName.toLowerCase() : undefined;\n    const removeUndefined = obj => filter$4(obj, v => isUndefined(v) === false);\n    const mkParserSettings = editor => {\n      const getOption = editor.options.get;\n      const blobCache = editor.editorUpload.blobCache;\n      return removeUndefined({\n        allow_conditional_comments: getOption('allow_conditional_comments'),\n        allow_html_data_urls: getOption('allow_html_data_urls'),\n        allow_svg_data_urls: getOption('allow_svg_data_urls'),\n        allow_html_in_named_anchor: getOption('allow_html_in_named_anchor'),\n        allow_script_urls: getOption('allow_script_urls'),\n        allow_unsafe_link_target: getOption('allow_unsafe_link_target'),\n        convert_fonts_to_spans: getOption('convert_fonts_to_spans'),\n        fix_list_elements: getOption('fix_list_elements'),\n        font_size_legacy_values: getOption('font_size_legacy_values'),\n        forced_root_block: getOption('forced_root_block'),\n        forced_root_block_attrs: getOption('forced_root_block_attrs'),\n        preserve_cdata: getOption('preserve_cdata'),\n        inline_styles: getOption('inline_styles'),\n        root_name: getRootName(editor),\n        sanitize: getOption('xss_sanitization'),\n        validate: true,\n        blob_cache: blobCache,\n        document: editor.getDoc()\n      });\n    };\n    const mkSchemaSettings = editor => {\n      const getOption = editor.options.get;\n      return removeUndefined({\n        custom_elements: getOption('custom_elements'),\n        extended_valid_elements: getOption('extended_valid_elements'),\n        invalid_elements: getOption('invalid_elements'),\n        invalid_styles: getOption('invalid_styles'),\n        schema: getOption('schema'),\n        valid_children: getOption('valid_children'),\n        valid_classes: getOption('valid_classes'),\n        valid_elements: getOption('valid_elements'),\n        valid_styles: getOption('valid_styles'),\n        verify_html: getOption('verify_html'),\n        padd_empty_block_inline_children: getOption('format_empty_lines')\n      });\n    };\n    const mkSerializerSettings = editor => {\n      const getOption = editor.options.get;\n      return {\n        ...mkParserSettings(editor),\n        ...mkSchemaSettings(editor),\n        ...removeUndefined({\n          remove_trailing_brs: getOption('remove_trailing_brs'),\n          url_converter: getOption('url_converter'),\n          url_converter_scope: getOption('url_converter_scope'),\n          element_format: getOption('element_format'),\n          entities: getOption('entities'),\n          entity_encoding: getOption('entity_encoding'),\n          indent: getOption('indent'),\n          indent_after: getOption('indent_after'),\n          indent_before: getOption('indent_before')\n        })\n      };\n    };\n    const createParser = editor => {\n      const parser = DomParser(mkParserSettings(editor), editor.schema);\n      parser.addAttributeFilter('src,href,style,tabindex', (nodes, name) => {\n        const dom = editor.dom;\n        const internalName = 'data-mce-' + name;\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          let value = node.attr(name);\n          if (value && !node.attr(internalName)) {\n            if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) {\n              continue;\n            }\n            if (name === 'style') {\n              value = dom.serializeStyle(dom.parseStyle(value), node.name);\n              if (!value.length) {\n                value = null;\n              }\n              node.attr(internalName, value);\n              node.attr(name, value);\n            } else if (name === 'tabindex') {\n              node.attr(internalName, value);\n              node.attr(name, null);\n            } else {\n              node.attr(internalName, editor.convertURL(value, name, node.name));\n            }\n          }\n        }\n      });\n      parser.addNodeFilter('script', nodes => {\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          const type = node.attr('type') || 'no/type';\n          if (type.indexOf('mce-') !== 0) {\n            node.attr('type', 'mce-' + type);\n          }\n        }\n      });\n      if (shouldPreserveCData(editor)) {\n        parser.addNodeFilter('#cdata', nodes => {\n          var _a;\n          let i = nodes.length;\n          while (i--) {\n            const node = nodes[i];\n            node.type = 8;\n            node.name = '#comment';\n            node.value = '[CDATA[' + editor.dom.encode((_a = node.value) !== null && _a !== void 0 ? _a : '') + ']]';\n          }\n        });\n      }\n      parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', nodes => {\n        let i = nodes.length;\n        const nonEmptyElements = editor.schema.getNonEmptyElements();\n        while (i--) {\n          const node = nodes[i];\n          if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {\n            node.append(new AstNode('br', 1));\n          }\n        }\n      });\n      return parser;\n    };\n    const autoFocus = editor => {\n      const autoFocus = getAutoFocus(editor);\n      if (autoFocus) {\n        Delay.setEditorTimeout(editor, () => {\n          let focusEditor;\n          if (autoFocus === true) {\n            focusEditor = editor;\n          } else {\n            focusEditor = editor.editorManager.get(autoFocus);\n          }\n          if (focusEditor && !focusEditor.destroyed) {\n            focusEditor.focus();\n            focusEditor.selection.scrollIntoView();\n          }\n        }, 100);\n      }\n    };\n    const moveSelectionToFirstCaretPosition = editor => {\n      const root = editor.dom.getRoot();\n      if (!editor.inline && (!hasAnyRanges(editor) || editor.selection.getStart(true) === root)) {\n        firstPositionIn(root).each(pos => {\n          const node = pos.getNode();\n          const caretPos = isTable$2(node) ? firstPositionIn(node).getOr(pos) : pos;\n          editor.selection.setRng(caretPos.toRange());\n        });\n      }\n    };\n    const initEditor = editor => {\n      editor.bindPendingEventDelegates();\n      editor.initialized = true;\n      fireInit(editor);\n      editor.focus(true);\n      moveSelectionToFirstCaretPosition(editor);\n      editor.nodeChanged({ initial: true });\n      const initInstanceCallback = getInitInstanceCallback(editor);\n      if (isFunction(initInstanceCallback)) {\n        initInstanceCallback.call(editor, editor);\n      }\n      autoFocus(editor);\n    };\n    const getStyleSheetLoader$1 = editor => editor.inline ? editor.ui.styleSheetLoader : editor.dom.styleSheetLoader;\n    const makeStylesheetLoadingPromises = (editor, css, framedFonts) => {\n      const promises = [getStyleSheetLoader$1(editor).loadAll(css)];\n      if (editor.inline) {\n        return promises;\n      } else {\n        return promises.concat([editor.ui.styleSheetLoader.loadAll(framedFonts)]);\n      }\n    };\n    const loadContentCss = editor => {\n      const styleSheetLoader = getStyleSheetLoader$1(editor);\n      const fontCss = getFontCss(editor);\n      const css = editor.contentCSS;\n      const removeCss = () => {\n        styleSheetLoader.unloadAll(css);\n        if (!editor.inline) {\n          editor.ui.styleSheetLoader.unloadAll(fontCss);\n        }\n      };\n      const loaded = () => {\n        if (editor.removed) {\n          removeCss();\n        } else {\n          editor.on('remove', removeCss);\n        }\n      };\n      if (editor.contentStyles.length > 0) {\n        let contentCssText = '';\n        Tools.each(editor.contentStyles, style => {\n          contentCssText += style + '\\r\\n';\n        });\n        editor.dom.addStyle(contentCssText);\n      }\n      const allStylesheets = Promise.all(makeStylesheetLoadingPromises(editor, css, fontCss)).then(loaded).catch(loaded);\n      const contentStyle = getContentStyle(editor);\n      if (contentStyle) {\n        appendStyle(editor, contentStyle);\n      }\n      return allStylesheets;\n    };\n    const preInit = editor => {\n      const doc = editor.getDoc(), body = editor.getBody();\n      firePreInit(editor);\n      if (!shouldBrowserSpellcheck(editor)) {\n        doc.body.spellcheck = false;\n        DOM$6.setAttrib(body, 'spellcheck', 'false');\n      }\n      editor.quirks = Quirks(editor);\n      firePostRender(editor);\n      const directionality = getDirectionality(editor);\n      if (directionality !== undefined) {\n        body.dir = directionality;\n      }\n      const protect = getProtect(editor);\n      if (protect) {\n        editor.on('BeforeSetContent', e => {\n          Tools.each(protect, pattern => {\n            e.content = e.content.replace(pattern, str => {\n              return '<!--mce:protected ' + escape(str) + '-->';\n            });\n          });\n        });\n      }\n      editor.on('SetContent', () => {\n        editor.addVisual(editor.getBody());\n      });\n      editor.on('compositionstart compositionend', e => {\n        editor.composing = e.type === 'compositionstart';\n      });\n    };\n    const loadInitialContent = editor => {\n      if (!isRtc(editor)) {\n        editor.load({\n          initial: true,\n          format: 'html'\n        });\n      }\n      editor.startContent = editor.getContent({ format: 'raw' });\n    };\n    const initEditorWithInitialContent = editor => {\n      if (editor.removed !== true) {\n        loadInitialContent(editor);\n        initEditor(editor);\n      }\n    };\n    const contentBodyLoaded = editor => {\n      const targetElm = editor.getElement();\n      let doc = editor.getDoc();\n      if (editor.inline) {\n        DOM$6.addClass(targetElm, 'mce-content-body');\n        editor.contentDocument = doc = document;\n        editor.contentWindow = window;\n        editor.bodyElement = targetElm;\n        editor.contentAreaContainer = targetElm;\n      }\n      const body = editor.getBody();\n      body.disabled = true;\n      editor.readonly = isReadOnly$1(editor);\n      editor._editableRoot = hasEditableRoot$1(editor);\n      if (!editor.readonly && editor.hasEditableRoot()) {\n        if (editor.inline && DOM$6.getStyle(body, 'position', true) === 'static') {\n          body.style.position = 'relative';\n        }\n        body.contentEditable = 'true';\n      }\n      body.disabled = false;\n      editor.editorUpload = EditorUpload(editor);\n      editor.schema = Schema(mkSchemaSettings(editor));\n      editor.dom = DOMUtils(doc, {\n        keep_values: true,\n        url_converter: editor.convertURL,\n        url_converter_scope: editor,\n        update_styles: true,\n        root_element: editor.inline ? editor.getBody() : null,\n        collect: editor.inline,\n        schema: editor.schema,\n        contentCssCors: shouldUseContentCssCors(editor),\n        referrerPolicy: getReferrerPolicy(editor),\n        onSetAttrib: e => {\n          editor.dispatch('SetAttrib', e);\n        }\n      });\n      editor.parser = createParser(editor);\n      editor.serializer = DomSerializer(mkSerializerSettings(editor), editor);\n      editor.selection = EditorSelection(editor.dom, editor.getWin(), editor.serializer, editor);\n      editor.annotator = Annotator(editor);\n      editor.formatter = Formatter(editor);\n      editor.undoManager = UndoManager(editor);\n      editor._nodeChangeDispatcher = new NodeChange(editor);\n      editor._selectionOverrides = SelectionOverrides(editor);\n      setup$o(editor);\n      setup$6(editor);\n      setup$m(editor);\n      if (!isRtc(editor)) {\n        setup$5(editor);\n        setup$1(editor);\n      }\n      const caret = setup$b(editor);\n      setup$p(editor, caret);\n      setup$n(editor);\n      setup$q(editor);\n      setup$7(editor);\n      const setupRtcThunk = setup$s(editor);\n      preInit(editor);\n      setupRtcThunk.fold(() => {\n        loadContentCss(editor).then(() => initEditorWithInitialContent(editor));\n      }, setupRtc => {\n        editor.setProgressState(true);\n        loadContentCss(editor).then(() => {\n          setupRtc().then(_rtcMode => {\n            editor.setProgressState(false);\n            initEditorWithInitialContent(editor);\n            bindEvents(editor);\n          }, err => {\n            editor.notificationManager.open({\n              type: 'error',\n              text: String(err)\n            });\n            initEditorWithInitialContent(editor);\n            bindEvents(editor);\n          });\n        });\n      });\n    };\n\n    const filter = always;\n    const bind = (element, event, handler) => bind$2(element, event, filter, handler);\n\n    const DOM$5 = DOMUtils.DOM;\n    const createIframeElement = (id, title, customAttrs, tabindex) => {\n      const iframe = SugarElement.fromTag('iframe');\n      tabindex.each(t => set$3(iframe, 'tabindex', t));\n      setAll$1(iframe, customAttrs);\n      setAll$1(iframe, {\n        id: id + '_ifr',\n        frameBorder: '0',\n        allowTransparency: 'true',\n        title\n      });\n      add$2(iframe, 'tox-edit-area__iframe');\n      return iframe;\n    };\n    const getIframeHtml = editor => {\n      let iframeHTML = getDocType(editor) + '<html><head>';\n      if (getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n        iframeHTML += '<base href=\"' + editor.documentBaseURI.getURI() + '\" />';\n      }\n      iframeHTML += '<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />';\n      const bodyId = getBodyId(editor);\n      const bodyClass = getBodyClass(editor);\n      const translatedAriaText = editor.translate(getIframeAriaText(editor));\n      if (getContentSecurityPolicy(editor)) {\n        iframeHTML += '<meta http-equiv=\"Content-Security-Policy\" content=\"' + getContentSecurityPolicy(editor) + '\" />';\n      }\n      iframeHTML += '</head>' + `<body id=\"${ bodyId }\" class=\"mce-content-body ${ bodyClass }\" data-id=\"${ editor.id }\" aria-label=\"${ translatedAriaText }\">` + '<br>' + '</body></html>';\n      return iframeHTML;\n    };\n    const createIframe = (editor, boxInfo) => {\n      const iframeTitle = editor.translate('Rich Text Area');\n      const tabindex = getOpt(SugarElement.fromDom(editor.getElement()), 'tabindex').bind(toInt);\n      const ifr = createIframeElement(editor.id, iframeTitle, getIframeAttrs(editor), tabindex).dom;\n      ifr.onload = () => {\n        ifr.onload = null;\n        editor.dispatch('load');\n      };\n      editor.contentAreaContainer = boxInfo.iframeContainer;\n      editor.iframeElement = ifr;\n      editor.iframeHTML = getIframeHtml(editor);\n      DOM$5.add(boxInfo.iframeContainer, ifr);\n    };\n    const setupIframeBody = editor => {\n      const iframe = editor.iframeElement;\n      const ready = () => {\n        editor.contentDocument = iframe.contentDocument;\n        contentBodyLoaded(editor);\n      };\n      if (shouldUseDocumentWrite(editor) || Env.browser.isFirefox()) {\n        const doc = editor.getDoc();\n        doc.open();\n        doc.write(editor.iframeHTML);\n        doc.close();\n        ready();\n      } else {\n        const binder = bind(SugarElement.fromDom(iframe), 'load', () => {\n          binder.unbind();\n          ready();\n        });\n        iframe.srcdoc = editor.iframeHTML;\n      }\n    };\n    const init$1 = (editor, boxInfo) => {\n      createIframe(editor, boxInfo);\n      if (boxInfo.editorContainer) {\n        boxInfo.editorContainer.style.display = editor.orgDisplay;\n        editor.hidden = DOM$5.isHidden(boxInfo.editorContainer);\n      }\n      editor.getElement().style.display = 'none';\n      DOM$5.setAttrib(editor.id, 'aria-hidden', 'true');\n      editor.getElement().style.visibility = editor.orgVisibility;\n      setupIframeBody(editor);\n    };\n\n    const DOM$4 = DOMUtils.DOM;\n    const initPlugin = (editor, initializedPlugins, plugin) => {\n      const Plugin = PluginManager.get(plugin);\n      const pluginUrl = PluginManager.urls[plugin] || editor.documentBaseUrl.replace(/\\/$/, '');\n      plugin = Tools.trim(plugin);\n      if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) {\n        if (editor.plugins[plugin]) {\n          return;\n        }\n        try {\n          const pluginInstance = Plugin(editor, pluginUrl) || {};\n          editor.plugins[plugin] = pluginInstance;\n          if (isFunction(pluginInstance.init)) {\n            pluginInstance.init(editor, pluginUrl);\n            initializedPlugins.push(plugin);\n          }\n        } catch (e) {\n          pluginInitError(editor, plugin, e);\n        }\n      }\n    };\n    const trimLegacyPrefix = name => {\n      return name.replace(/^\\-/, '');\n    };\n    const initPlugins = editor => {\n      const initializedPlugins = [];\n      each$e(getPlugins(editor), name => {\n        initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));\n      });\n    };\n    const initIcons = editor => {\n      const iconPackName = Tools.trim(getIconPackName(editor));\n      const currentIcons = editor.ui.registry.getAll().icons;\n      const loadIcons = {\n        ...IconManager.get('default').icons,\n        ...IconManager.get(iconPackName).icons\n      };\n      each$d(loadIcons, (svgData, icon) => {\n        if (!has$2(currentIcons, icon)) {\n          editor.ui.registry.addIcon(icon, svgData);\n        }\n      });\n    };\n    const initTheme = editor => {\n      const theme = getTheme(editor);\n      if (isString(theme)) {\n        const Theme = ThemeManager.get(theme);\n        editor.theme = Theme(editor, ThemeManager.urls[theme]) || {};\n        if (isFunction(editor.theme.init)) {\n          editor.theme.init(editor, ThemeManager.urls[theme] || editor.documentBaseUrl.replace(/\\/$/, ''));\n        }\n      } else {\n        editor.theme = {};\n      }\n    };\n    const initModel = editor => {\n      const model = getModel(editor);\n      const Model = ModelManager.get(model);\n      editor.model = Model(editor, ModelManager.urls[model]);\n    };\n    const renderFromLoadedTheme = editor => {\n      const render = editor.theme.renderUI;\n      return render ? render() : renderThemeFalse(editor);\n    };\n    const renderFromThemeFunc = editor => {\n      const elm = editor.getElement();\n      const theme = getTheme(editor);\n      const info = theme(editor, elm);\n      if (info.editorContainer.nodeType) {\n        info.editorContainer.id = info.editorContainer.id || editor.id + '_parent';\n      }\n      if (info.iframeContainer && info.iframeContainer.nodeType) {\n        info.iframeContainer.id = info.iframeContainer.id || editor.id + '_iframecontainer';\n      }\n      info.height = info.iframeHeight ? info.iframeHeight : elm.offsetHeight;\n      return info;\n    };\n    const createThemeFalseResult = (element, iframe) => {\n      return {\n        editorContainer: element,\n        iframeContainer: iframe,\n        api: {}\n      };\n    };\n    const renderThemeFalseIframe = targetElement => {\n      const iframeContainer = DOM$4.create('div');\n      DOM$4.insertAfter(iframeContainer, targetElement);\n      return createThemeFalseResult(iframeContainer, iframeContainer);\n    };\n    const renderThemeFalse = editor => {\n      const targetElement = editor.getElement();\n      return editor.inline ? createThemeFalseResult(null) : renderThemeFalseIframe(targetElement);\n    };\n    const renderThemeUi = editor => {\n      const elm = editor.getElement();\n      editor.orgDisplay = elm.style.display;\n      if (isString(getTheme(editor))) {\n        return renderFromLoadedTheme(editor);\n      } else if (isFunction(getTheme(editor))) {\n        return renderFromThemeFunc(editor);\n      } else {\n        return renderThemeFalse(editor);\n      }\n    };\n    const augmentEditorUiApi = (editor, api) => {\n      const uiApiFacade = {\n        show: Optional.from(api.show).getOr(noop),\n        hide: Optional.from(api.hide).getOr(noop),\n        isEnabled: Optional.from(api.isEnabled).getOr(always),\n        setEnabled: state => {\n          if (!editor.mode.isReadOnly()) {\n            Optional.from(api.setEnabled).each(f => f(state));\n          }\n        }\n      };\n      editor.ui = {\n        ...editor.ui,\n        ...uiApiFacade\n      };\n    };\n    const init = async editor => {\n      editor.dispatch('ScriptsLoaded');\n      initIcons(editor);\n      initTheme(editor);\n      initModel(editor);\n      initPlugins(editor);\n      const renderInfo = await renderThemeUi(editor);\n      augmentEditorUiApi(editor, Optional.from(renderInfo.api).getOr({}));\n      editor.editorContainer = renderInfo.editorContainer;\n      appendContentCssFromSettings(editor);\n      if (editor.inline) {\n        contentBodyLoaded(editor);\n      } else {\n        init$1(editor, {\n          editorContainer: renderInfo.editorContainer,\n          iframeContainer: renderInfo.iframeContainer\n        });\n      }\n    };\n\n    const DOM$3 = DOMUtils.DOM;\n    const hasSkipLoadPrefix = name => name.charAt(0) === '-';\n    const loadLanguage = (scriptLoader, editor) => {\n      const languageCode = getLanguageCode(editor);\n      const languageUrl = getLanguageUrl(editor);\n      if (!I18n.hasCode(languageCode) && languageCode !== 'en') {\n        const url = isNotEmpty(languageUrl) ? languageUrl : `${ editor.editorManager.baseURL }/langs/${ languageCode }.js`;\n        scriptLoader.add(url).catch(() => {\n          languageLoadError(editor, url, languageCode);\n        });\n      }\n    };\n    const loadTheme = (editor, suffix) => {\n      const theme = getTheme(editor);\n      if (isString(theme) && !hasSkipLoadPrefix(theme) && !has$2(ThemeManager.urls, theme)) {\n        const themeUrl = getThemeUrl(editor);\n        const url = themeUrl ? editor.documentBaseURI.toAbsolute(themeUrl) : `themes/${ theme }/theme${ suffix }.js`;\n        ThemeManager.load(theme, url).catch(() => {\n          themeLoadError(editor, url, theme);\n        });\n      }\n    };\n    const loadModel = (editor, suffix) => {\n      const model = getModel(editor);\n      if (model !== 'plugin' && !has$2(ModelManager.urls, model)) {\n        const modelUrl = getModelUrl(editor);\n        const url = isString(modelUrl) ? editor.documentBaseURI.toAbsolute(modelUrl) : `models/${ model }/model${ suffix }.js`;\n        ModelManager.load(model, url).catch(() => {\n          modelLoadError(editor, url, model);\n        });\n      }\n    };\n    const getIconsUrlMetaFromUrl = editor => Optional.from(getIconsUrl(editor)).filter(isNotEmpty).map(url => ({\n      url,\n      name: Optional.none()\n    }));\n    const getIconsUrlMetaFromName = (editor, name, suffix) => Optional.from(name).filter(name => isNotEmpty(name) && !IconManager.has(name)).map(name => ({\n      url: `${ editor.editorManager.baseURL }/icons/${ name }/icons${ suffix }.js`,\n      name: Optional.some(name)\n    }));\n    const loadIcons = (scriptLoader, editor, suffix) => {\n      const defaultIconsUrl = getIconsUrlMetaFromName(editor, 'default', suffix);\n      const customIconsUrl = getIconsUrlMetaFromUrl(editor).orThunk(() => getIconsUrlMetaFromName(editor, getIconPackName(editor), ''));\n      each$e(cat([\n        defaultIconsUrl,\n        customIconsUrl\n      ]), urlMeta => {\n        scriptLoader.add(urlMeta.url).catch(() => {\n          iconsLoadError(editor, urlMeta.url, urlMeta.name.getOrUndefined());\n        });\n      });\n    };\n    const loadPlugins = (editor, suffix) => {\n      const loadPlugin = (name, url) => {\n        PluginManager.load(name, url).catch(() => {\n          pluginLoadError(editor, url, name);\n        });\n      };\n      each$d(getExternalPlugins$1(editor), (url, name) => {\n        loadPlugin(name, url);\n        editor.options.set('plugins', getPlugins(editor).concat(name));\n      });\n      each$e(getPlugins(editor), plugin => {\n        plugin = Tools.trim(plugin);\n        if (plugin && !PluginManager.urls[plugin] && !hasSkipLoadPrefix(plugin)) {\n          loadPlugin(plugin, `plugins/${ plugin }/plugin${ suffix }.js`);\n        }\n      });\n    };\n    const isThemeLoaded = editor => {\n      const theme = getTheme(editor);\n      return !isString(theme) || isNonNullable(ThemeManager.get(theme));\n    };\n    const isModelLoaded = editor => {\n      const model = getModel(editor);\n      return isNonNullable(ModelManager.get(model));\n    };\n    const loadScripts = (editor, suffix) => {\n      const scriptLoader = ScriptLoader.ScriptLoader;\n      const initEditor = () => {\n        if (!editor.removed && isThemeLoaded(editor) && isModelLoaded(editor)) {\n          init(editor);\n        }\n      };\n      loadTheme(editor, suffix);\n      loadModel(editor, suffix);\n      loadLanguage(scriptLoader, editor);\n      loadIcons(scriptLoader, editor, suffix);\n      loadPlugins(editor, suffix);\n      scriptLoader.loadQueue().then(initEditor, initEditor);\n    };\n    const getStyleSheetLoader = (element, editor) => instance.forElement(element, {\n      contentCssCors: hasContentCssCors(editor),\n      referrerPolicy: getReferrerPolicy(editor)\n    });\n    const render = editor => {\n      const id = editor.id;\n      I18n.setCode(getLanguageCode(editor));\n      const readyHandler = () => {\n        DOM$3.unbind(window, 'ready', readyHandler);\n        editor.render();\n      };\n      if (!EventUtils.Event.domLoaded) {\n        DOM$3.bind(window, 'ready', readyHandler);\n        return;\n      }\n      if (!editor.getElement()) {\n        return;\n      }\n      const element = SugarElement.fromDom(editor.getElement());\n      const snapshot = clone$4(element);\n      editor.on('remove', () => {\n        eachr(element.dom.attributes, attr => remove$a(element, attr.name));\n        setAll$1(element, snapshot);\n      });\n      editor.ui.styleSheetLoader = getStyleSheetLoader(element, editor);\n      if (!isInline(editor)) {\n        editor.orgVisibility = editor.getElement().style.visibility;\n        editor.getElement().style.visibility = 'hidden';\n      } else {\n        editor.inline = true;\n      }\n      const form = editor.getElement().form || DOM$3.getParent(id, 'form');\n      if (form) {\n        editor.formElement = form;\n        if (hasHiddenInput(editor) && !isTextareaOrInput(editor.getElement())) {\n          DOM$3.insertAfter(DOM$3.create('input', {\n            type: 'hidden',\n            name: id\n          }), id);\n          editor.hasHiddenInput = true;\n        }\n        editor.formEventDelegate = e => {\n          editor.dispatch(e.type, e);\n        };\n        DOM$3.bind(form, 'submit reset', editor.formEventDelegate);\n        editor.on('reset', () => {\n          editor.resetContent();\n        });\n        if (shouldPatchSubmit(editor) && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) {\n          form._mceOldSubmit = form.submit;\n          form.submit = () => {\n            editor.editorManager.triggerSave();\n            editor.setDirty(false);\n            return form._mceOldSubmit(form);\n          };\n        }\n      }\n      editor.windowManager = WindowManager(editor);\n      editor.notificationManager = NotificationManager(editor);\n      if (isEncodingXml(editor)) {\n        editor.on('GetContent', e => {\n          if (e.save) {\n            e.content = DOM$3.encode(e.content);\n          }\n        });\n      }\n      if (shouldAddFormSubmitTrigger(editor)) {\n        editor.on('submit', () => {\n          if (editor.initialized) {\n            editor.save();\n          }\n        });\n      }\n      if (shouldAddUnloadTrigger(editor)) {\n        editor._beforeUnload = () => {\n          if (editor.initialized && !editor.destroyed && !editor.isHidden()) {\n            editor.save({\n              format: 'raw',\n              no_events: true,\n              set_dirty: false\n            });\n          }\n        };\n        editor.editorManager.on('BeforeUnload', editor._beforeUnload);\n      }\n      editor.editorManager.add(editor);\n      loadScripts(editor, editor.suffix);\n    };\n\n    const setEditableRoot = (editor, state) => {\n      if (editor._editableRoot !== state) {\n        editor._editableRoot = state;\n        if (!editor.readonly) {\n          editor.getBody().contentEditable = String(editor.hasEditableRoot());\n          editor.nodeChanged();\n        }\n        fireEditableRootStateChange(editor, state);\n      }\n    };\n    const hasEditableRoot = editor => editor._editableRoot;\n\n    const sectionResult = (sections, settings) => ({\n      sections: constant(sections),\n      options: constant(settings)\n    });\n    const deviceDetection = detect$2().deviceType;\n    const isPhone = deviceDetection.isPhone();\n    const isTablet = deviceDetection.isTablet();\n    const normalizePlugins = plugins => {\n      if (isNullable(plugins)) {\n        return [];\n      } else {\n        const pluginNames = isArray$1(plugins) ? plugins : plugins.split(/[ ,]/);\n        const trimmedPlugins = map$3(pluginNames, trim$3);\n        return filter$5(trimmedPlugins, isNotEmpty);\n      }\n    };\n    const extractSections = (keys, options) => {\n      const result = bifilter(options, (value, key) => {\n        return contains$2(keys, key);\n      });\n      return sectionResult(result.t, result.f);\n    };\n    const getSection = (sectionResult, name, defaults = {}) => {\n      const sections = sectionResult.sections();\n      const sectionOptions = get$a(sections, name).getOr({});\n      return Tools.extend({}, defaults, sectionOptions);\n    };\n    const hasSection = (sectionResult, name) => {\n      return has$2(sectionResult.sections(), name);\n    };\n    const getSectionConfig = (sectionResult, name) => {\n      return hasSection(sectionResult, name) ? sectionResult.sections()[name] : {};\n    };\n    const getMobileOverrideOptions = (mobileOptions, isPhone) => {\n      const defaultMobileOptions = {\n        table_grid: false,\n        object_resizing: false,\n        resize: false,\n        toolbar_mode: get$a(mobileOptions, 'toolbar_mode').getOr('scrolling'),\n        toolbar_sticky: false\n      };\n      const defaultPhoneOptions = { menubar: false };\n      return {\n        ...defaultMobileOptions,\n        ...isPhone ? defaultPhoneOptions : {}\n      };\n    };\n    const getExternalPlugins = (overrideOptions, options) => {\n      var _a;\n      const userDefinedExternalPlugins = (_a = options.external_plugins) !== null && _a !== void 0 ? _a : {};\n      if (overrideOptions && overrideOptions.external_plugins) {\n        return Tools.extend({}, overrideOptions.external_plugins, userDefinedExternalPlugins);\n      } else {\n        return userDefinedExternalPlugins;\n      }\n    };\n    const combinePlugins = (forcedPlugins, plugins) => [\n      ...normalizePlugins(forcedPlugins),\n      ...normalizePlugins(plugins)\n    ];\n    const getPlatformPlugins = (isMobileDevice, sectionResult, desktopPlugins, mobilePlugins) => {\n      if (isMobileDevice && hasSection(sectionResult, 'mobile')) {\n        return mobilePlugins;\n      } else {\n        return desktopPlugins;\n      }\n    };\n    const processPlugins = (isMobileDevice, sectionResult, defaultOverrideOptions, options) => {\n      const forcedPlugins = normalizePlugins(defaultOverrideOptions.forced_plugins);\n      const desktopPlugins = normalizePlugins(options.plugins);\n      const mobileConfig = getSectionConfig(sectionResult, 'mobile');\n      const mobilePlugins = mobileConfig.plugins ? normalizePlugins(mobileConfig.plugins) : desktopPlugins;\n      const platformPlugins = getPlatformPlugins(isMobileDevice, sectionResult, desktopPlugins, mobilePlugins);\n      const combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);\n      return Tools.extend(options, {\n        forced_plugins: forcedPlugins,\n        plugins: combinedPlugins\n      });\n    };\n    const isOnMobile = (isMobileDevice, sectionResult) => {\n      return isMobileDevice && hasSection(sectionResult, 'mobile');\n    };\n    const combineOptions = (isMobileDevice, isPhone, defaultOptions, defaultOverrideOptions, options) => {\n      var _a;\n      const deviceOverrideOptions = isMobileDevice ? { mobile: getMobileOverrideOptions((_a = options.mobile) !== null && _a !== void 0 ? _a : {}, isPhone) } : {};\n      const sectionResult = extractSections(['mobile'], deepMerge(deviceOverrideOptions, options));\n      const extendedOptions = Tools.extend(defaultOptions, defaultOverrideOptions, sectionResult.options(), isOnMobile(isMobileDevice, sectionResult) ? getSection(sectionResult, 'mobile') : {}, { external_plugins: getExternalPlugins(defaultOverrideOptions, sectionResult.options()) });\n      return processPlugins(isMobileDevice, sectionResult, defaultOverrideOptions, extendedOptions);\n    };\n    const normalizeOptions = (defaultOverrideOptions, options) => combineOptions(isPhone || isTablet, isPhone, options, defaultOverrideOptions, options);\n\n    const addVisual = (editor, elm) => addVisual$1(editor, elm);\n\n    const registerExecCommands$3 = editor => {\n      const toggleFormat = (name, value) => {\n        editor.formatter.toggle(name, value);\n        editor.nodeChanged();\n      };\n      const toggleAlign = align => () => {\n        each$e('left,center,right,justify'.split(','), name => {\n          if (align !== name) {\n            editor.formatter.remove('align' + name);\n          }\n        });\n        if (align !== 'none') {\n          toggleFormat('align' + align);\n        }\n      };\n      editor.editorCommands.addCommands({\n        JustifyLeft: toggleAlign('left'),\n        JustifyCenter: toggleAlign('center'),\n        JustifyRight: toggleAlign('right'),\n        JustifyFull: toggleAlign('justify'),\n        JustifyNone: toggleAlign('none')\n      });\n    };\n    const registerQueryStateCommands$1 = editor => {\n      const alignStates = name => () => {\n        const selection = editor.selection;\n        const nodes = selection.isCollapsed() ? [editor.dom.getParent(selection.getNode(), editor.dom.isBlock)] : selection.getSelectedBlocks();\n        return exists(nodes, node => isNonNullable(editor.formatter.matchNode(node, name)));\n      };\n      editor.editorCommands.addCommands({\n        JustifyLeft: alignStates('alignleft'),\n        JustifyCenter: alignStates('aligncenter'),\n        JustifyRight: alignStates('alignright'),\n        JustifyFull: alignStates('alignjustify')\n      }, 'state');\n    };\n    const registerCommands$a = editor => {\n      registerExecCommands$3(editor);\n      registerQueryStateCommands$1(editor);\n    };\n\n    const registerCommands$9 = editor => {\n      editor.editorCommands.addCommands({\n        'Cut,Copy,Paste': command => {\n          const doc = editor.getDoc();\n          let failed;\n          try {\n            doc.execCommand(command);\n          } catch (ex) {\n            failed = true;\n          }\n          if (command === 'paste' && !doc.queryCommandEnabled(command)) {\n            failed = true;\n          }\n          if (failed || !doc.queryCommandSupported(command)) {\n            let msg = editor.translate(`Your browser doesn't support direct access to the clipboard. ` + 'Please use the Ctrl+X/C/V keyboard shortcuts instead.');\n            if (Env.os.isMacOS() || Env.os.isiOS()) {\n              msg = msg.replace(/Ctrl\\+/g, '\\u2318+');\n            }\n            editor.notificationManager.open({\n              text: msg,\n              type: 'error'\n            });\n          }\n        }\n      });\n    };\n\n    const trimOrPadLeftRight = (dom, rng, html) => {\n      const root = SugarElement.fromDom(dom.getRoot());\n      if (needsToBeNbspLeft(root, CaretPosition.fromRangeStart(rng))) {\n        html = html.replace(/^ /, '&nbsp;');\n      } else {\n        html = html.replace(/^&nbsp;/, ' ');\n      }\n      if (needsToBeNbspRight(root, CaretPosition.fromRangeEnd(rng))) {\n        html = html.replace(/(&nbsp;| )(<br( \\/)>)?$/, '&nbsp;');\n      } else {\n        html = html.replace(/&nbsp;(<br( \\/)?>)?$/, ' ');\n      }\n      return html;\n    };\n\n    const processValue$1 = value => {\n      if (typeof value !== 'string') {\n        const details = Tools.extend({\n          paste: value.paste,\n          data: { paste: value.paste }\n        }, value);\n        return {\n          content: value.content,\n          details\n        };\n      }\n      return {\n        content: value,\n        details: {}\n      };\n    };\n    const trimOrPad = (editor, value) => {\n      const selection = editor.selection;\n      const dom = editor.dom;\n      if (/^ | $/.test(value)) {\n        return trimOrPadLeftRight(dom, selection.getRng(), value);\n      } else {\n        return value;\n      }\n    };\n    const insertAtCaret = (editor, value) => {\n      if (editor.selection.isEditable()) {\n        const {content, details} = processValue$1(value);\n        preProcessSetContent(editor, {\n          ...details,\n          content: trimOrPad(editor, content),\n          format: 'html',\n          set: false,\n          selection: true\n        }).each(args => {\n          const insertedContent = insertContent$1(editor, args.content, details);\n          postProcessSetContent(editor, insertedContent, args);\n          editor.addVisual();\n        });\n      }\n    };\n\n    const registerCommands$8 = editor => {\n      editor.editorCommands.addCommands({\n        mceCleanup: () => {\n          const bm = editor.selection.getBookmark();\n          editor.setContent(editor.getContent());\n          editor.selection.moveToBookmark(bm);\n        },\n        insertImage: (_command, _ui, value) => {\n          insertAtCaret(editor, editor.dom.createHTML('img', { src: value }));\n        },\n        insertHorizontalRule: () => {\n          editor.execCommand('mceInsertContent', false, '<hr>');\n        },\n        insertText: (_command, _ui, value) => {\n          insertAtCaret(editor, editor.dom.encode(value));\n        },\n        insertHTML: (_command, _ui, value) => {\n          insertAtCaret(editor, value);\n        },\n        mceInsertContent: (_command, _ui, value) => {\n          insertAtCaret(editor, value);\n        },\n        mceSetContent: (_command, _ui, value) => {\n          editor.setContent(value);\n        },\n        mceReplaceContent: (_command, _ui, value) => {\n          editor.execCommand('mceInsertContent', false, value.replace(/\\{\\$selection\\}/g, editor.selection.getContent({ format: 'text' })));\n        },\n        mceNewDocument: () => {\n          editor.setContent(getNewDocumentContent(editor));\n        }\n      });\n    };\n\n    const legacyPropNames = {\n      'font-size': 'size',\n      'font-family': 'face'\n    };\n    const isFont = isTag('font');\n    const getSpecifiedFontProp = (propName, rootElm, elm) => {\n      const getProperty = elm => getRaw(elm, propName).orThunk(() => {\n        if (isFont(elm)) {\n          return get$a(legacyPropNames, propName).bind(legacyPropName => getOpt(elm, legacyPropName));\n        } else {\n          return Optional.none();\n        }\n      });\n      const isRoot = elm => eq(SugarElement.fromDom(rootElm), elm);\n      return closest$1(SugarElement.fromDom(elm), elm => getProperty(elm), isRoot);\n    };\n    const normalizeFontFamily = fontFamily => fontFamily.replace(/[\\'\\\"\\\\]/g, '').replace(/,\\s+/g, ',');\n    const getComputedFontProp = (propName, elm) => Optional.from(DOMUtils.DOM.getStyle(elm, propName, true));\n    const getFontProp = propName => (rootElm, elm) => Optional.from(elm).map(SugarElement.fromDom).filter(isElement$7).bind(element => getSpecifiedFontProp(propName, rootElm, element.dom).or(getComputedFontProp(propName, element.dom))).getOr('');\n    const getFontSize = getFontProp('font-size');\n    const getFontFamily = compose(normalizeFontFamily, getFontProp('font-family'));\n\n    const findFirstCaretElement = editor => firstPositionIn(editor.getBody()).bind(caret => {\n      const container = caret.container();\n      return Optional.from(isText$a(container) ? container.parentNode : container);\n    });\n    const getCaretElement = editor => Optional.from(editor.selection.getRng()).bind(rng => {\n      const root = editor.getBody();\n      const atStartOfNode = rng.startContainer === root && rng.startOffset === 0;\n      return atStartOfNode ? Optional.none() : Optional.from(editor.selection.getStart(true));\n    });\n    const bindRange = (editor, binder) => getCaretElement(editor).orThunk(curry(findFirstCaretElement, editor)).map(SugarElement.fromDom).filter(isElement$7).bind(binder);\n    const mapRange = (editor, mapper) => bindRange(editor, compose1(Optional.some, mapper));\n\n    const fromFontSizeNumber = (editor, value) => {\n      if (/^[0-9.]+$/.test(value)) {\n        const fontSizeNumber = parseInt(value, 10);\n        if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {\n          const fontSizes = getFontStyleValues(editor);\n          const fontClasses = getFontSizeClasses(editor);\n          if (fontClasses.length > 0) {\n            return fontClasses[fontSizeNumber - 1] || value;\n          } else {\n            return fontSizes[fontSizeNumber - 1] || value;\n          }\n        } else {\n          return value;\n        }\n      } else {\n        return value;\n      }\n    };\n    const normalizeFontNames = font => {\n      const fonts = font.split(/\\s*,\\s*/);\n      return map$3(fonts, font => {\n        if (font.indexOf(' ') !== -1 && !(startsWith(font, '\"') || startsWith(font, `'`))) {\n          return `'${ font }'`;\n        } else {\n          return font;\n        }\n      }).join(',');\n    };\n    const fontNameAction = (editor, value) => {\n      const font = fromFontSizeNumber(editor, value);\n      editor.formatter.toggle('fontname', { value: normalizeFontNames(font) });\n      editor.nodeChanged();\n    };\n    const fontNameQuery = editor => mapRange(editor, elm => getFontFamily(editor.getBody(), elm.dom)).getOr('');\n    const fontSizeAction = (editor, value) => {\n      editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });\n      editor.nodeChanged();\n    };\n    const fontSizeQuery = editor => mapRange(editor, elm => getFontSize(editor.getBody(), elm.dom)).getOr('');\n\n    const lineHeightQuery = editor => mapRange(editor, elm => {\n      const root = SugarElement.fromDom(editor.getBody());\n      const specifiedStyle = closest$1(elm, elm => getRaw(elm, 'line-height'), curry(eq, root));\n      const computedStyle = () => {\n        const lineHeight = parseFloat(get$7(elm, 'line-height'));\n        const fontSize = parseFloat(get$7(elm, 'font-size'));\n        return String(lineHeight / fontSize);\n      };\n      return specifiedStyle.getOrThunk(computedStyle);\n    }).getOr('');\n    const lineHeightAction = (editor, lineHeight) => {\n      editor.formatter.toggle('lineheight', { value: String(lineHeight) });\n      editor.nodeChanged();\n    };\n\n    const registerExecCommands$2 = editor => {\n      const toggleFormat = (name, value) => {\n        editor.formatter.toggle(name, value);\n        editor.nodeChanged();\n      };\n      editor.editorCommands.addCommands({\n        'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': command => {\n          toggleFormat(command);\n        },\n        'ForeColor,HiliteColor': (command, _ui, value) => {\n          toggleFormat(command, { value });\n        },\n        'BackColor': (_command, _ui, value) => {\n          toggleFormat('hilitecolor', { value });\n        },\n        'FontName': (_command, _ui, value) => {\n          fontNameAction(editor, value);\n        },\n        'FontSize': (_command, _ui, value) => {\n          fontSizeAction(editor, value);\n        },\n        'LineHeight': (_command, _ui, value) => {\n          lineHeightAction(editor, value);\n        },\n        'Lang': (command, _ui, lang) => {\n          var _a;\n          toggleFormat(command, {\n            value: lang.code,\n            customValue: (_a = lang.customCode) !== null && _a !== void 0 ? _a : null\n          });\n        },\n        'RemoveFormat': command => {\n          editor.formatter.remove(command);\n        },\n        'mceBlockQuote': () => {\n          toggleFormat('blockquote');\n        },\n        'FormatBlock': (_command, _ui, value) => {\n          toggleFormat(isString(value) ? value : 'p');\n        },\n        'mceToggleFormat': (_command, _ui, value) => {\n          toggleFormat(value);\n        }\n      });\n    };\n    const registerQueryValueCommands = editor => {\n      const isFormatMatch = name => editor.formatter.match(name);\n      editor.editorCommands.addCommands({\n        'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': command => isFormatMatch(command),\n        'mceBlockQuote': () => isFormatMatch('blockquote')\n      }, 'state');\n      editor.editorCommands.addQueryValueHandler('FontName', () => fontNameQuery(editor));\n      editor.editorCommands.addQueryValueHandler('FontSize', () => fontSizeQuery(editor));\n      editor.editorCommands.addQueryValueHandler('LineHeight', () => lineHeightQuery(editor));\n    };\n    const registerCommands$7 = editor => {\n      registerExecCommands$2(editor);\n      registerQueryValueCommands(editor);\n    };\n\n    const registerCommands$6 = editor => {\n      editor.editorCommands.addCommands({\n        mceAddUndoLevel: () => {\n          editor.undoManager.add();\n        },\n        mceEndUndoLevel: () => {\n          editor.undoManager.add();\n        },\n        Undo: () => {\n          editor.undoManager.undo();\n        },\n        Redo: () => {\n          editor.undoManager.redo();\n        }\n      });\n    };\n\n    const registerCommands$5 = editor => {\n      editor.editorCommands.addCommands({\n        Indent: () => {\n          indent(editor);\n        },\n        Outdent: () => {\n          outdent(editor);\n        }\n      });\n      editor.editorCommands.addCommands({ Outdent: () => canOutdent(editor) }, 'state');\n    };\n\n    const registerCommands$4 = editor => {\n      const applyLinkToSelection = (_command, _ui, value) => {\n        const linkDetails = isString(value) ? { href: value } : value;\n        const anchor = editor.dom.getParent(editor.selection.getNode(), 'a');\n        if (isObject(linkDetails) && isString(linkDetails.href)) {\n          linkDetails.href = linkDetails.href.replace(/ /g, '%20');\n          if (!anchor || !linkDetails.href) {\n            editor.formatter.remove('link');\n          }\n          if (linkDetails.href) {\n            editor.formatter.apply('link', linkDetails, anchor);\n          }\n        }\n      };\n      editor.editorCommands.addCommands({\n        unlink: () => {\n          if (editor.selection.isEditable()) {\n            if (editor.selection.isCollapsed()) {\n              const elm = editor.dom.getParent(editor.selection.getStart(), 'a');\n              if (elm) {\n                editor.dom.remove(elm, true);\n              }\n              return;\n            }\n            editor.formatter.remove('link');\n          }\n        },\n        mceInsertLink: applyLinkToSelection,\n        createLink: applyLinkToSelection\n      });\n    };\n\n    const registerExecCommands$1 = editor => {\n      editor.editorCommands.addCommands({\n        'InsertUnorderedList,InsertOrderedList': command => {\n          editor.getDoc().execCommand(command);\n          const listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n          if (listElm) {\n            const listParent = listElm.parentNode;\n            if (listParent && /^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {\n              const bm = editor.selection.getBookmark();\n              editor.dom.split(listParent, listElm);\n              editor.selection.moveToBookmark(bm);\n            }\n          }\n        }\n      });\n    };\n    const registerQueryStateCommands = editor => {\n      editor.editorCommands.addCommands({\n        'InsertUnorderedList,InsertOrderedList': command => {\n          const list = editor.dom.getParent(editor.selection.getNode(), 'ul,ol');\n          return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL');\n        }\n      }, 'state');\n    };\n    const registerCommands$3 = editor => {\n      registerExecCommands$1(editor);\n      registerQueryStateCommands(editor);\n    };\n\n    const registerCommands$2 = editor => {\n      editor.editorCommands.addCommands({\n        insertParagraph: () => {\n          insertBreak(blockbreak, editor);\n        },\n        mceInsertNewLine: (_command, _ui, value) => {\n          insert(editor, value);\n        },\n        InsertLineBreak: (_command, _ui, _value) => {\n          insertBreak(linebreak, editor);\n        }\n      });\n    };\n\n    const registerCommands$1 = editor => {\n      editor.editorCommands.addCommands({\n        mceSelectNodeDepth: (_command, _ui, value) => {\n          let counter = 0;\n          editor.dom.getParent(editor.selection.getNode(), node => {\n            if (isElement$6(node) && counter++ === value) {\n              editor.selection.select(node);\n              return false;\n            } else {\n              return true;\n            }\n          }, editor.getBody());\n        },\n        mceSelectNode: (_command, _ui, value) => {\n          editor.selection.select(value);\n        },\n        selectAll: () => {\n          const editingHost = editor.dom.getParent(editor.selection.getStart(), isContentEditableTrue$3);\n          if (editingHost) {\n            const rng = editor.dom.createRng();\n            rng.selectNodeContents(editingHost);\n            editor.selection.setRng(rng);\n          }\n        }\n      });\n    };\n\n    const registerExecCommands = editor => {\n      editor.editorCommands.addCommands({\n        mceRemoveNode: (_command, _ui, value) => {\n          const node = value !== null && value !== void 0 ? value : editor.selection.getNode();\n          if (node !== editor.getBody()) {\n            const bm = editor.selection.getBookmark();\n            editor.dom.remove(node, true);\n            editor.selection.moveToBookmark(bm);\n          }\n        },\n        mcePrint: () => {\n          editor.getWin().print();\n        },\n        mceFocus: (_command, _ui, value) => {\n          focus(editor, value === true);\n        },\n        mceToggleVisualAid: () => {\n          editor.hasVisual = !editor.hasVisual;\n          editor.addVisual();\n        }\n      });\n    };\n    const registerCommands = editor => {\n      registerCommands$a(editor);\n      registerCommands$9(editor);\n      registerCommands$6(editor);\n      registerCommands$1(editor);\n      registerCommands$8(editor);\n      registerCommands$4(editor);\n      registerCommands$5(editor);\n      registerCommands$2(editor);\n      registerCommands$3(editor);\n      registerCommands$7(editor);\n      registerExecCommands(editor);\n    };\n\n    const selectionSafeCommands = ['toggleview'];\n    const isSelectionSafeCommand = command => contains$2(selectionSafeCommands, command.toLowerCase());\n    class EditorCommands {\n      constructor(editor) {\n        this.commands = {\n          state: {},\n          exec: {},\n          value: {}\n        };\n        this.editor = editor;\n      }\n      execCommand(command, ui = false, value, args) {\n        const editor = this.editor;\n        const lowerCaseCommand = command.toLowerCase();\n        const skipFocus = args === null || args === void 0 ? void 0 : args.skip_focus;\n        if (editor.removed) {\n          return false;\n        }\n        if (lowerCaseCommand !== 'mcefocus') {\n          if (!/^(mceAddUndoLevel|mceEndUndoLevel)$/i.test(lowerCaseCommand) && !skipFocus) {\n            editor.focus();\n          } else {\n            restore(editor);\n          }\n        }\n        const eventArgs = editor.dispatch('BeforeExecCommand', {\n          command,\n          ui,\n          value\n        });\n        if (eventArgs.isDefaultPrevented()) {\n          return false;\n        }\n        const func = this.commands.exec[lowerCaseCommand];\n        if (isFunction(func)) {\n          func(lowerCaseCommand, ui, value);\n          editor.dispatch('ExecCommand', {\n            command,\n            ui,\n            value\n          });\n          return true;\n        }\n        return false;\n      }\n      queryCommandState(command) {\n        if (!isSelectionSafeCommand(command) && this.editor.quirks.isHidden() || this.editor.removed) {\n          return false;\n        }\n        const lowerCaseCommand = command.toLowerCase();\n        const func = this.commands.state[lowerCaseCommand];\n        if (isFunction(func)) {\n          return func(lowerCaseCommand);\n        }\n        return false;\n      }\n      queryCommandValue(command) {\n        if (!isSelectionSafeCommand(command) && this.editor.quirks.isHidden() || this.editor.removed) {\n          return '';\n        }\n        const lowerCaseCommand = command.toLowerCase();\n        const func = this.commands.value[lowerCaseCommand];\n        if (isFunction(func)) {\n          return func(lowerCaseCommand);\n        }\n        return '';\n      }\n      addCommands(commandList, type = 'exec') {\n        const commands = this.commands;\n        each$d(commandList, (callback, command) => {\n          each$e(command.toLowerCase().split(','), command => {\n            commands[type][command] = callback;\n          });\n        });\n      }\n      addCommand(command, callback, scope) {\n        const lowerCaseCommand = command.toLowerCase();\n        this.commands.exec[lowerCaseCommand] = (_command, ui, value) => callback.call(scope !== null && scope !== void 0 ? scope : this.editor, ui, value);\n      }\n      queryCommandSupported(command) {\n        const lowerCaseCommand = command.toLowerCase();\n        if (this.commands.exec[lowerCaseCommand]) {\n          return true;\n        } else {\n          return false;\n        }\n      }\n      addQueryStateHandler(command, callback, scope) {\n        this.commands.state[command.toLowerCase()] = () => callback.call(scope !== null && scope !== void 0 ? scope : this.editor);\n      }\n      addQueryValueHandler(command, callback, scope) {\n        this.commands.value[command.toLowerCase()] = () => callback.call(scope !== null && scope !== void 0 ? scope : this.editor);\n      }\n    }\n\n    const internalContentEditableAttr = 'data-mce-contenteditable';\n    const toggleClass = (elm, cls, state) => {\n      if (has(elm, cls) && !state) {\n        remove$7(elm, cls);\n      } else if (state) {\n        add$2(elm, cls);\n      }\n    };\n    const setEditorCommandState = (editor, cmd, state) => {\n      try {\n        editor.getDoc().execCommand(cmd, false, String(state));\n      } catch (ex) {\n      }\n    };\n    const setContentEditable = (elm, state) => {\n      elm.dom.contentEditable = state ? 'true' : 'false';\n    };\n    const switchOffContentEditableTrue = elm => {\n      each$e(descendants(elm, '*[contenteditable=\"true\"]'), elm => {\n        set$3(elm, internalContentEditableAttr, 'true');\n        setContentEditable(elm, false);\n      });\n    };\n    const switchOnContentEditableTrue = elm => {\n      each$e(descendants(elm, `*[${ internalContentEditableAttr }=\"true\"]`), elm => {\n        remove$a(elm, internalContentEditableAttr);\n        setContentEditable(elm, true);\n      });\n    };\n    const removeFakeSelection = editor => {\n      Optional.from(editor.selection.getNode()).each(elm => {\n        elm.removeAttribute('data-mce-selected');\n      });\n    };\n    const restoreFakeSelection = editor => {\n      editor.selection.setRng(editor.selection.getRng());\n    };\n    const toggleReadOnly = (editor, state) => {\n      const body = SugarElement.fromDom(editor.getBody());\n      toggleClass(body, 'mce-content-readonly', state);\n      if (state) {\n        editor.selection.controlSelection.hideResizeRect();\n        editor._selectionOverrides.hideFakeCaret();\n        removeFakeSelection(editor);\n        editor.readonly = true;\n        setContentEditable(body, false);\n        switchOffContentEditableTrue(body);\n      } else {\n        editor.readonly = false;\n        if (editor.hasEditableRoot()) {\n          setContentEditable(body, true);\n        }\n        switchOnContentEditableTrue(body);\n        setEditorCommandState(editor, 'StyleWithCSS', false);\n        setEditorCommandState(editor, 'enableInlineTableEditing', false);\n        setEditorCommandState(editor, 'enableObjectResizing', false);\n        if (hasEditorOrUiFocus(editor)) {\n          editor.focus();\n        }\n        restoreFakeSelection(editor);\n        editor.nodeChanged();\n      }\n    };\n    const isReadOnly = editor => editor.readonly;\n    const registerFilters = editor => {\n      editor.parser.addAttributeFilter('contenteditable', nodes => {\n        if (isReadOnly(editor)) {\n          each$e(nodes, node => {\n            node.attr(internalContentEditableAttr, node.attr('contenteditable'));\n            node.attr('contenteditable', 'false');\n          });\n        }\n      });\n      editor.serializer.addAttributeFilter(internalContentEditableAttr, nodes => {\n        if (isReadOnly(editor)) {\n          each$e(nodes, node => {\n            node.attr('contenteditable', node.attr(internalContentEditableAttr));\n          });\n        }\n      });\n      editor.serializer.addTempAttr(internalContentEditableAttr);\n    };\n    const registerReadOnlyContentFilters = editor => {\n      if (editor.serializer) {\n        registerFilters(editor);\n      } else {\n        editor.on('PreInit', () => {\n          registerFilters(editor);\n        });\n      }\n    };\n    const isClickEvent = e => e.type === 'click';\n    const allowedEvents = ['copy'];\n    const isReadOnlyAllowedEvent = e => contains$2(allowedEvents, e.type);\n    const getAnchorHrefOpt = (editor, elm) => {\n      const isRoot = elm => eq(elm, SugarElement.fromDom(editor.getBody()));\n      return closest$3(elm, 'a', isRoot).bind(a => getOpt(a, 'href'));\n    };\n    const processReadonlyEvents = (editor, e) => {\n      if (isClickEvent(e) && !VK.metaKeyPressed(e)) {\n        const elm = SugarElement.fromDom(e.target);\n        getAnchorHrefOpt(editor, elm).each(href => {\n          e.preventDefault();\n          if (/^#/.test(href)) {\n            const targetEl = editor.dom.select(`${ href },[name=\"${ removeLeading(href, '#') }\"]`);\n            if (targetEl.length) {\n              editor.selection.scrollIntoView(targetEl[0], true);\n            }\n          } else {\n            window.open(href, '_blank', 'rel=noopener noreferrer,menubar=yes,toolbar=yes,location=yes,status=yes,resizable=yes,scrollbars=yes');\n          }\n        });\n      } else if (isReadOnlyAllowedEvent(e)) {\n        editor.dispatch(e.type, e);\n      }\n    };\n    const registerReadOnlySelectionBlockers = editor => {\n      editor.on('ShowCaret', e => {\n        if (isReadOnly(editor)) {\n          e.preventDefault();\n        }\n      });\n      editor.on('ObjectSelected', e => {\n        if (isReadOnly(editor)) {\n          e.preventDefault();\n        }\n      });\n    };\n\n    const nativeEvents = Tools.makeMap('focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange ' + 'mouseout mouseenter mouseleave wheel keydown keypress keyup input beforeinput contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend touchcancel', ' ');\n    class EventDispatcher {\n      static isNative(name) {\n        return !!nativeEvents[name.toLowerCase()];\n      }\n      constructor(settings) {\n        this.bindings = {};\n        this.settings = settings || {};\n        this.scope = this.settings.scope || this;\n        this.toggleEvent = this.settings.toggleEvent || never;\n      }\n      fire(name, args) {\n        return this.dispatch(name, args);\n      }\n      dispatch(name, args) {\n        const lcName = name.toLowerCase();\n        const event = normalize$3(lcName, args !== null && args !== void 0 ? args : {}, this.scope);\n        if (this.settings.beforeFire) {\n          this.settings.beforeFire(event);\n        }\n        const handlers = this.bindings[lcName];\n        if (handlers) {\n          for (let i = 0, l = handlers.length; i < l; i++) {\n            const callback = handlers[i];\n            if (callback.removed) {\n              continue;\n            }\n            if (callback.once) {\n              this.off(lcName, callback.func);\n            }\n            if (event.isImmediatePropagationStopped()) {\n              return event;\n            }\n            if (callback.func.call(this.scope, event) === false) {\n              event.preventDefault();\n              return event;\n            }\n          }\n        }\n        return event;\n      }\n      on(name, callback, prepend, extra) {\n        if (callback === false) {\n          callback = never;\n        }\n        if (callback) {\n          const wrappedCallback = {\n            func: callback,\n            removed: false\n          };\n          if (extra) {\n            Tools.extend(wrappedCallback, extra);\n          }\n          const names = name.toLowerCase().split(' ');\n          let i = names.length;\n          while (i--) {\n            const currentName = names[i];\n            let handlers = this.bindings[currentName];\n            if (!handlers) {\n              handlers = [];\n              this.toggleEvent(currentName, true);\n            }\n            if (prepend) {\n              handlers = [\n                wrappedCallback,\n                ...handlers\n              ];\n            } else {\n              handlers = [\n                ...handlers,\n                wrappedCallback\n              ];\n            }\n            this.bindings[currentName] = handlers;\n          }\n        }\n        return this;\n      }\n      off(name, callback) {\n        if (name) {\n          const names = name.toLowerCase().split(' ');\n          let i = names.length;\n          while (i--) {\n            const currentName = names[i];\n            let handlers = this.bindings[currentName];\n            if (!currentName) {\n              each$d(this.bindings, (_value, bindingName) => {\n                this.toggleEvent(bindingName, false);\n                delete this.bindings[bindingName];\n              });\n              return this;\n            }\n            if (handlers) {\n              if (!callback) {\n                handlers.length = 0;\n              } else {\n                const filteredHandlers = partition$2(handlers, handler => handler.func === callback);\n                handlers = filteredHandlers.fail;\n                this.bindings[currentName] = handlers;\n                each$e(filteredHandlers.pass, handler => {\n                  handler.removed = true;\n                });\n              }\n              if (!handlers.length) {\n                this.toggleEvent(name, false);\n                delete this.bindings[currentName];\n              }\n            }\n          }\n        } else {\n          each$d(this.bindings, (_value, name) => {\n            this.toggleEvent(name, false);\n          });\n          this.bindings = {};\n        }\n        return this;\n      }\n      once(name, callback, prepend) {\n        return this.on(name, callback, prepend, { once: true });\n      }\n      has(name) {\n        name = name.toLowerCase();\n        const binding = this.bindings[name];\n        return !(!binding || binding.length === 0);\n      }\n    }\n\n    const getEventDispatcher = obj => {\n      if (!obj._eventDispatcher) {\n        obj._eventDispatcher = new EventDispatcher({\n          scope: obj,\n          toggleEvent: (name, state) => {\n            if (EventDispatcher.isNative(name) && obj.toggleNativeEvent) {\n              obj.toggleNativeEvent(name, state);\n            }\n          }\n        });\n      }\n      return obj._eventDispatcher;\n    };\n    const Observable = {\n      fire(name, args, bubble) {\n        return this.dispatch(name, args, bubble);\n      },\n      dispatch(name, args, bubble) {\n        const self = this;\n        if (self.removed && name !== 'remove' && name !== 'detach') {\n          return normalize$3(name.toLowerCase(), args !== null && args !== void 0 ? args : {}, self);\n        }\n        const dispatcherArgs = getEventDispatcher(self).dispatch(name, args);\n        if (bubble !== false && self.parent) {\n          let parent = self.parent();\n          while (parent && !dispatcherArgs.isPropagationStopped()) {\n            parent.dispatch(name, dispatcherArgs, false);\n            parent = parent.parent ? parent.parent() : undefined;\n          }\n        }\n        return dispatcherArgs;\n      },\n      on(name, callback, prepend) {\n        return getEventDispatcher(this).on(name, callback, prepend);\n      },\n      off(name, callback) {\n        return getEventDispatcher(this).off(name, callback);\n      },\n      once(name, callback) {\n        return getEventDispatcher(this).once(name, callback);\n      },\n      hasEventListeners(name) {\n        return getEventDispatcher(this).has(name);\n      }\n    };\n\n    const DOM$2 = DOMUtils.DOM;\n    let customEventRootDelegates;\n    const getEventTarget = (editor, eventName) => {\n      if (eventName === 'selectionchange') {\n        return editor.getDoc();\n      }\n      if (!editor.inline && /^(?:mouse|touch|click|contextmenu|drop|dragover|dragend)/.test(eventName)) {\n        return editor.getDoc().documentElement;\n      }\n      const eventRoot = getEventRoot(editor);\n      if (eventRoot) {\n        if (!editor.eventRoot) {\n          editor.eventRoot = DOM$2.select(eventRoot)[0];\n        }\n        return editor.eventRoot;\n      }\n      return editor.getBody();\n    };\n    const isListening = editor => !editor.hidden && !isReadOnly(editor);\n    const fireEvent = (editor, eventName, e) => {\n      if (isListening(editor)) {\n        editor.dispatch(eventName, e);\n      } else if (isReadOnly(editor)) {\n        processReadonlyEvents(editor, e);\n      }\n    };\n    const bindEventDelegate = (editor, eventName) => {\n      if (!editor.delegates) {\n        editor.delegates = {};\n      }\n      if (editor.delegates[eventName] || editor.removed) {\n        return;\n      }\n      const eventRootElm = getEventTarget(editor, eventName);\n      if (getEventRoot(editor)) {\n        if (!customEventRootDelegates) {\n          customEventRootDelegates = {};\n          editor.editorManager.on('removeEditor', () => {\n            if (!editor.editorManager.activeEditor) {\n              if (customEventRootDelegates) {\n                each$d(customEventRootDelegates, (_value, name) => {\n                  editor.dom.unbind(getEventTarget(editor, name));\n                });\n                customEventRootDelegates = null;\n              }\n            }\n          });\n        }\n        if (customEventRootDelegates[eventName]) {\n          return;\n        }\n        const delegate = e => {\n          const target = e.target;\n          const editors = editor.editorManager.get();\n          let i = editors.length;\n          while (i--) {\n            const body = editors[i].getBody();\n            if (body === target || DOM$2.isChildOf(target, body)) {\n              fireEvent(editors[i], eventName, e);\n            }\n          }\n        };\n        customEventRootDelegates[eventName] = delegate;\n        DOM$2.bind(eventRootElm, eventName, delegate);\n      } else {\n        const delegate = e => {\n          fireEvent(editor, eventName, e);\n        };\n        DOM$2.bind(eventRootElm, eventName, delegate);\n        editor.delegates[eventName] = delegate;\n      }\n    };\n    const EditorObservable = {\n      ...Observable,\n      bindPendingEventDelegates() {\n        const self = this;\n        Tools.each(self._pendingNativeEvents, name => {\n          bindEventDelegate(self, name);\n        });\n      },\n      toggleNativeEvent(name, state) {\n        const self = this;\n        if (name === 'focus' || name === 'blur') {\n          return;\n        }\n        if (self.removed) {\n          return;\n        }\n        if (state) {\n          if (self.initialized) {\n            bindEventDelegate(self, name);\n          } else {\n            if (!self._pendingNativeEvents) {\n              self._pendingNativeEvents = [name];\n            } else {\n              self._pendingNativeEvents.push(name);\n            }\n          }\n        } else if (self.initialized && self.delegates) {\n          self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\n          delete self.delegates[name];\n        }\n      },\n      unbindAllNativeEvents() {\n        const self = this;\n        const body = self.getBody();\n        const dom = self.dom;\n        if (self.delegates) {\n          each$d(self.delegates, (value, name) => {\n            self.dom.unbind(getEventTarget(self, name), name, value);\n          });\n          delete self.delegates;\n        }\n        if (!self.inline && body && dom) {\n          body.onload = null;\n          dom.unbind(self.getWin());\n          dom.unbind(self.getDoc());\n        }\n        if (dom) {\n          dom.unbind(body);\n          dom.unbind(self.getContainer());\n        }\n      }\n    };\n\n    const stringListProcessor = value => {\n      if (isString(value)) {\n        return {\n          value: value.split(/[ ,]/),\n          valid: true\n        };\n      } else if (isArrayOf(value, isString)) {\n        return {\n          value,\n          valid: true\n        };\n      } else {\n        return {\n          valid: false,\n          message: `The value must be a string[] or a comma/space separated string.`\n        };\n      }\n    };\n    const getBuiltInProcessor = type => {\n      const validator = (() => {\n        switch (type) {\n        case 'array':\n          return isArray$1;\n        case 'boolean':\n          return isBoolean;\n        case 'function':\n          return isFunction;\n        case 'number':\n          return isNumber;\n        case 'object':\n          return isObject;\n        case 'string':\n          return isString;\n        case 'string[]':\n          return stringListProcessor;\n        case 'object[]':\n          return val => isArrayOf(val, isObject);\n        case 'regexp':\n          return val => is$4(val, RegExp);\n        default:\n          return always;\n        }\n      })();\n      return value => processValue(value, validator, `The value must be a ${ type }.`);\n    };\n    const isBuiltInSpec = spec => isString(spec.processor);\n    const getErrorMessage = (message, result) => {\n      const additionalText = isEmpty$3(result.message) ? '' : `. ${ result.message }`;\n      return message + additionalText;\n    };\n    const isValidResult = result => result.valid;\n    const processValue = (value, processor, message = '') => {\n      const result = processor(value);\n      if (isBoolean(result)) {\n        return result ? {\n          value: value,\n          valid: true\n        } : {\n          valid: false,\n          message\n        };\n      } else {\n        return result;\n      }\n    };\n    const processDefaultValue = (name, defaultValue, processor) => {\n      if (!isUndefined(defaultValue)) {\n        const result = processValue(defaultValue, processor);\n        if (isValidResult(result)) {\n          return result.value;\n        } else {\n          console.error(getErrorMessage(`Invalid default value passed for the \"${ name }\" option`, result));\n        }\n      }\n      return undefined;\n    };\n    const create$5 = (editor, initialOptions) => {\n      const registry = {};\n      const values = {};\n      const setValue = (name, value, processor) => {\n        const result = processValue(value, processor);\n        if (isValidResult(result)) {\n          values[name] = result.value;\n          return true;\n        } else {\n          console.warn(getErrorMessage(`Invalid value passed for the ${ name } option`, result));\n          return false;\n        }\n      };\n      const register = (name, spec) => {\n        const processor = isBuiltInSpec(spec) ? getBuiltInProcessor(spec.processor) : spec.processor;\n        const defaultValue = processDefaultValue(name, spec.default, processor);\n        registry[name] = {\n          ...spec,\n          default: defaultValue,\n          processor\n        };\n        const initValue = get$a(values, name).orThunk(() => get$a(initialOptions, name));\n        initValue.each(value => setValue(name, value, processor));\n      };\n      const isRegistered = name => has$2(registry, name);\n      const get = name => get$a(values, name).orThunk(() => get$a(registry, name).map(spec => spec.default)).getOrUndefined();\n      const set = (name, value) => {\n        if (!isRegistered(name)) {\n          console.warn(`\"${ name }\" is not a registered option. Ensure the option has been registered before setting a value.`);\n          return false;\n        } else {\n          const spec = registry[name];\n          if (spec.immutable) {\n            console.error(`\"${ name }\" is an immutable option and cannot be updated`);\n            return false;\n          } else {\n            return setValue(name, value, spec.processor);\n          }\n        }\n      };\n      const unset = name => {\n        const registered = isRegistered(name);\n        if (registered) {\n          delete values[name];\n        }\n        return registered;\n      };\n      const isSet = name => has$2(values, name);\n      return {\n        register,\n        isRegistered,\n        get,\n        set,\n        unset,\n        isSet\n      };\n    };\n\n    const defaultModes = [\n      'design',\n      'readonly'\n    ];\n    const switchToMode = (editor, activeMode, availableModes, mode) => {\n      const oldMode = availableModes[activeMode.get()];\n      const newMode = availableModes[mode];\n      try {\n        newMode.activate();\n      } catch (e) {\n        console.error(`problem while activating editor mode ${ mode }:`, e);\n        return;\n      }\n      oldMode.deactivate();\n      if (oldMode.editorReadOnly !== newMode.editorReadOnly) {\n        toggleReadOnly(editor, newMode.editorReadOnly);\n      }\n      activeMode.set(mode);\n      fireSwitchMode(editor, mode);\n    };\n    const setMode = (editor, availableModes, activeMode, mode) => {\n      if (mode === activeMode.get()) {\n        return;\n      } else if (!has$2(availableModes, mode)) {\n        throw new Error(`Editor mode '${ mode }' is invalid`);\n      }\n      if (editor.initialized) {\n        switchToMode(editor, activeMode, availableModes, mode);\n      } else {\n        editor.on('init', () => switchToMode(editor, activeMode, availableModes, mode));\n      }\n    };\n    const registerMode = (availableModes, mode, api) => {\n      if (contains$2(defaultModes, mode)) {\n        throw new Error(`Cannot override default mode ${ mode }`);\n      }\n      return {\n        ...availableModes,\n        [mode]: {\n          ...api,\n          deactivate: () => {\n            try {\n              api.deactivate();\n            } catch (e) {\n              console.error(`problem while deactivating editor mode ${ mode }:`, e);\n            }\n          }\n        }\n      };\n    };\n\n    const create$4 = editor => {\n      const activeMode = Cell('design');\n      const availableModes = Cell({\n        design: {\n          activate: noop,\n          deactivate: noop,\n          editorReadOnly: false\n        },\n        readonly: {\n          activate: noop,\n          deactivate: noop,\n          editorReadOnly: true\n        }\n      });\n      registerReadOnlyContentFilters(editor);\n      registerReadOnlySelectionBlockers(editor);\n      return {\n        isReadOnly: () => isReadOnly(editor),\n        set: mode => setMode(editor, availableModes.get(), activeMode, mode),\n        get: () => activeMode.get(),\n        register: (mode, api) => {\n          availableModes.set(registerMode(availableModes.get(), mode, api));\n        }\n      };\n    };\n\n    const each$2 = Tools.each, explode = Tools.explode;\n    const keyCodeLookup = {\n      f1: 112,\n      f2: 113,\n      f3: 114,\n      f4: 115,\n      f5: 116,\n      f6: 117,\n      f7: 118,\n      f8: 119,\n      f9: 120,\n      f10: 121,\n      f11: 122,\n      f12: 123\n    };\n    const modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');\n    const isModifier = key => key in modifierNames;\n    const parseShortcut = pattern => {\n      const shortcut = {};\n      const isMac = Env.os.isMacOS() || Env.os.isiOS();\n      each$2(explode(pattern.toLowerCase(), '+'), value => {\n        if (isModifier(value)) {\n          shortcut[value] = true;\n        } else {\n          if (/^[0-9]{2,}$/.test(value)) {\n            shortcut.keyCode = parseInt(value, 10);\n          } else {\n            shortcut.charCode = value.charCodeAt(0);\n            shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0);\n          }\n        }\n      });\n      const id = [shortcut.keyCode];\n      let key;\n      for (key in modifierNames) {\n        if (shortcut[key]) {\n          id.push(key);\n        } else {\n          shortcut[key] = false;\n        }\n      }\n      shortcut.id = id.join(',');\n      if (shortcut.access) {\n        shortcut.alt = true;\n        if (isMac) {\n          shortcut.ctrl = true;\n        } else {\n          shortcut.shift = true;\n        }\n      }\n      if (shortcut.meta) {\n        if (isMac) {\n          shortcut.meta = true;\n        } else {\n          shortcut.ctrl = true;\n          shortcut.meta = false;\n        }\n      }\n      return shortcut;\n    };\n    class Shortcuts {\n      constructor(editor) {\n        this.shortcuts = {};\n        this.pendingPatterns = [];\n        this.editor = editor;\n        const self = this;\n        editor.on('keyup keypress keydown', e => {\n          if ((self.hasModifier(e) || self.isFunctionKey(e)) && !e.isDefaultPrevented()) {\n            each$2(self.shortcuts, shortcut => {\n              if (self.matchShortcut(e, shortcut)) {\n                self.pendingPatterns = shortcut.subpatterns.slice(0);\n                if (e.type === 'keydown') {\n                  self.executeShortcutAction(shortcut);\n                }\n              }\n            });\n            if (self.matchShortcut(e, self.pendingPatterns[0])) {\n              if (self.pendingPatterns.length === 1) {\n                if (e.type === 'keydown') {\n                  self.executeShortcutAction(self.pendingPatterns[0]);\n                }\n              }\n              self.pendingPatterns.shift();\n            }\n          }\n        });\n      }\n      add(pattern, desc, cmdFunc, scope) {\n        const self = this;\n        const func = self.normalizeCommandFunc(cmdFunc);\n        each$2(explode(Tools.trim(pattern)), pattern => {\n          const shortcut = self.createShortcut(pattern, desc, func, scope);\n          self.shortcuts[shortcut.id] = shortcut;\n        });\n        return true;\n      }\n      remove(pattern) {\n        const shortcut = this.createShortcut(pattern);\n        if (this.shortcuts[shortcut.id]) {\n          delete this.shortcuts[shortcut.id];\n          return true;\n        }\n        return false;\n      }\n      normalizeCommandFunc(cmdFunc) {\n        const self = this;\n        const cmd = cmdFunc;\n        if (typeof cmd === 'string') {\n          return () => {\n            self.editor.execCommand(cmd, false, null);\n          };\n        } else if (Tools.isArray(cmd)) {\n          return () => {\n            self.editor.execCommand(cmd[0], cmd[1], cmd[2]);\n          };\n        } else {\n          return cmd;\n        }\n      }\n      createShortcut(pattern, desc, cmdFunc, scope) {\n        const shortcuts = Tools.map(explode(pattern, '>'), parseShortcut);\n        shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], {\n          func: cmdFunc,\n          scope: scope || this.editor\n        });\n        return Tools.extend(shortcuts[0], {\n          desc: this.editor.translate(desc),\n          subpatterns: shortcuts.slice(1)\n        });\n      }\n      hasModifier(e) {\n        return e.altKey || e.ctrlKey || e.metaKey;\n      }\n      isFunctionKey(e) {\n        return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;\n      }\n      matchShortcut(e, shortcut) {\n        if (!shortcut) {\n          return false;\n        }\n        if (shortcut.ctrl !== e.ctrlKey || shortcut.meta !== e.metaKey) {\n          return false;\n        }\n        if (shortcut.alt !== e.altKey || shortcut.shift !== e.shiftKey) {\n          return false;\n        }\n        if (e.keyCode === shortcut.keyCode || e.charCode && e.charCode === shortcut.charCode) {\n          e.preventDefault();\n          return true;\n        }\n        return false;\n      }\n      executeShortcutAction(shortcut) {\n        return shortcut.func ? shortcut.func.call(shortcut.scope) : null;\n      }\n    }\n\n    const create$3 = () => {\n      const buttons = {};\n      const menuItems = {};\n      const popups = {};\n      const icons = {};\n      const contextMenus = {};\n      const contextToolbars = {};\n      const sidebars = {};\n      const views = {};\n      const add = (collection, type) => (name, spec) => {\n        collection[name.toLowerCase()] = {\n          ...spec,\n          type\n        };\n      };\n      const addIcon = (name, svgData) => icons[name.toLowerCase()] = svgData;\n      return {\n        addButton: add(buttons, 'button'),\n        addGroupToolbarButton: add(buttons, 'grouptoolbarbutton'),\n        addToggleButton: add(buttons, 'togglebutton'),\n        addMenuButton: add(buttons, 'menubutton'),\n        addSplitButton: add(buttons, 'splitbutton'),\n        addMenuItem: add(menuItems, 'menuitem'),\n        addNestedMenuItem: add(menuItems, 'nestedmenuitem'),\n        addToggleMenuItem: add(menuItems, 'togglemenuitem'),\n        addAutocompleter: add(popups, 'autocompleter'),\n        addContextMenu: add(contextMenus, 'contextmenu'),\n        addContextToolbar: add(contextToolbars, 'contexttoolbar'),\n        addContextForm: add(contextToolbars, 'contextform'),\n        addSidebar: add(sidebars, 'sidebar'),\n        addView: add(views, 'views'),\n        addIcon,\n        getAll: () => ({\n          buttons,\n          menuItems,\n          icons,\n          popups,\n          contextMenus,\n          contextToolbars,\n          sidebars,\n          views\n        })\n      };\n    };\n\n    const registry = () => {\n      const bridge = create$3();\n      return {\n        addAutocompleter: bridge.addAutocompleter,\n        addButton: bridge.addButton,\n        addContextForm: bridge.addContextForm,\n        addContextMenu: bridge.addContextMenu,\n        addContextToolbar: bridge.addContextToolbar,\n        addIcon: bridge.addIcon,\n        addMenuButton: bridge.addMenuButton,\n        addMenuItem: bridge.addMenuItem,\n        addNestedMenuItem: bridge.addNestedMenuItem,\n        addSidebar: bridge.addSidebar,\n        addSplitButton: bridge.addSplitButton,\n        addToggleButton: bridge.addToggleButton,\n        addGroupToolbarButton: bridge.addGroupToolbarButton,\n        addToggleMenuItem: bridge.addToggleMenuItem,\n        addView: bridge.addView,\n        getAll: bridge.getAll\n      };\n    };\n\n    const DOM$1 = DOMUtils.DOM;\n    const extend = Tools.extend, each$1 = Tools.each;\n    class Editor {\n      constructor(id, options, editorManager) {\n        this.plugins = {};\n        this.contentCSS = [];\n        this.contentStyles = [];\n        this.loadedCSS = {};\n        this.isNotDirty = false;\n        this.composing = false;\n        this.destroyed = false;\n        this.hasHiddenInput = false;\n        this.iframeElement = null;\n        this.initialized = false;\n        this.readonly = false;\n        this.removed = false;\n        this.startContent = '';\n        this._pendingNativeEvents = [];\n        this._skinLoaded = false;\n        this._editableRoot = true;\n        this.editorManager = editorManager;\n        this.documentBaseUrl = editorManager.documentBaseURL;\n        extend(this, EditorObservable);\n        const self = this;\n        this.id = id;\n        this.hidden = false;\n        const normalizedOptions = normalizeOptions(editorManager.defaultOptions, options);\n        this.options = create$5(self, normalizedOptions);\n        register$7(self);\n        const getOption = this.options.get;\n        if (getOption('deprecation_warnings')) {\n          logWarnings(options, normalizedOptions);\n        }\n        const suffix = getOption('suffix');\n        if (suffix) {\n          editorManager.suffix = suffix;\n        }\n        this.suffix = editorManager.suffix;\n        const baseUrl = getOption('base_url');\n        if (baseUrl) {\n          editorManager._setBaseUrl(baseUrl);\n        }\n        this.baseUri = editorManager.baseURI;\n        const referrerPolicy = getReferrerPolicy(self);\n        if (referrerPolicy) {\n          ScriptLoader.ScriptLoader._setReferrerPolicy(referrerPolicy);\n          DOMUtils.DOM.styleSheetLoader._setReferrerPolicy(referrerPolicy);\n        }\n        const contentCssCors = hasContentCssCors(self);\n        if (isNonNullable(contentCssCors)) {\n          DOMUtils.DOM.styleSheetLoader._setContentCssCors(contentCssCors);\n        }\n        AddOnManager.languageLoad = getOption('language_load');\n        AddOnManager.baseURL = editorManager.baseURL;\n        this.setDirty(false);\n        this.documentBaseURI = new URI(getDocumentBaseUrl(self), { base_uri: this.baseUri });\n        this.baseURI = this.baseUri;\n        this.inline = isInline(self);\n        this.hasVisual = isVisualAidsEnabled(self);\n        this.shortcuts = new Shortcuts(this);\n        this.editorCommands = new EditorCommands(this);\n        registerCommands(this);\n        const cacheSuffix = getOption('cache_suffix');\n        if (cacheSuffix) {\n          Env.cacheSuffix = cacheSuffix.replace(/^[\\?\\&]+/, '');\n        }\n        this.ui = {\n          registry: registry(),\n          styleSheetLoader: undefined,\n          show: noop,\n          hide: noop,\n          setEnabled: noop,\n          isEnabled: always\n        };\n        this.mode = create$4(self);\n        editorManager.dispatch('SetupEditor', { editor: this });\n        const setupCallback = getSetupCallback(self);\n        if (isFunction(setupCallback)) {\n          setupCallback.call(self, self);\n        }\n      }\n      render() {\n        render(this);\n      }\n      focus(skipFocus) {\n        this.execCommand('mceFocus', false, skipFocus);\n      }\n      hasFocus() {\n        return hasFocus(this);\n      }\n      translate(text) {\n        return I18n.translate(text);\n      }\n      getParam(name, defaultVal, type) {\n        const options = this.options;\n        if (!options.isRegistered(name)) {\n          if (isNonNullable(type)) {\n            options.register(name, {\n              processor: type,\n              default: defaultVal\n            });\n          } else {\n            options.register(name, {\n              processor: always,\n              default: defaultVal\n            });\n          }\n        }\n        return !options.isSet(name) && !isUndefined(defaultVal) ? defaultVal : options.get(name);\n      }\n      hasPlugin(name, loaded) {\n        const hasPlugin = contains$2(getPlugins(this), name);\n        if (hasPlugin) {\n          return loaded ? PluginManager.get(name) !== undefined : true;\n        } else {\n          return false;\n        }\n      }\n      nodeChanged(args) {\n        this._nodeChangeDispatcher.nodeChanged(args);\n      }\n      addCommand(name, callback, scope) {\n        this.editorCommands.addCommand(name, callback, scope);\n      }\n      addQueryStateHandler(name, callback, scope) {\n        this.editorCommands.addQueryStateHandler(name, callback, scope);\n      }\n      addQueryValueHandler(name, callback, scope) {\n        this.editorCommands.addQueryValueHandler(name, callback, scope);\n      }\n      addShortcut(pattern, desc, cmdFunc, scope) {\n        this.shortcuts.add(pattern, desc, cmdFunc, scope);\n      }\n      execCommand(cmd, ui, value, args) {\n        return this.editorCommands.execCommand(cmd, ui, value, args);\n      }\n      queryCommandState(cmd) {\n        return this.editorCommands.queryCommandState(cmd);\n      }\n      queryCommandValue(cmd) {\n        return this.editorCommands.queryCommandValue(cmd);\n      }\n      queryCommandSupported(cmd) {\n        return this.editorCommands.queryCommandSupported(cmd);\n      }\n      show() {\n        const self = this;\n        if (self.hidden) {\n          self.hidden = false;\n          if (self.inline) {\n            self.getBody().contentEditable = 'true';\n          } else {\n            DOM$1.show(self.getContainer());\n            DOM$1.hide(self.id);\n          }\n          self.load();\n          self.dispatch('show');\n        }\n      }\n      hide() {\n        const self = this;\n        if (!self.hidden) {\n          self.save();\n          if (self.inline) {\n            self.getBody().contentEditable = 'false';\n            if (self === self.editorManager.focusedEditor) {\n              self.editorManager.focusedEditor = null;\n            }\n          } else {\n            DOM$1.hide(self.getContainer());\n            DOM$1.setStyle(self.id, 'display', self.orgDisplay);\n          }\n          self.hidden = true;\n          self.dispatch('hide');\n        }\n      }\n      isHidden() {\n        return this.hidden;\n      }\n      setProgressState(state, time) {\n        this.dispatch('ProgressState', {\n          state,\n          time\n        });\n      }\n      load(args = {}) {\n        const self = this;\n        const elm = self.getElement();\n        if (self.removed) {\n          return '';\n        }\n        if (elm) {\n          const loadArgs = {\n            ...args,\n            load: true\n          };\n          const value = isTextareaOrInput(elm) ? elm.value : elm.innerHTML;\n          const html = self.setContent(value, loadArgs);\n          if (!loadArgs.no_events) {\n            self.dispatch('LoadContent', {\n              ...loadArgs,\n              element: elm\n            });\n          }\n          return html;\n        } else {\n          return '';\n        }\n      }\n      save(args = {}) {\n        const self = this;\n        let elm = self.getElement();\n        if (!elm || !self.initialized || self.removed) {\n          return '';\n        }\n        const getArgs = {\n          ...args,\n          save: true,\n          element: elm\n        };\n        let html = self.getContent(getArgs);\n        const saveArgs = {\n          ...getArgs,\n          content: html\n        };\n        if (!saveArgs.no_events) {\n          self.dispatch('SaveContent', saveArgs);\n        }\n        if (saveArgs.format === 'raw') {\n          self.dispatch('RawSaveContent', saveArgs);\n        }\n        html = saveArgs.content;\n        if (!isTextareaOrInput(elm)) {\n          if (args.is_removing || !self.inline) {\n            elm.innerHTML = html;\n          }\n          const form = DOM$1.getParent(self.id, 'form');\n          if (form) {\n            each$1(form.elements, elm => {\n              if (elm.name === self.id) {\n                elm.value = html;\n                return false;\n              } else {\n                return true;\n              }\n            });\n          }\n        } else {\n          elm.value = html;\n        }\n        saveArgs.element = getArgs.element = elm = null;\n        if (saveArgs.set_dirty !== false) {\n          self.setDirty(false);\n        }\n        return html;\n      }\n      setContent(content, args) {\n        return setContent(this, content, args);\n      }\n      getContent(args) {\n        return getContent(this, args);\n      }\n      insertContent(content, args) {\n        if (args) {\n          content = extend({ content }, args);\n        }\n        this.execCommand('mceInsertContent', false, content);\n      }\n      resetContent(initialContent) {\n        if (initialContent === undefined) {\n          setContent(this, this.startContent, { format: 'raw' });\n        } else {\n          setContent(this, initialContent);\n        }\n        this.undoManager.reset();\n        this.setDirty(false);\n        this.nodeChanged();\n      }\n      isDirty() {\n        return !this.isNotDirty;\n      }\n      setDirty(state) {\n        const oldState = !this.isNotDirty;\n        this.isNotDirty = !state;\n        if (state && state !== oldState) {\n          this.dispatch('dirty');\n        }\n      }\n      getContainer() {\n        const self = this;\n        if (!self.container) {\n          self.container = self.editorContainer || DOM$1.get(self.id + '_parent');\n        }\n        return self.container;\n      }\n      getContentAreaContainer() {\n        return this.contentAreaContainer;\n      }\n      getElement() {\n        if (!this.targetElm) {\n          this.targetElm = DOM$1.get(this.id);\n        }\n        return this.targetElm;\n      }\n      getWin() {\n        const self = this;\n        if (!self.contentWindow) {\n          const elm = self.iframeElement;\n          if (elm) {\n            self.contentWindow = elm.contentWindow;\n          }\n        }\n        return self.contentWindow;\n      }\n      getDoc() {\n        const self = this;\n        if (!self.contentDocument) {\n          const win = self.getWin();\n          if (win) {\n            self.contentDocument = win.document;\n          }\n        }\n        return self.contentDocument;\n      }\n      getBody() {\n        var _a, _b;\n        const doc = this.getDoc();\n        return (_b = (_a = this.bodyElement) !== null && _a !== void 0 ? _a : doc === null || doc === void 0 ? void 0 : doc.body) !== null && _b !== void 0 ? _b : null;\n      }\n      convertURL(url, name, elm) {\n        const self = this, getOption = self.options.get;\n        const urlConverterCallback = getUrlConverterCallback(self);\n        if (isFunction(urlConverterCallback)) {\n          return urlConverterCallback.call(self, url, elm, true, name);\n        }\n        if (!getOption('convert_urls') || elm === 'link' || isObject(elm) && elm.nodeName === 'LINK' || url.indexOf('file:') === 0 || url.length === 0) {\n          return url;\n        }\n        if (getOption('relative_urls')) {\n          return self.documentBaseURI.toRelative(url);\n        }\n        url = self.documentBaseURI.toAbsolute(url, getOption('remove_script_host'));\n        return url;\n      }\n      addVisual(elm) {\n        addVisual(this, elm);\n      }\n      setEditableRoot(state) {\n        setEditableRoot(this, state);\n      }\n      hasEditableRoot() {\n        return hasEditableRoot(this);\n      }\n      remove() {\n        remove$1(this);\n      }\n      destroy(automatic) {\n        destroy(this, automatic);\n      }\n      uploadImages() {\n        return this.editorUpload.uploadImages();\n      }\n      _scanForImages() {\n        return this.editorUpload.scanForImages();\n      }\n    }\n\n    const DOM = DOMUtils.DOM;\n    const each = Tools.each;\n    let boundGlobalEvents = false;\n    let beforeUnloadDelegate;\n    let editors = [];\n    const globalEventDelegate = e => {\n      const type = e.type;\n      each(EditorManager.get(), editor => {\n        switch (type) {\n        case 'scroll':\n          editor.dispatch('ScrollWindow', e);\n          break;\n        case 'resize':\n          editor.dispatch('ResizeWindow', e);\n          break;\n        }\n      });\n    };\n    const toggleGlobalEvents = state => {\n      if (state !== boundGlobalEvents) {\n        const DOM = DOMUtils.DOM;\n        if (state) {\n          DOM.bind(window, 'resize', globalEventDelegate);\n          DOM.bind(window, 'scroll', globalEventDelegate);\n        } else {\n          DOM.unbind(window, 'resize', globalEventDelegate);\n          DOM.unbind(window, 'scroll', globalEventDelegate);\n        }\n        boundGlobalEvents = state;\n      }\n    };\n    const removeEditorFromList = targetEditor => {\n      const oldEditors = editors;\n      editors = filter$5(editors, editor => {\n        return targetEditor !== editor;\n      });\n      if (EditorManager.activeEditor === targetEditor) {\n        EditorManager.activeEditor = editors.length > 0 ? editors[0] : null;\n      }\n      if (EditorManager.focusedEditor === targetEditor) {\n        EditorManager.focusedEditor = null;\n      }\n      return oldEditors.length !== editors.length;\n    };\n    const purgeDestroyedEditor = editor => {\n      if (editor && editor.initialized && !(editor.getContainer() || editor.getBody()).parentNode) {\n        removeEditorFromList(editor);\n        editor.unbindAllNativeEvents();\n        editor.destroy(true);\n        editor.removed = true;\n      }\n    };\n    const isQuirksMode = document.compatMode !== 'CSS1Compat';\n    const EditorManager = {\n      ...Observable,\n      baseURI: null,\n      baseURL: null,\n      defaultOptions: {},\n      documentBaseURL: null,\n      suffix: null,\n      majorVersion: '6',\n      minorVersion: '5.0',\n      releaseDate: '2023-06-12',\n      i18n: I18n,\n      activeEditor: null,\n      focusedEditor: null,\n      setup() {\n        const self = this;\n        let baseURL = '';\n        let suffix = '';\n        let documentBaseURL = URI.getDocumentBaseUrl(document.location);\n        if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(documentBaseURL)) {\n          documentBaseURL = documentBaseURL.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n          if (!/[\\/\\\\]$/.test(documentBaseURL)) {\n            documentBaseURL += '/';\n          }\n        }\n        const preInit = window.tinymce || window.tinyMCEPreInit;\n        if (preInit) {\n          baseURL = preInit.base || preInit.baseURL;\n          suffix = preInit.suffix;\n        } else {\n          const scripts = document.getElementsByTagName('script');\n          for (let i = 0; i < scripts.length; i++) {\n            const src = scripts[i].src || '';\n            if (src === '') {\n              continue;\n            }\n            const srcScript = src.substring(src.lastIndexOf('/'));\n            if (/tinymce(\\.full|\\.jquery|)(\\.min|\\.dev|)\\.js/.test(src)) {\n              if (srcScript.indexOf('.min') !== -1) {\n                suffix = '.min';\n              }\n              baseURL = src.substring(0, src.lastIndexOf('/'));\n              break;\n            }\n          }\n          if (!baseURL && document.currentScript) {\n            const src = document.currentScript.src;\n            if (src.indexOf('.min') !== -1) {\n              suffix = '.min';\n            }\n            baseURL = src.substring(0, src.lastIndexOf('/'));\n          }\n        }\n        self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);\n        self.documentBaseURL = documentBaseURL;\n        self.baseURI = new URI(self.baseURL);\n        self.suffix = suffix;\n        setup$v(self);\n      },\n      overrideDefaults(defaultOptions) {\n        const baseUrl = defaultOptions.base_url;\n        if (baseUrl) {\n          this._setBaseUrl(baseUrl);\n        }\n        const suffix = defaultOptions.suffix;\n        if (suffix) {\n          this.suffix = suffix;\n        }\n        this.defaultOptions = defaultOptions;\n        const pluginBaseUrls = defaultOptions.plugin_base_urls;\n        if (pluginBaseUrls !== undefined) {\n          each$d(pluginBaseUrls, (pluginBaseUrl, pluginName) => {\n            AddOnManager.PluginManager.urls[pluginName] = pluginBaseUrl;\n          });\n        }\n      },\n      init(options) {\n        const self = this;\n        let result;\n        const invalidInlineTargets = Tools.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option table tbody tfoot thead tr th td script noscript style textarea video audio iframe object menu', ' ');\n        const isInvalidInlineTarget = (options, elm) => options.inline && elm.tagName.toLowerCase() in invalidInlineTargets;\n        const createId = elm => {\n          let id = elm.id;\n          if (!id) {\n            id = get$a(elm, 'name').filter(name => !DOM.get(name)).getOrThunk(DOM.uniqueId);\n            elm.setAttribute('id', id);\n          }\n          return id;\n        };\n        const execCallback = name => {\n          const callback = options[name];\n          if (!callback) {\n            return;\n          }\n          return callback.apply(self, []);\n        };\n        const findTargets = options => {\n          if (Env.browser.isIE() || Env.browser.isEdge()) {\n            initError('TinyMCE does not support the browser you are using. For a list of supported' + ' browsers please see: https://www.tiny.cloud/docs/tinymce/6/support/#supportedwebbrowsers');\n            return [];\n          } else if (isQuirksMode) {\n            initError('Failed to initialize the editor as the document is not in standards mode. ' + 'TinyMCE requires standards mode.');\n            return [];\n          } else if (isString(options.selector)) {\n            return DOM.select(options.selector);\n          } else if (isNonNullable(options.target)) {\n            return [options.target];\n          } else {\n            return [];\n          }\n        };\n        let provideResults = editors => {\n          result = editors;\n        };\n        const initEditors = () => {\n          let initCount = 0;\n          const editors = [];\n          let targets;\n          const createEditor = (id, options, targetElm) => {\n            const editor = new Editor(id, options, self);\n            editors.push(editor);\n            editor.on('init', () => {\n              if (++initCount === targets.length) {\n                provideResults(editors);\n              }\n            });\n            editor.targetElm = editor.targetElm || targetElm;\n            editor.render();\n          };\n          DOM.unbind(window, 'ready', initEditors);\n          execCallback('onpageload');\n          targets = unique$1(findTargets(options));\n          Tools.each(targets, elm => {\n            purgeDestroyedEditor(self.get(elm.id));\n          });\n          targets = Tools.grep(targets, elm => {\n            return !self.get(elm.id);\n          });\n          if (targets.length === 0) {\n            provideResults([]);\n          } else {\n            each(targets, elm => {\n              if (isInvalidInlineTarget(options, elm)) {\n                initError('Could not initialize inline editor on invalid inline target element', elm);\n              } else {\n                createEditor(createId(elm), options, elm);\n              }\n            });\n          }\n        };\n        DOM.bind(window, 'ready', initEditors);\n        return new Promise(resolve => {\n          if (result) {\n            resolve(result);\n          } else {\n            provideResults = editors => {\n              resolve(editors);\n            };\n          }\n        });\n      },\n      get(id) {\n        if (arguments.length === 0) {\n          return editors.slice(0);\n        } else if (isString(id)) {\n          return find$2(editors, editor => {\n            return editor.id === id;\n          }).getOr(null);\n        } else if (isNumber(id)) {\n          return editors[id] ? editors[id] : null;\n        } else {\n          return null;\n        }\n      },\n      add(editor) {\n        const self = this;\n        const existingEditor = self.get(editor.id);\n        if (existingEditor === editor) {\n          return editor;\n        }\n        if (existingEditor === null) {\n          editors.push(editor);\n        }\n        toggleGlobalEvents(true);\n        self.activeEditor = editor;\n        self.dispatch('AddEditor', { editor });\n        if (!beforeUnloadDelegate) {\n          beforeUnloadDelegate = e => {\n            const event = self.dispatch('BeforeUnload');\n            if (event.returnValue) {\n              e.preventDefault();\n              e.returnValue = event.returnValue;\n              return event.returnValue;\n            }\n          };\n          window.addEventListener('beforeunload', beforeUnloadDelegate);\n        }\n        return editor;\n      },\n      createEditor(id, options) {\n        return this.add(new Editor(id, options, this));\n      },\n      remove(selector) {\n        const self = this;\n        let editor;\n        if (!selector) {\n          for (let i = editors.length - 1; i >= 0; i--) {\n            self.remove(editors[i]);\n          }\n          return;\n        }\n        if (isString(selector)) {\n          each(DOM.select(selector), elm => {\n            editor = self.get(elm.id);\n            if (editor) {\n              self.remove(editor);\n            }\n          });\n          return;\n        }\n        editor = selector;\n        if (isNull(self.get(editor.id))) {\n          return null;\n        }\n        if (removeEditorFromList(editor)) {\n          self.dispatch('RemoveEditor', { editor });\n        }\n        if (editors.length === 0) {\n          window.removeEventListener('beforeunload', beforeUnloadDelegate);\n        }\n        editor.remove();\n        toggleGlobalEvents(editors.length > 0);\n        return editor;\n      },\n      execCommand(cmd, ui, value) {\n        var _a;\n        const self = this;\n        const editorId = isObject(value) ? (_a = value.id) !== null && _a !== void 0 ? _a : value.index : value;\n        switch (cmd) {\n        case 'mceAddEditor': {\n            if (!self.get(editorId)) {\n              const editorOptions = value.options;\n              new Editor(editorId, editorOptions, self).render();\n            }\n            return true;\n          }\n        case 'mceRemoveEditor': {\n            const editor = self.get(editorId);\n            if (editor) {\n              editor.remove();\n            }\n            return true;\n          }\n        case 'mceToggleEditor': {\n            const editor = self.get(editorId);\n            if (!editor) {\n              self.execCommand('mceAddEditor', false, value);\n              return true;\n            }\n            if (editor.isHidden()) {\n              editor.show();\n            } else {\n              editor.hide();\n            }\n            return true;\n          }\n        }\n        if (self.activeEditor) {\n          return self.activeEditor.execCommand(cmd, ui, value);\n        }\n        return false;\n      },\n      triggerSave: () => {\n        each(editors, editor => {\n          editor.save();\n        });\n      },\n      addI18n: (code, items) => {\n        I18n.add(code, items);\n      },\n      translate: text => {\n        return I18n.translate(text);\n      },\n      setActive(editor) {\n        const activeEditor = this.activeEditor;\n        if (this.activeEditor !== editor) {\n          if (activeEditor) {\n            activeEditor.dispatch('deactivate', { relatedTarget: editor });\n          }\n          editor.dispatch('activate', { relatedTarget: activeEditor });\n        }\n        this.activeEditor = editor;\n      },\n      _setBaseUrl(baseUrl) {\n        this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\\/+$/, ''));\n        this.baseURI = new URI(this.baseURL);\n      }\n    };\n    EditorManager.setup();\n\n    const setup = () => {\n      const dataValue = value$2();\n      const FakeClipboardItem = items => ({\n        items,\n        types: keys(items),\n        getType: type => get$a(items, type).getOrUndefined()\n      });\n      const write = data => {\n        dataValue.set(data);\n      };\n      const read = () => dataValue.get().getOrUndefined();\n      const clear = dataValue.clear;\n      return {\n        FakeClipboardItem,\n        write,\n        read,\n        clear\n      };\n    };\n    const FakeClipboard = setup();\n\n    const min = Math.min, max = Math.max, round = Math.round;\n    const relativePosition = (rect, targetRect, rel) => {\n      let x = targetRect.x;\n      let y = targetRect.y;\n      const w = rect.w;\n      const h = rect.h;\n      const targetW = targetRect.w;\n      const targetH = targetRect.h;\n      const relChars = (rel || '').split('');\n      if (relChars[0] === 'b') {\n        y += targetH;\n      }\n      if (relChars[1] === 'r') {\n        x += targetW;\n      }\n      if (relChars[0] === 'c') {\n        y += round(targetH / 2);\n      }\n      if (relChars[1] === 'c') {\n        x += round(targetW / 2);\n      }\n      if (relChars[3] === 'b') {\n        y -= h;\n      }\n      if (relChars[4] === 'r') {\n        x -= w;\n      }\n      if (relChars[3] === 'c') {\n        y -= round(h / 2);\n      }\n      if (relChars[4] === 'c') {\n        x -= round(w / 2);\n      }\n      return create$2(x, y, w, h);\n    };\n    const findBestRelativePosition = (rect, targetRect, constrainRect, rels) => {\n      for (let i = 0; i < rels.length; i++) {\n        const pos = relativePosition(rect, targetRect, rels[i]);\n        if (pos.x >= constrainRect.x && pos.x + pos.w <= constrainRect.w + constrainRect.x && pos.y >= constrainRect.y && pos.y + pos.h <= constrainRect.h + constrainRect.y) {\n          return rels[i];\n        }\n      }\n      return null;\n    };\n    const inflate = (rect, w, h) => {\n      return create$2(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);\n    };\n    const intersect = (rect, cropRect) => {\n      const x1 = max(rect.x, cropRect.x);\n      const y1 = max(rect.y, cropRect.y);\n      const x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);\n      const y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);\n      if (x2 - x1 < 0 || y2 - y1 < 0) {\n        return null;\n      }\n      return create$2(x1, y1, x2 - x1, y2 - y1);\n    };\n    const clamp = (rect, clampRect, fixedSize) => {\n      let x1 = rect.x;\n      let y1 = rect.y;\n      let x2 = rect.x + rect.w;\n      let y2 = rect.y + rect.h;\n      const cx2 = clampRect.x + clampRect.w;\n      const cy2 = clampRect.y + clampRect.h;\n      const underflowX1 = max(0, clampRect.x - x1);\n      const underflowY1 = max(0, clampRect.y - y1);\n      const overflowX2 = max(0, x2 - cx2);\n      const overflowY2 = max(0, y2 - cy2);\n      x1 += underflowX1;\n      y1 += underflowY1;\n      if (fixedSize) {\n        x2 += underflowX1;\n        y2 += underflowY1;\n        x1 -= overflowX2;\n        y1 -= overflowY2;\n      }\n      x2 -= overflowX2;\n      y2 -= overflowY2;\n      return create$2(x1, y1, x2 - x1, y2 - y1);\n    };\n    const create$2 = (x, y, w, h) => {\n      return {\n        x,\n        y,\n        w,\n        h\n      };\n    };\n    const fromClientRect = clientRect => {\n      return create$2(clientRect.left, clientRect.top, clientRect.width, clientRect.height);\n    };\n    const Rect = {\n      inflate,\n      relativePosition,\n      findBestRelativePosition,\n      intersect,\n      clamp,\n      create: create$2,\n      fromClientRect\n    };\n\n    const awaiter = (resolveCb, rejectCb, timeout = 1000) => {\n      let done = false;\n      let timer = null;\n      const complete = completer => (...args) => {\n        if (!done) {\n          done = true;\n          if (timer !== null) {\n            clearTimeout(timer);\n            timer = null;\n          }\n          completer.apply(null, args);\n        }\n      };\n      const resolve = complete(resolveCb);\n      const reject = complete(rejectCb);\n      const start = (...args) => {\n        if (!done && timer === null) {\n          timer = setTimeout(() => reject.apply(null, args), timeout);\n        }\n      };\n      return {\n        start,\n        resolve,\n        reject\n      };\n    };\n    const create$1 = () => {\n      const tasks = {};\n      const resultFns = {};\n      const load = (id, url) => {\n        const loadErrMsg = `Script at URL \"${ url }\" failed to load`;\n        const runErrMsg = `Script at URL \"${ url }\" did not call \\`tinymce.Resource.add('${ id }', data)\\` within 1 second`;\n        if (tasks[id] !== undefined) {\n          return tasks[id];\n        } else {\n          const task = new Promise((resolve, reject) => {\n            const waiter = awaiter(resolve, reject);\n            resultFns[id] = waiter.resolve;\n            ScriptLoader.ScriptLoader.loadScript(url).then(() => waiter.start(runErrMsg), () => waiter.reject(loadErrMsg));\n          });\n          tasks[id] = task;\n          return task;\n        }\n      };\n      const add = (id, data) => {\n        if (resultFns[id] !== undefined) {\n          resultFns[id](data);\n          delete resultFns[id];\n        }\n        tasks[id] = Promise.resolve(data);\n      };\n      const unload = id => {\n        delete tasks[id];\n      };\n      return {\n        load,\n        add,\n        unload\n      };\n    };\n    const Resource = create$1();\n\n    const create = () => (() => {\n      let data = {};\n      let keys = [];\n      const storage = {\n        getItem: key => {\n          const item = data[key];\n          return item ? item : null;\n        },\n        setItem: (key, value) => {\n          keys.push(key);\n          data[key] = String(value);\n        },\n        key: index => {\n          return keys[index];\n        },\n        removeItem: key => {\n          keys = keys.filter(k => k === key);\n          delete data[key];\n        },\n        clear: () => {\n          keys = [];\n          data = {};\n        },\n        length: 0\n      };\n      Object.defineProperty(storage, 'length', {\n        get: () => keys.length,\n        configurable: false,\n        enumerable: false\n      });\n      return storage;\n    })();\n\n    let localStorage;\n    try {\n      const test = '__storage_test__';\n      localStorage = window.localStorage;\n      localStorage.setItem(test, test);\n      localStorage.removeItem(test);\n    } catch (e) {\n      localStorage = create();\n    }\n    var LocalStorage = localStorage;\n\n    const publicApi = {\n      geom: { Rect },\n      util: {\n        Delay,\n        Tools,\n        VK,\n        URI,\n        EventDispatcher,\n        Observable,\n        I18n,\n        LocalStorage,\n        ImageUploader\n      },\n      dom: {\n        EventUtils,\n        TreeWalker: DomTreeWalker,\n        TextSeeker,\n        DOMUtils,\n        ScriptLoader,\n        RangeUtils,\n        Serializer: DomSerializer,\n        StyleSheetLoader,\n        ControlSelection,\n        BookmarkManager,\n        Selection: EditorSelection,\n        Event: EventUtils.Event\n      },\n      html: {\n        Styles,\n        Entities,\n        Node: AstNode,\n        Schema,\n        DomParser,\n        Writer,\n        Serializer: HtmlSerializer\n      },\n      Env,\n      AddOnManager,\n      Annotator,\n      Formatter,\n      UndoManager,\n      EditorCommands,\n      WindowManager,\n      NotificationManager,\n      EditorObservable,\n      Shortcuts,\n      Editor,\n      FocusManager,\n      EditorManager,\n      DOM: DOMUtils.DOM,\n      ScriptLoader: ScriptLoader.ScriptLoader,\n      PluginManager,\n      ThemeManager,\n      ModelManager,\n      IconManager,\n      Resource,\n      FakeClipboard,\n      trim: Tools.trim,\n      isArray: Tools.isArray,\n      is: Tools.is,\n      toArray: Tools.toArray,\n      makeMap: Tools.makeMap,\n      each: Tools.each,\n      map: Tools.map,\n      grep: Tools.grep,\n      inArray: Tools.inArray,\n      extend: Tools.extend,\n      walk: Tools.walk,\n      resolve: Tools.resolve,\n      explode: Tools.explode,\n      _addCacheSuffix: Tools._addCacheSuffix\n    };\n    const tinymce = Tools.extend(EditorManager, publicApi);\n\n    const exportToModuleLoaders = tinymce => {\n      if (typeof module === 'object') {\n        try {\n          module.exports = tinymce;\n        } catch (_) {\n        }\n      }\n    };\n    const exportToWindowGlobal = tinymce => {\n      window.tinymce = tinymce;\n      window.tinyMCE = tinymce;\n    };\n    exportToWindowGlobal(tinymce);\n    exportToModuleLoaders(tinymce);\n\n})();\n", "/**\n * MicroEvent - to make any js object an event emitter\n *\n * - pure javascript - server compatible, browser compatible\n * - dont rely on the browser doms\n * - super simple - you get it immediatly, no mistery, no magic involved\n *\n * @author Jerome Etienne (https://github.com/jeromeetienne)\n */\n\ntype TCallback = (...args:any) => any;\n\n/**\n * Execute callback for each event in space separated list of event names\n *\n */\nfunction forEvents(events:string,callback:(event:string)=>any){\n\tevents.split(/\\s+/).forEach((event) =>{\n\t\tcallback(event);\n\t});\n}\n\nexport default class MicroEvent{\n\n\tpublic _events: {[key:string]:TCallback[]};\n\n\tconstructor(){\n\t\tthis._events = {};\n\t}\n\n\ton(events:string, fct:TCallback){\n\t\tforEvents(events,(event) => {\n\t\t\tconst event_array = this._events[event] || [];\n\t\t\tevent_array.push(fct);\n\t\t\tthis._events[event] = event_array;\n\t\t});\n\t}\n\n\toff(events:string, fct:TCallback){\n\t\tvar n = arguments.length;\n\t\tif( n === 0 ){\n\t\t\tthis._events = {};\n\t\t\treturn;\n\t\t}\n\n\t\tforEvents(events,(event) => {\n\n\t\t\tif (n === 1){\n\t\t\t\tdelete this._events[event];\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst event_array = this._events[event];\n\t\t\tif( event_array === undefined ) return;\n\n\t\t\tevent_array.splice(event_array.indexOf(fct), 1);\n\t\t\tthis._events[event] = event_array;\n\t\t});\n\t}\n\n\ttrigger(events:string, ...args:any){\n\t\tvar self = this;\n\n\t\tforEvents(events,(event) => {\n\t\t\tconst event_array = self._events[event];\n\t\t\tif( event_array === undefined ) return;\n\t\t\tevent_array.forEach(fct => {\n\t\t\t\tfct.apply(self, args );\n\t\t\t});\n\n\t\t});\n\t}\n};\n", "/**\n * microplugin.js\n * Copyright (c) 2013 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\ntype TSettings = {\n\t[key:string]:any\n}\n\ntype TPlugins = {\n\tnames: string[],\n\tsettings: TSettings,\n\trequested: {[key:string]:boolean},\n\tloaded: {[key:string]:any}\n};\n\nexport type TPluginItem = {name:string,options:{}};\nexport type TPluginHash = {[key:string]:{}};\n\n\n\n\nexport default function MicroPlugin(Interface: any ){\n\n\tInterface.plugins = {};\n\n\treturn class extends Interface{\n\n\t\tpublic plugins:TPlugins = {\n\t\t\tnames     : [],\n\t\t\tsettings  : {},\n\t\t\trequested : {},\n\t\t\tloaded    : {}\n\t\t};\n\n\t\t/**\n\t\t * Registers a plugin.\n\t\t *\n\t\t * @param {function} fn\n\t\t */\n\t\tstatic define(name:string, fn:(this:any,settings:TSettings)=>any){\n\t\t\tInterface.plugins[name] = {\n\t\t\t\t'name' : name,\n\t\t\t\t'fn'   : fn\n\t\t\t};\n\t\t}\n\n\n\t\t/**\n\t\t * Initializes the listed plugins (with options).\n\t\t * Acceptable formats:\n\t\t *\n\t\t * List (without options):\n\t\t *   ['a', 'b', 'c']\n\t\t *\n\t\t * List (with options):\n\t\t *   [{'name': 'a', options: {}}, {'name': 'b', options: {}}]\n\t\t *\n\t\t * Hash (with options):\n\t\t *   {'a': { ... }, 'b': { ... }, 'c': { ... }}\n\t\t *\n\t\t * @param {array|object} plugins\n\t\t */\n\t\tinitializePlugins(plugins:string[]|TPluginItem[]|TPluginHash) {\n\t\t\tvar key, name;\n\t\t\tconst self  = this;\n\t\t\tconst queue:string[] = [];\n\n\t\t\tif (Array.isArray(plugins)) {\n\t\t\t\tplugins.forEach((plugin:string|TPluginItem)=>{\n\t\t\t\t\tif (typeof plugin === 'string') {\n\t\t\t\t\t\tqueue.push(plugin);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.plugins.settings[plugin.name] = plugin.options;\n\t\t\t\t\t\tqueue.push(plugin.name);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (plugins) {\n\t\t\t\tfor (key in plugins) {\n\t\t\t\t\tif (plugins.hasOwnProperty(key)) {\n\t\t\t\t\t\tself.plugins.settings[key] = plugins[key];\n\t\t\t\t\t\tqueue.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile( name = queue.shift() ){\n\t\t\t\tself.require(name);\n\t\t\t}\n\t\t}\n\n\t\tloadPlugin(name:string) {\n\t\t\tvar self    = this;\n\t\t\tvar plugins = self.plugins;\n\t\t\tvar plugin  = Interface.plugins[name];\n\n\t\t\tif (!Interface.plugins.hasOwnProperty(name)) {\n\t\t\t\tthrow new Error('Unable to find \"' +  name + '\" plugin');\n\t\t\t}\n\n\t\t\tplugins.requested[name] = true;\n\t\t\tplugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);\n\t\t\tplugins.names.push(name);\n\t\t}\n\n\t\t/**\n\t\t * Initializes a plugin.\n\t\t *\n\t\t */\n\t\trequire(name:string) {\n\t\t\tvar self = this;\n\t\t\tvar plugins = self.plugins;\n\n\t\t\tif (!self.plugins.loaded.hasOwnProperty(name)) {\n\t\t\t\tif (plugins.requested[name]) {\n\t\t\t\t\tthrow new Error('Plugin has circular dependency (\"' + name + '\")');\n\t\t\t\t}\n\t\t\t\tself.loadPlugin(name);\n\t\t\t}\n\n\t\t\treturn plugins.loaded[name];\n\t\t}\n\n\t};\n\n}\n", "/*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */\n/**\n * Convert array of strings to a regular expression\n *\tex ['ab','a'] => (?:ab|a)\n * \tex ['a','b'] => [ab]\n * @param {string[]} chars\n * @return {string}\n */\nconst arrayToPattern = chars => {\n  chars = chars.filter(Boolean);\n\n  if (chars.length < 2) {\n    return chars[0] || '';\n  }\n\n  return maxValueLength(chars) == 1 ? '[' + chars.join('') + ']' : '(?:' + chars.join('|') + ')';\n};\n/**\n * @param {string[]} array\n * @return {string}\n */\n\nconst sequencePattern = array => {\n  if (!hasDuplicates(array)) {\n    return array.join('');\n  }\n\n  let pattern = '';\n  let prev_char_count = 0;\n\n  const prev_pattern = () => {\n    if (prev_char_count > 1) {\n      pattern += '{' + prev_char_count + '}';\n    }\n  };\n\n  array.forEach((char, i) => {\n    if (char === array[i - 1]) {\n      prev_char_count++;\n      return;\n    }\n\n    prev_pattern();\n    pattern += char;\n    prev_char_count = 1;\n  });\n  prev_pattern();\n  return pattern;\n};\n/**\n * Convert array of strings to a regular expression\n *\tex ['ab','a'] => (?:ab|a)\n * \tex ['a','b'] => [ab]\n * @param {Set<string>} chars\n * @return {string}\n */\n\nconst setToPattern = chars => {\n  let array = toArray(chars);\n  return arrayToPattern(array);\n};\n/**\n *\n * https://stackoverflow.com/questions/7376598/in-javascript-how-do-i-check-if-an-array-has-duplicate-values\n * @param {any[]} array\n */\n\nconst hasDuplicates = array => {\n  return new Set(array).size !== array.length;\n};\n/**\n * https://stackoverflow.com/questions/63006601/why-does-u-throw-an-invalid-escape-error\n * @param {string} str\n * @return {string}\n */\n\nconst escape_regex = str => {\n  return (str + '').replace(/([\\$\\(\\)\\*\\+\\.\\?\\[\\]\\^\\{\\|\\}\\\\])/gu, '\\\\$1');\n};\n/**\n * Return the max length of array values\n * @param {string[]} array\n *\n */\n\nconst maxValueLength = array => {\n  return array.reduce((longest, value) => Math.max(longest, unicodeLength(value)), 0);\n};\n/**\n * @param {string} str\n */\n\nconst unicodeLength = str => {\n  return toArray(str).length;\n};\n/**\n * @param {any} p\n * @return {any[]}\n */\n\nconst toArray = p => Array.from(p);\n\nexport { arrayToPattern, escape_regex, hasDuplicates, maxValueLength, sequencePattern, setToPattern, toArray, unicodeLength };\n//# sourceMappingURL=regex.js.map\n", "/*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */\n/**\n * Get all possible combinations of substrings that add up to the given string\n * https://stackoverflow.com/questions/30169587/find-all-the-combination-of-substrings-that-add-up-to-the-given-string\n * @param {string} input\n * @return {string[][]}\n */\nconst allSubstrings = input => {\n  if (input.length === 1) return [[input]];\n  /** @type {string[][]} */\n\n  let result = [];\n  const start = input.substring(1);\n  const suba = allSubstrings(start);\n  suba.forEach(function (subresult) {\n    let tmp = subresult.slice(0);\n    tmp[0] = input.charAt(0) + tmp[0];\n    result.push(tmp);\n    tmp = subresult.slice(0);\n    tmp.unshift(input.charAt(0));\n    result.push(tmp);\n  });\n  return result;\n};\n\nexport { allSubstrings };\n//# sourceMappingURL=strings.js.map\n", "/*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */\nimport { toArray, setToPattern, escape_regex, arrayToPattern, sequencePattern } from './regex.js';\nexport { escape_regex } from './regex.js';\nimport { allSubstrings } from './strings.js';\n\n/**\n * @typedef {{[key:string]:string}} TUnicodeMap\n * @typedef {{[key:string]:Set<string>}} TUnicodeSets\n * @typedef {[[number,number]]} TCodePoints\n * @typedef {{folded:string,composed:string,code_point:number}} TCodePointObj\n * @typedef {{start:number,end:number,length:number,substr:string}} TSequencePart\n */\n/** @type {TCodePoints} */\n\nconst code_points = [[0, 65535]];\nconst accent_pat = '[\\u0300-\\u036F\\u{b7}\\u{2be}\\u{2bc}]';\n/** @type {TUnicodeMap} */\n\nlet unicode_map;\n/** @type {RegExp} */\n\nlet multi_char_reg;\nconst max_char_length = 3;\n/** @type {TUnicodeMap} */\n\nconst latin_convert = {};\n/** @type {TUnicodeMap} */\n\nconst latin_condensed = {\n  '/': '⁄∕',\n  '0': '߀',\n  \"a\": \"ⱥɐɑ\",\n  \"aa\": \"ꜳ\",\n  \"ae\": \"æǽǣ\",\n  \"ao\": \"ꜵ\",\n  \"au\": \"ꜷ\",\n  \"av\": \"ꜹꜻ\",\n  \"ay\": \"ꜽ\",\n  \"b\": \"ƀɓƃ\",\n  \"c\": \"ꜿƈȼↄ\",\n  \"d\": \"đɗɖᴅƌꮷԁɦ\",\n  \"e\": \"ɛǝᴇɇ\",\n  \"f\": \"ꝼƒ\",\n  \"g\": \"ǥɠꞡᵹꝿɢ\",\n  \"h\": \"ħⱨⱶɥ\",\n  \"i\": \"ɨı\",\n  \"j\": \"ɉȷ\",\n  \"k\": \"ƙⱪꝁꝃꝅꞣ\",\n  \"l\": \"łƚɫⱡꝉꝇꞁɭ\",\n  \"m\": \"ɱɯϻ\",\n  \"n\": \"ꞥƞɲꞑᴎлԉ\",\n  \"o\": \"øǿɔɵꝋꝍᴑ\",\n  \"oe\": \"œ\",\n  \"oi\": \"ƣ\",\n  \"oo\": \"ꝏ\",\n  \"ou\": \"ȣ\",\n  \"p\": \"ƥᵽꝑꝓꝕρ\",\n  \"q\": \"ꝗꝙɋ\",\n  \"r\": \"ɍɽꝛꞧꞃ\",\n  \"s\": \"ßȿꞩꞅʂ\",\n  \"t\": \"ŧƭʈⱦꞇ\",\n  \"th\": \"þ\",\n  \"tz\": \"ꜩ\",\n  \"u\": \"ʉ\",\n  \"v\": \"ʋꝟʌ\",\n  \"vy\": \"ꝡ\",\n  \"w\": \"ⱳ\",\n  \"y\": \"ƴɏỿ\",\n  \"z\": \"ƶȥɀⱬꝣ\",\n  \"hv\": \"ƕ\"\n};\n\nfor (let latin in latin_condensed) {\n  let unicode = latin_condensed[latin] || '';\n\n  for (let i = 0; i < unicode.length; i++) {\n    let char = unicode.substring(i, i + 1);\n    latin_convert[char] = latin;\n  }\n}\n\nconst convert_pat = new RegExp(Object.keys(latin_convert).join('|') + '|' + accent_pat, 'gu');\n/**\n * Initialize the unicode_map from the give code point ranges\n *\n * @param {TCodePoints=} _code_points\n */\n\nconst initialize = _code_points => {\n  if (unicode_map !== undefined) return;\n  unicode_map = generateMap(_code_points || code_points);\n};\n/**\n * Helper method for normalize a string\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n * @param {string} str\n * @param {string} form\n */\n\nconst normalize = (str, form = 'NFKD') => str.normalize(form);\n/**\n * Remove accents without reordering string\n * calling str.normalize('NFKD') on \\u{594}\\u{595}\\u{596} becomes \\u{596}\\u{594}\\u{595}\n * via https://github.com/krisk/Fuse/issues/133#issuecomment-318692703\n * @param {string} str\n * @return {string}\n */\n\nconst asciifold = str => {\n  return toArray(str).reduce(\n  /**\n   * @param {string} result\n   * @param {string} char\n   */\n  (result, char) => {\n    return result + _asciifold(char);\n  }, '');\n};\n/**\n * @param {string} str\n * @return {string}\n */\n\nconst _asciifold = str => {\n  str = normalize(str).toLowerCase().replace(convert_pat, (\n  /** @type {string} */\n  char) => {\n    return latin_convert[char] || '';\n  }); //return str;\n\n  return normalize(str, 'NFC');\n};\n/**\n * Generate a list of unicode variants from the list of code points\n * @param {TCodePoints} code_points\n * @yield {TCodePointObj}\n */\n\nfunction* generator(code_points) {\n  for (const [code_point_min, code_point_max] of code_points) {\n    for (let i = code_point_min; i <= code_point_max; i++) {\n      let composed = String.fromCharCode(i);\n      let folded = asciifold(composed);\n\n      if (folded == composed.toLowerCase()) {\n        continue;\n      } // skip when folded is a string longer than 3 characters long\n      // bc the resulting regex patterns will be long\n      // eg:\n      // folded صلى الله عليه وسلم length 18 code point 65018\n      // folded جل جلاله length 8 code point 65019\n\n\n      if (folded.length > max_char_length) {\n        continue;\n      }\n\n      if (folded.length == 0) {\n        continue;\n      }\n\n      yield {\n        folded: folded,\n        composed: composed,\n        code_point: i\n      };\n    }\n  }\n}\n/**\n * Generate a unicode map from the list of code points\n * @param {TCodePoints} code_points\n * @return {TUnicodeSets}\n */\n\nconst generateSets = code_points => {\n  /** @type {{[key:string]:Set<string>}} */\n  const unicode_sets = {};\n  /**\n   * @param {string} folded\n   * @param {string} to_add\n   */\n\n  const addMatching = (folded, to_add) => {\n    /** @type {Set<string>} */\n    const folded_set = unicode_sets[folded] || new Set();\n    const patt = new RegExp('^' + setToPattern(folded_set) + '$', 'iu');\n\n    if (to_add.match(patt)) {\n      return;\n    }\n\n    folded_set.add(escape_regex(to_add));\n    unicode_sets[folded] = folded_set;\n  };\n\n  for (let value of generator(code_points)) {\n    addMatching(value.folded, value.folded);\n    addMatching(value.folded, value.composed);\n  }\n\n  return unicode_sets;\n};\n/**\n * Generate a unicode map from the list of code points\n * ae => (?:(?:ae|Æ|Ǽ|Ǣ)|(?:A|Ⓐ|Ａ...)(?:E|ɛ|Ⓔ...))\n *\n * @param {TCodePoints} code_points\n * @return {TUnicodeMap}\n */\n\nconst generateMap = code_points => {\n  /** @type {TUnicodeSets} */\n  const unicode_sets = generateSets(code_points);\n  /** @type {TUnicodeMap} */\n\n  const unicode_map = {};\n  /** @type {string[]} */\n\n  let multi_char = [];\n\n  for (let folded in unicode_sets) {\n    let set = unicode_sets[folded];\n\n    if (set) {\n      unicode_map[folded] = setToPattern(set);\n    }\n\n    if (folded.length > 1) {\n      multi_char.push(escape_regex(folded));\n    }\n  }\n\n  multi_char.sort((a, b) => b.length - a.length);\n  const multi_char_patt = arrayToPattern(multi_char);\n  multi_char_reg = new RegExp('^' + multi_char_patt, 'u');\n  return unicode_map;\n};\n/**\n * Map each element of an array from it's folded value to all possible unicode matches\n * @param {string[]} strings\n * @param {number} min_replacement\n * @return {string}\n */\n\nconst mapSequence = (strings, min_replacement = 1) => {\n  let chars_replaced = 0;\n  strings = strings.map(str => {\n    if (unicode_map[str]) {\n      chars_replaced += str.length;\n    }\n\n    return unicode_map[str] || str;\n  });\n\n  if (chars_replaced >= min_replacement) {\n    return sequencePattern(strings);\n  }\n\n  return '';\n};\n/**\n * Convert a short string and split it into all possible patterns\n * Keep a pattern only if min_replacement is met\n *\n * 'abc'\n * \t\t=> [['abc'],['ab','c'],['a','bc'],['a','b','c']]\n *\t\t=> ['abc-pattern','ab-c-pattern'...]\n *\n *\n * @param {string} str\n * @param {number} min_replacement\n * @return {string}\n */\n\nconst substringsToPattern = (str, min_replacement = 1) => {\n  min_replacement = Math.max(min_replacement, str.length - 1);\n  return arrayToPattern(allSubstrings(str).map(sub_pat => {\n    return mapSequence(sub_pat, min_replacement);\n  }));\n};\n/**\n * Convert an array of sequences into a pattern\n * [{start:0,end:3,length:3,substr:'iii'}...] => (?:iii...)\n *\n * @param {Sequence[]} sequences\n * @param {boolean} all\n */\n\nconst sequencesToPattern = (sequences, all = true) => {\n  let min_replacement = sequences.length > 1 ? 1 : 0;\n  return arrayToPattern(sequences.map(sequence => {\n    let seq = [];\n    const len = all ? sequence.length() : sequence.length() - 1;\n\n    for (let j = 0; j < len; j++) {\n      seq.push(substringsToPattern(sequence.substrs[j] || '', min_replacement));\n    }\n\n    return sequencePattern(seq);\n  }));\n};\n/**\n * Return true if the sequence is already in the sequences\n * @param {Sequence} needle_seq\n * @param {Sequence[]} sequences\n */\n\n\nconst inSequences = (needle_seq, sequences) => {\n  for (const seq of sequences) {\n    if (seq.start != needle_seq.start || seq.end != needle_seq.end) {\n      continue;\n    }\n\n    if (seq.substrs.join('') !== needle_seq.substrs.join('')) {\n      continue;\n    }\n\n    let needle_parts = needle_seq.parts;\n    /**\n     * @param {TSequencePart} part\n     */\n\n    const filter = part => {\n      for (const needle_part of needle_parts) {\n        if (needle_part.start === part.start && needle_part.substr === part.substr) {\n          return false;\n        }\n\n        if (part.length == 1 || needle_part.length == 1) {\n          continue;\n        } // check for overlapping parts\n        // a = ['::=','==']\n        // b = ['::','===']\n        // a = ['r','sm']\n        // b = ['rs','m']\n\n\n        if (part.start < needle_part.start && part.end > needle_part.start) {\n          return true;\n        }\n\n        if (needle_part.start < part.start && needle_part.end > part.start) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    let filtered = seq.parts.filter(filter);\n\n    if (filtered.length > 0) {\n      continue;\n    }\n\n    return true;\n  }\n\n  return false;\n};\n\nclass Sequence {\n  constructor() {\n    /** @type {TSequencePart[]} */\n    this.parts = [];\n    /** @type {string[]} */\n\n    this.substrs = [];\n    this.start = 0;\n    this.end = 0;\n  }\n  /**\n   * @param {TSequencePart|undefined} part\n   */\n\n\n  add(part) {\n    if (part) {\n      this.parts.push(part);\n      this.substrs.push(part.substr);\n      this.start = Math.min(part.start, this.start);\n      this.end = Math.max(part.end, this.end);\n    }\n  }\n\n  last() {\n    return this.parts[this.parts.length - 1];\n  }\n\n  length() {\n    return this.parts.length;\n  }\n  /**\n   * @param {number} position\n   * @param {TSequencePart} last_piece\n   */\n\n\n  clone(position, last_piece) {\n    let clone = new Sequence();\n    let parts = JSON.parse(JSON.stringify(this.parts));\n    let last_part = parts.pop();\n\n    for (const part of parts) {\n      clone.add(part);\n    }\n\n    let last_substr = last_piece.substr.substring(0, position - last_part.start);\n    let clone_last_len = last_substr.length;\n    clone.add({\n      start: last_part.start,\n      end: last_part.start + clone_last_len,\n      length: clone_last_len,\n      substr: last_substr\n    });\n    return clone;\n  }\n\n}\n/**\n * Expand a regular expression pattern to include unicode variants\n * \teg /a/ becomes /aⓐａẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐɑAⒶＡÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ/\n *\n * Issue:\n *  ﺊﺋ [ 'ﺊ = \\\\u{fe8a}', 'ﺋ = \\\\u{fe8b}' ]\n *\tbecomes:\tئئ [ 'ي = \\\\u{64a}', 'ٔ = \\\\u{654}', 'ي = \\\\u{64a}', 'ٔ = \\\\u{654}' ]\n *\n *\tİĲ = IIJ = ⅡJ\n *\n * \t1/2/4\n *\n * @param {string} str\n * @return {string|undefined}\n */\n\n\nconst getPattern = str => {\n  initialize();\n  str = asciifold(str);\n  let pattern = '';\n  let sequences = [new Sequence()];\n\n  for (let i = 0; i < str.length; i++) {\n    let substr = str.substring(i);\n    let match = substr.match(multi_char_reg);\n    const char = str.substring(i, i + 1);\n    const match_str = match ? match[0] : null; // loop through sequences\n    // add either the char or multi_match\n\n    let overlapping = [];\n    let added_types = new Set();\n\n    for (const sequence of sequences) {\n      const last_piece = sequence.last();\n\n      if (!last_piece || last_piece.length == 1 || last_piece.end <= i) {\n        // if we have a multi match\n        if (match_str) {\n          const len = match_str.length;\n          sequence.add({\n            start: i,\n            end: i + len,\n            length: len,\n            substr: match_str\n          });\n          added_types.add('1');\n        } else {\n          sequence.add({\n            start: i,\n            end: i + 1,\n            length: 1,\n            substr: char\n          });\n          added_types.add('2');\n        }\n      } else if (match_str) {\n        let clone = sequence.clone(i, last_piece);\n        const len = match_str.length;\n        clone.add({\n          start: i,\n          end: i + len,\n          length: len,\n          substr: match_str\n        });\n        overlapping.push(clone);\n      } else {\n        // don't add char\n        // adding would create invalid patterns: 234 => [2,34,4]\n        added_types.add('3');\n      }\n    } // if we have overlapping\n\n\n    if (overlapping.length > 0) {\n      // ['ii','iii'] before ['i','i','iii']\n      overlapping = overlapping.sort((a, b) => {\n        return a.length() - b.length();\n      });\n\n      for (let clone of overlapping) {\n        // don't add if we already have an equivalent sequence\n        if (inSequences(clone, sequences)) {\n          continue;\n        }\n\n        sequences.push(clone);\n      }\n\n      continue;\n    } // if we haven't done anything unique\n    // clean up the patterns\n    // helps keep patterns smaller\n    // if str = 'r₨㎧aarss', pattern will be 446 instead of 655\n\n\n    if (i > 0 && added_types.size == 1 && !added_types.has('3')) {\n      pattern += sequencesToPattern(sequences, false);\n      let new_seq = new Sequence();\n      const old_seq = sequences[0];\n\n      if (old_seq) {\n        new_seq.add(old_seq.last());\n      }\n\n      sequences = [new_seq];\n    }\n  }\n\n  pattern += sequencesToPattern(sequences, true);\n  return pattern;\n};\n\nexport { _asciifold, asciifold, code_points, generateMap, generateSets, generator, getPattern, initialize, mapSequence, normalize, substringsToPattern, unicode_map };\n//# sourceMappingURL=index.js.map\n", "/*! sifter.js | https://github.com/orchidjs/sifter.js | Apache License (v2) */\nimport { asciifold } from '@orchidjs/unicode-variants';\n\n/**\n * A property getter resolving dot-notation\n * @param  {Object}  obj     The root object to fetch property on\n * @param  {String}  name    The optionally dotted property name to fetch\n * @return {Object}          The resolved property value\n */\nconst getAttr = (obj, name) => {\n  if (!obj) return;\n  return obj[name];\n};\n/**\n * A property getter resolving dot-notation\n * @param  {Object}  obj     The root object to fetch property on\n * @param  {String}  name    The optionally dotted property name to fetch\n * @return {Object}          The resolved property value\n */\n\nconst getAttrNesting = (obj, name) => {\n  if (!obj) return;\n  var part,\n      names = name.split(\".\");\n\n  while ((part = names.shift()) && (obj = obj[part]));\n\n  return obj;\n};\n/**\n * Calculates how close of a match the\n * given value is against a search token.\n *\n */\n\nconst scoreValue = (value, token, weight) => {\n  var score, pos;\n  if (!value) return 0;\n  value = value + '';\n  if (token.regex == null) return 0;\n  pos = value.search(token.regex);\n  if (pos === -1) return 0;\n  score = token.string.length / value.length;\n  if (pos === 0) score += 0.5;\n  return score * weight;\n};\n/**\n * Cast object property to an array if it exists and has a value\n *\n */\n\nconst propToArray = (obj, key) => {\n  var value = obj[key];\n  if (typeof value == 'function') return value;\n\n  if (value && !Array.isArray(value)) {\n    obj[key] = [value];\n  }\n};\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n *    // invoked for each item\n * });\n * ```\n *\n */\n\nconst iterate = (object, callback) => {\n  if (Array.isArray(object)) {\n    object.forEach(callback);\n  } else {\n    for (var key in object) {\n      if (object.hasOwnProperty(key)) {\n        callback(object[key], key);\n      }\n    }\n  }\n};\nconst cmp = (a, b) => {\n  if (typeof a === 'number' && typeof b === 'number') {\n    return a > b ? 1 : a < b ? -1 : 0;\n  }\n\n  a = asciifold(a + '').toLowerCase();\n  b = asciifold(b + '').toLowerCase();\n  if (a > b) return 1;\n  if (b > a) return -1;\n  return 0;\n};\n\nexport { cmp, getAttr, getAttrNesting, iterate, propToArray, scoreValue };\n//# sourceMappingURL=utils.js.map\n", "/*! sifter.js | https://github.com/orchidjs/sifter.js | Apache License (v2) */\nimport { iterate, cmp, propToArray, getAttrNesting, getAttr, scoreValue } from './utils.js';\nexport { cmp, getAttr, getAttrNesting, iterate, propToArray, scoreValue } from './utils.js';\nimport { escape_regex, getPattern } from '@orchidjs/unicode-variants';\nexport { getPattern } from '@orchidjs/unicode-variants';\n\n/**\n * sifter.js\n * Copyright (c) 2013–2020 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\nclass Sifter {\n  // []|{};\n\n  /**\n   * Textually searches arrays and hashes of objects\n   * by property (or multiple properties). Designed\n   * specifically for autocomplete.\n   *\n   */\n  constructor(items, settings) {\n    this.items = void 0;\n    this.settings = void 0;\n    this.items = items;\n    this.settings = settings || {\n      diacritics: true\n    };\n  }\n\n  /**\n   * Splits a search string into an array of individual\n   * regexps to be used to match results.\n   *\n   */\n  tokenize(query, respect_word_boundaries, weights) {\n    if (!query || !query.length) return [];\n    const tokens = [];\n    const words = query.split(/\\s+/);\n    var field_regex;\n\n    if (weights) {\n      field_regex = new RegExp('^(' + Object.keys(weights).map(escape_regex).join('|') + ')\\:(.*)$');\n    }\n\n    words.forEach(word => {\n      let field_match;\n      let field = null;\n      let regex = null; // look for \"field:query\" tokens\n\n      if (field_regex && (field_match = word.match(field_regex))) {\n        field = field_match[1];\n        word = field_match[2];\n      }\n\n      if (word.length > 0) {\n        if (this.settings.diacritics) {\n          regex = getPattern(word) || null;\n        } else {\n          regex = escape_regex(word);\n        }\n\n        if (regex && respect_word_boundaries) regex = \"\\\\b\" + regex;\n      }\n\n      tokens.push({\n        string: word,\n        regex: regex ? new RegExp(regex, 'iu') : null,\n        field: field\n      });\n    });\n    return tokens;\n  }\n\n  /**\n   * Returns a function to be used to score individual results.\n   *\n   * Good matches will have a higher score than poor matches.\n   * If an item is not a match, 0 will be returned by the function.\n   *\n   * @returns {T.ScoreFn}\n   */\n  getScoreFunction(query, options) {\n    var search = this.prepareSearch(query, options);\n    return this._getScoreFunction(search);\n  }\n  /**\n   * @returns {T.ScoreFn}\n   *\n   */\n\n\n  _getScoreFunction(search) {\n    const tokens = search.tokens,\n          token_count = tokens.length;\n\n    if (!token_count) {\n      return function () {\n        return 0;\n      };\n    }\n\n    const fields = search.options.fields,\n          weights = search.weights,\n          field_count = fields.length,\n          getAttrFn = search.getAttrFn;\n\n    if (!field_count) {\n      return function () {\n        return 1;\n      };\n    }\n    /**\n     * Calculates the score of an object\n     * against the search query.\n     *\n     */\n\n\n    const scoreObject = function () {\n      if (field_count === 1) {\n        return function (token, data) {\n          const field = fields[0].field;\n          return scoreValue(getAttrFn(data, field), token, weights[field] || 1);\n        };\n      }\n\n      return function (token, data) {\n        var sum = 0; // is the token specific to a field?\n\n        if (token.field) {\n          const value = getAttrFn(data, token.field);\n\n          if (!token.regex && value) {\n            sum += 1 / field_count;\n          } else {\n            sum += scoreValue(value, token, 1);\n          }\n        } else {\n          iterate(weights, (weight, field) => {\n            sum += scoreValue(getAttrFn(data, field), token, weight);\n          });\n        }\n\n        return sum / field_count;\n      };\n    }();\n\n    if (token_count === 1) {\n      return function (data) {\n        return scoreObject(tokens[0], data);\n      };\n    }\n\n    if (search.options.conjunction === 'and') {\n      return function (data) {\n        var score,\n            sum = 0;\n\n        for (let token of tokens) {\n          score = scoreObject(token, data);\n          if (score <= 0) return 0;\n          sum += score;\n        }\n\n        return sum / token_count;\n      };\n    } else {\n      return function (data) {\n        var sum = 0;\n        iterate(tokens, token => {\n          sum += scoreObject(token, data);\n        });\n        return sum / token_count;\n      };\n    }\n  }\n\n  /**\n   * Returns a function that can be used to compare two\n   * results, for sorting purposes. If no sorting should\n   * be performed, `null` will be returned.\n   *\n   * @return function(a,b)\n   */\n  getSortFunction(query, options) {\n    var search = this.prepareSearch(query, options);\n    return this._getSortFunction(search);\n  }\n\n  _getSortFunction(search) {\n    var implicit_score,\n        sort_flds = [];\n    const self = this,\n          options = search.options,\n          sort = !search.query && options.sort_empty ? options.sort_empty : options.sort;\n\n    if (typeof sort == 'function') {\n      return sort.bind(this);\n    }\n    /**\n     * Fetches the specified sort field value\n     * from a search result item.\n     *\n     */\n\n\n    const get_field = function get_field(name, result) {\n      if (name === '$score') return result.score;\n      return search.getAttrFn(self.items[result.id], name);\n    }; // parse options\n\n\n    if (sort) {\n      for (let s of sort) {\n        if (search.query || s.field !== '$score') {\n          sort_flds.push(s);\n        }\n      }\n    } // the \"$score\" field is implied to be the primary\n    // sort field, unless it's manually specified\n\n\n    if (search.query) {\n      implicit_score = true;\n\n      for (let fld of sort_flds) {\n        if (fld.field === '$score') {\n          implicit_score = false;\n          break;\n        }\n      }\n\n      if (implicit_score) {\n        sort_flds.unshift({\n          field: '$score',\n          direction: 'desc'\n        });\n      } // without a search.query, all items will have the same score\n\n    } else {\n      sort_flds = sort_flds.filter(fld => fld.field !== '$score');\n    } // build function\n\n\n    const sort_flds_count = sort_flds.length;\n\n    if (!sort_flds_count) {\n      return null;\n    }\n\n    return function (a, b) {\n      var result, field;\n\n      for (let sort_fld of sort_flds) {\n        field = sort_fld.field;\n        let multiplier = sort_fld.direction === 'desc' ? -1 : 1;\n        result = multiplier * cmp(get_field(field, a), get_field(field, b));\n        if (result) return result;\n      }\n\n      return 0;\n    };\n  }\n\n  /**\n   * Parses a search query and returns an object\n   * with tokens and fields ready to be populated\n   * with results.\n   *\n   */\n  prepareSearch(query, optsUser) {\n    const weights = {};\n    var options = Object.assign({}, optsUser);\n    propToArray(options, 'sort');\n    propToArray(options, 'sort_empty'); // convert fields to new format\n\n    if (options.fields) {\n      propToArray(options, 'fields');\n      const fields = [];\n      options.fields.forEach(field => {\n        if (typeof field == 'string') {\n          field = {\n            field: field,\n            weight: 1\n          };\n        }\n\n        fields.push(field);\n        weights[field.field] = 'weight' in field ? field.weight : 1;\n      });\n      options.fields = fields;\n    }\n\n    return {\n      options: options,\n      query: query.toLowerCase().trim(),\n      tokens: this.tokenize(query, options.respect_word_boundaries, weights),\n      total: 0,\n      items: [],\n      weights: weights,\n      getAttrFn: options.nesting ? getAttrNesting : getAttr\n    };\n  }\n\n  /**\n   * Searches through all items and returns a sorted array of matches.\n   *\n   */\n  search(query, options) {\n    var self = this,\n        score,\n        search;\n    search = this.prepareSearch(query, options);\n    options = search.options;\n    query = search.query; // generate result scoring function\n\n    const fn_score = options.score || self._getScoreFunction(search); // perform search and sort\n\n\n    if (query.length) {\n      iterate(self.items, (item, id) => {\n        score = fn_score(item);\n\n        if (options.filter === false || score > 0) {\n          search.items.push({\n            'score': score,\n            'id': id\n          });\n        }\n      });\n    } else {\n      iterate(self.items, (_, id) => {\n        search.items.push({\n          'score': 1,\n          'id': id\n        });\n      });\n    }\n\n    const fn_sort = self._getSortFunction(search);\n\n    if (fn_sort) search.items.sort(fn_sort); // apply limits\n\n    search.total = search.items.length;\n\n    if (typeof options.limit === 'number') {\n      search.items = search.items.slice(0, options.limit);\n    }\n\n    return search;\n  }\n\n}\n\nexport { Sifter };\n//# sourceMappingURL=sifter.js.map\n", "\nimport { asciifold } from '@orchidjs/unicode-variants';\nimport * as T from './types';\n\n\n/**\n * A property getter resolving dot-notation\n * @param  {Object}  obj     The root object to fetch property on\n * @param  {String}  name    The optionally dotted property name to fetch\n * @return {Object}          The resolved property value\n */\nexport const getAttr = (obj:{[key:string]:any}, name:string ) => {\n    if (!obj ) return;\n    return obj[name];\n};\n\n/**\n * A property getter resolving dot-notation\n * @param  {Object}  obj     The root object to fetch property on\n * @param  {String}  name    The optionally dotted property name to fetch\n * @return {Object}          The resolved property value\n */\nexport const getAttrNesting = (obj:{[key:string]:any}, name:string ) => {\n    if (!obj ) return;\n    var part, names = name.split(\".\");\n\twhile( (part = names.shift()) && (obj = obj[part]));\n    return obj;\n};\n\n/**\n * Calculates how close of a match the\n * given value is against a search token.\n *\n */\nexport const scoreValue = (value:string, token:T.Token, weight:number ):number => {\n\tvar score, pos;\n\n\tif (!value) return 0;\n\n\tvalue = value + '';\n\tif( token.regex == null ) return 0;\n\tpos = value.search(token.regex);\n\tif (pos === -1) return 0;\n\n\tscore = token.string.length / value.length;\n\tif (pos === 0) score += 0.5;\n\n\treturn score * weight;\n};\n\n\n/**\n * Cast object property to an array if it exists and has a value\n *\n */\nexport const propToArray = (obj:{[key:string]:any}, key:string) => {\n\tvar value = obj[key];\n\n\tif( typeof value == 'function' ) return value;\n\n\tif( value && !Array.isArray(value) ){\n\t\tobj[key] = [value];\n\t}\n}\n\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n *    // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object:[]|{[key:string]:any}, callback:(value:any,key:any)=>any) => {\n\n\tif ( Array.isArray(object)) {\n\t\tobject.forEach(callback);\n\n\t}else{\n\n\t\tfor (var key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tcallback(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n\nexport const cmp = (a:number|string, b:number|string) => {\n\tif (typeof a === 'number' && typeof b === 'number') {\n\t\treturn a > b ? 1 : (a < b ? -1 : 0);\n\t}\n\ta = asciifold(a + '').toLowerCase();\n\tb = asciifold(b + '').toLowerCase();\n\tif (a > b) return 1;\n\tif (b > a) return -1;\n\treturn 0;\n};\n", "\nimport { iterate } from '@orchidjs/sifter/lib/utils';\n\n/**\n * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n *\n * param query should be {}\n */\nexport const getDom = ( query:any ):HTMLElement => {\n\n\tif( query.jquery ){\n\t\treturn query[0];\n\t}\n\n\tif( query instanceof HTMLElement ){\n\t\treturn query;\n\t}\n\n\tif( isHtmlString(query) ){\n\t\tvar tpl = document.createElement('template');\n\t\ttpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\t\treturn tpl.content.firstChild as HTMLElement;\n\t}\n\n\treturn document.querySelector(query);\n};\n\nexport const isHtmlString = (arg:any): boolean => {\n\tif( typeof arg === 'string' && arg.indexOf('<') > -1 ){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport const escapeQuery = (query:string):string => {\n\treturn query.replace(/['\"\\\\]/g, '\\\\$&');\n}\n\n/**\n * Dispatch an event\n *\n */\nexport const triggerEvent = ( dom_el:HTMLElement, event_name:string ):void => {\n\tvar event = document.createEvent('HTMLEvents');\n\tevent.initEvent(event_name, true, false);\n\tdom_el.dispatchEvent(event)\n};\n\n/**\n * Apply CSS rules to a dom element\n *\n */\nexport const applyCSS = ( dom_el:HTMLElement, css:{ [key: string]: string|number }):void => {\n\tObject.assign(dom_el.style, css);\n}\n\n\n/**\n * Add css classes\n *\n */\nexport const addClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n\tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map( cls => {\n\t\t\tel.classList.add( cls );\n\t\t});\n\t});\n}\n\n/**\n * Remove css classes\n *\n */\n export const removeClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n \tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map(cls => {\n\t \t\tel.classList.remove( cls );\n\t\t});\n \t});\n }\n\n\n/**\n * Return arguments\n *\n */\nexport const classesArray = (args:string[]|string[][]):string[] => {\n\tvar classes:string[] = [];\n\titerate( args, (_classes) =>{\n\t\tif( typeof _classes === 'string' ){\n\t\t\t_classes = _classes.trim().split(/[\\11\\12\\14\\15\\40]/);\n\t\t}\n\t\tif( Array.isArray(_classes) ){\n\t\t\tclasses = classes.concat(_classes);\n\t\t}\n\t});\n\n\treturn classes.filter(Boolean);\n}\n\n\n/**\n * Create an array from arg if it's not already an array\n *\n */\nexport const castAsArray = (arg:any):Array<any> => {\n\tif( !Array.isArray(arg) ){\n \t\targ = [arg];\n \t}\n\treturn arg;\n}\n\n\n/**\n * Get the closest node to the evt.target matching the selector\n * Stops at wrapper\n *\n */\nexport const parentMatch = ( target:null|HTMLElement, selector:string, wrapper?:HTMLElement ):HTMLElement|void => {\n\n\tif( wrapper && !wrapper.contains(target) ){\n\t\treturn;\n\t}\n\n\twhile( target && target.matches ){\n\n\t\tif( target.matches(selector) ){\n\t\t\treturn target;\n\t\t}\n\n\t\ttarget = target.parentNode as HTMLElement;\n\t}\n}\n\n\n/**\n * Get the first or last item from an array\n *\n * > 0 - right (last)\n * <= 0 - left (first)\n *\n */\nexport const getTail = ( list:Array<any>|NodeList, direction:number=0 ):any => {\n\n\tif( direction > 0 ){\n\t\treturn list[list.length-1];\n\t}\n\n\treturn list[0];\n}\n\n/**\n * Return true if an object is empty\n *\n */\nexport const isEmptyObject = (obj:object):boolean => {\n\treturn (Object.keys(obj).length === 0);\n}\n\n\n/**\n * Get the index of an element amongst sibling nodes of the same type\n *\n */\nexport const nodeIndex = ( el:null|Element, amongst?:string ):number => {\n\tif (!el) return -1;\n\n\tamongst = amongst || el.nodeName;\n\n\tvar i = 0;\n\twhile( el = el.previousElementSibling ){\n\n\t\tif( el.matches(amongst) ){\n\t\t\ti++;\n\t\t}\n\t}\n\treturn i;\n}\n\n\n/**\n * Set attributes of an element\n *\n */\nexport const setAttr = (el:Element,attrs:{ [key: string]: null|string|number }) => {\n\titerate( attrs,(val,attr) => {\n\t\tif( val == null ){\n\t\t\tel.removeAttribute(attr as string);\n\t\t}else{\n\t\t\tel.setAttribute(attr as string, ''+val);\n\t\t}\n\t});\n}\n\n\n/**\n * Replace a node\n */\nexport const replaceNode = ( existing:Node, replacement:Node ) => {\n\tif( existing.parentNode ) existing.parentNode.replaceChild(replacement, existing);\n}\n", "/**\n * highlight v3 | MIT license | Johann Burkard <jb@eaio.com>\n * Highlights arbitrary terms in a node.\n *\n * - Modified by Marshal <beatgates@gmail.com> 2011-6-24 (added regex)\n * - Modified by Brian Reavis <brian@thirdroute.com> 2012-8-27 (cleanup)\n */\n\nimport {replaceNode} from '../vanilla';\n\n\nexport const highlight = (element:HTMLElement, regex:string|RegExp) => {\n\n\tif( regex === null ) return;\n\n\t// convet string to regex\n\tif( typeof regex === 'string' ){\n\n\t\tif( !regex.length ) return;\n\t\tregex = new RegExp(regex, 'i');\n\t}\n\n\n\t// Wrap matching part of text node with highlighting <span>, e.g.\n\t// Soccer  ->  <span class=\"highlight\">Soc</span>cer  for regex = /soc/i\n\tconst highlightText = ( node:Text ):number => {\n\n\t\tvar match = node.data.match(regex);\n\t\tif( match && node.data.length > 0 ){\n\t\t\tvar spannode\t\t= document.createElement('span');\n\t\t\tspannode.className\t= 'highlight';\n\t\t\tvar middlebit\t\t= node.splitText(match.index as number);\n\n\t\t\tmiddlebit.splitText(match[0]!.length);\n\t\t\tvar middleclone\t\t= middlebit.cloneNode(true);\n\n\t\t\tspannode.appendChild(middleclone);\n\t\t\treplaceNode(middlebit, spannode);\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn 0;\n\t};\n\n\t// Recurse element node, looking for child text nodes to highlight, unless element\n\t// is childless, <script>, <style>, or already highlighted: <span class=\"hightlight\">\n\tconst highlightChildren = ( node:Element ):void => {\n\t\tif( node.nodeType === 1 && node.childNodes && !/(script|style)/i.test(node.tagName) && ( node.className !== 'highlight' || node.tagName !== 'SPAN' ) ){\n\t\t\tArray.from(node.childNodes).forEach(element => {\n\t\t\t\thighlightRecursive(element);\n\t\t\t});\n\t\t}\n\t};\n\n\n\tconst highlightRecursive = ( node:Node|Element ):number => {\n\n\t\tif( node.nodeType === 3 ){\n\t\t\treturn highlightText(node as Text);\n\t\t}\n\n\t\thighlightChildren(node as Element);\n\n\t\treturn 0;\n\t};\n\n\thighlightRecursive( element );\n};\n\n/**\n * removeHighlight fn copied from highlight v5 and\n * edited to remove with(), pass js strict mode, and use without jquery\n */\nexport const removeHighlight = (el:HTMLElement) => {\n\tvar elements = el.querySelectorAll(\"span.highlight\");\n\tArray.prototype.forEach.call(elements, function(el:HTMLElement){\n\t\tvar parent = el.parentNode as Node;\n\t\tparent.replaceChild(el.firstChild as Node, el);\n\t\tparent.normalize();\n\t});\n};\n", "export const KEY_A\t\t\t\t= 65;\nexport const KEY_RETURN\t\t\t= 13;\nexport const KEY_ESC\t\t\t= 27;\nexport const KEY_LEFT\t\t\t= 37;\nexport const KEY_UP\t\t\t\t= 38;\nexport const KEY_RIGHT\t\t\t= 39;\nexport const KEY_DOWN\t\t\t= 40;\nexport const KEY_BACKSPACE\t\t= 8;\nexport const KEY_DELETE\t\t\t= 46;\nexport const KEY_TAB\t\t\t= 9;\n\nexport const IS_MAC      \t\t= typeof navigator === 'undefined' ? false : /Mac/.test(navigator.userAgent);\nexport const KEY_SHORTCUT\t\t= IS_MAC ? 'metaKey' : 'ctrlKey'; // ctrl key or apple key for ma\n", "\nexport default {\n\toptions: [],\n\toptgroups: [],\n\n\tplugins: [],\n\tdelimiter: ',',\n\tsplitOn: null, // regexp or string for splitting up values from a paste command\n\tpersist: true,\n\tdiacritics: true,\n\tcreate: null,\n\tcreateOnBlur: false,\n\tcreateFilter: null,\n\thighlight: true,\n\topenOnFocus: true,\n\tshouldOpen: null,\n\tmaxOptions: 50,\n\tmaxItems: null,\n\thideSelected: null,\n\tduplicates: false,\n\taddPrecedence: false,\n\tselectOnTab: false,\n\tpreload: null,\n\tallowEmptyOption: false,\n\t//closeAfterSelect: false,\n\n\tloadThrottle: 300,\n\tloadingClass: 'loading',\n\n\tdataAttr: null, //'data-data',\n\toptgroupField: 'optgroup',\n\tvalueField: 'value',\n\tlabelField: 'text',\n\tdisabledField: 'disabled',\n\toptgroupLabelField: 'label',\n\toptgroupValueField: 'value',\n\tlockOptgroupOrder: false,\n\n\tsortField: '$order',\n\tsearchField: ['text'],\n\tsearchConjunction: 'and',\n\n\tmode: null,\n\twrapperClass: 'ts-wrapper',\n\tcontrolClass: 'ts-control',\n\tdropdownClass: 'ts-dropdown',\n\tdropdownContentClass: 'ts-dropdown-content',\n\titemClass: 'item',\n\toptionClass: 'option',\n\n\tdropdownParent: null,\n\tcontrolInput: '<input type=\"text\" autocomplete=\"off\" size=\"1\" />',\n\n\tcopyClassesToDropdown: false,\n\n\tplaceholder: null,\n\thidePlaceholder: null,\n\n\tshouldLoad: function(query:string):boolean{\n\t\treturn query.length > 0;\n\t},\n\n\t/*\n\tload                 : null, // function(query, callback) { ... }\n\tscore                : null, // function(search) { ... }\n\tonInitialize         : null, // function() { ... }\n\tonChange             : null, // function(value) { ... }\n\tonItemAdd            : null, // function(value, $item) { ... }\n\tonItemRemove         : null, // function(value) { ... }\n\tonClear              : null, // function() { ... }\n\tonOptionAdd          : null, // function(value, data) { ... }\n\tonOptionRemove       : null, // function(value) { ... }\n\tonOptionClear        : null, // function() { ... }\n\tonOptionGroupAdd     : null, // function(id, data) { ... }\n\tonOptionGroupRemove  : null, // function(id) { ... }\n\tonOptionGroupClear   : null, // function() { ... }\n\tonDropdownOpen       : null, // function(dropdown) { ... }\n\tonDropdownClose      : null, // function(dropdown) { ... }\n\tonType               : null, // function(str) { ... }\n\tonDelete             : null, // function(values) { ... }\n\t*/\n\n\trender: {\n\t\t/*\n\t\titem: null,\n\t\toptgroup: null,\n\t\toptgroup_header: null,\n\t\toption: null,\n\t\toption_create: null\n\t\t*/\n\t}\n};\n", "\nimport TomSelect from './tom-select';\nimport { TomLoadCallback } from './types/index';\n\n\n/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n *   'str'     -> 'str'\n *   null      -> ''\n *   undefined -> ''\n *   true      -> '1'\n *   false     -> '0'\n *   0         -> '0'\n *   1         -> '1'\n *\n */\nexport const hash_key = (value:undefined|null|boolean|string|number):string|null => {\n\tif (typeof value === 'undefined' || value === null) return null;\n\treturn get_hash(value);\n};\n\nexport const get_hash = (value:boolean|string|number):string => {\n\tif (typeof value === 'boolean') return value ? '1' : '0';\n\treturn value + '';\n};\n\n/**\n * Escapes a string for use within HTML.\n *\n */\nexport const escape_html = (str:string):string => {\n\treturn (str + '')\n\t\t.replace(/&/g, '&amp;')\n\t\t.replace(/</g, '&lt;')\n\t\t.replace(/>/g, '&gt;')\n\t\t.replace(/\"/g, '&quot;');\n};\n\n\n/**\n * Debounce the user provided load function\n *\n */\nexport const loadDebounce = (fn:(value:string,callback:TomLoadCallback) => void,delay:number) => {\n\tvar timeout: null|ReturnType<typeof setTimeout>;\n\treturn function(this:TomSelect, value:string,callback:TomLoadCallback) {\n\t\tvar self = this;\n\n\t\tif( timeout ){\n\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\ttimeout = setTimeout(function() {\n\t\t\ttimeout = null;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tfn.call(self, value, callback);\n\n\t\t}, delay);\n\t};\n};\n\n\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n */\nexport const debounce_events = ( self:TomSelect, types:string[], fn:() => void ) => {\n\tvar type:string;\n\tvar trigger = self.trigger;\n\tvar event_args:{ [key: string]: any } = {};\n\n\t// override trigger method\n\tself.trigger = function(){\n\t\tvar type = arguments[0];\n\t\tif (types.indexOf(type) !== -1) {\n\t\t\tevent_args[type] = arguments;\n\t\t} else {\n\t\t\treturn trigger.apply(self, arguments);\n\t\t}\n\t};\n\n\t// invoke provided function\n\tfn.apply(self, []);\n\tself.trigger = trigger;\n\n\t// trigger queued events\n\tfor( type of types ){\n\t\tif( type in event_args ){\n\t\t\ttrigger.apply(self, event_args[type]);\n\t\t}\n\t}\n};\n\n\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n *   - start\n *   - length\n *\n */\nexport const getSelection = (input:HTMLInputElement):{ start: number; length: number } => {\n\treturn {\n\t\tstart\t: input.selectionStart || 0,\n\t\tlength\t: (input.selectionEnd||0) - (input.selectionStart||0),\n\t};\n};\n\n\n/**\n * Prevent default\n *\n */\nexport const preventDefault = (evt?:Event, stop:boolean=false):void => {\n\tif( evt ){\n\t\tevt.preventDefault();\n\t\tif( stop ){\n\t\t\tevt.stopPropagation();\n\t\t}\n\t}\n}\n\n\n/**\n * Add event helper\n *\n */\nexport const addEvent = (target:EventTarget, type:string, callback:EventListenerOrEventListenerObject, options?:object):void => {\n\ttarget.addEventListener(type,callback,options);\n};\n\n\n/**\n * Return true if the requested key is down\n * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n * The current evt may not always set ( eg calling advanceSelection() )\n *\n */\nexport const isKeyDown = ( key_name:keyof (KeyboardEvent|MouseEvent), evt?:KeyboardEvent|MouseEvent ) => {\n\n\tif( !evt ){\n\t\treturn false;\n\t}\n\n\tif( !evt[key_name] ){\n\t\treturn false;\n\t}\n\n\tvar count = (evt.altKey?1:0) + (evt.ctrlKey?1:0) + (evt.shiftKey?1:0) + (evt.metaKey?1:0);\n\n\tif( count === 1 ){\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Get the id of an element\n * If the id attribute is not set, set the attribute with the given id\n *\n */\nexport const getId = (el:Element,id:string) => {\n\tconst existing_id = el.getAttribute('id');\n\tif( existing_id ){\n\t\treturn existing_id;\n\t}\n\n\tel.setAttribute('id',id);\n\treturn id;\n};\n\n\n/**\n * Returns a string with backslashes added before characters that need to be escaped.\n */\nexport const addSlashes = (str:string):string => {\n\treturn str.replace(/[\\\\\"']/g, '\\\\$&');\n};\n\n/**\n *\n */\nexport const append = ( parent:Element|DocumentFragment, node: string|Node|null|undefined ):void =>{\n\tif( node ) parent.append(node);\n};\n", "import defaults from './defaults';\nimport { hash_key } from './utils';\nimport { TomOption, TomSettings, RecursivePartial } from './types/index';\nimport { iterate } from '@orchidjs/sifter/lib/utils';\nimport { TomInput } from './types/index';\n\n\nexport default function getSettings( input:TomInput, settings_user:RecursivePartial<TomSettings>):TomSettings{\n\tvar settings:TomSettings\t= Object.assign({}, defaults, settings_user);\n\n\tvar attr_data\t\t\t\t= settings.dataAttr;\n\tvar field_label\t\t\t\t= settings.labelField;\n\tvar field_value\t\t\t\t= settings.valueField;\n\tvar field_disabled\t\t\t= settings.disabledField;\n\tvar field_optgroup\t\t\t= settings.optgroupField;\n\tvar field_optgroup_label\t= settings.optgroupLabelField;\n\tvar field_optgroup_value\t= settings.optgroupValueField;\n\n\tvar tag_name\t\t\t\t= input.tagName.toLowerCase();\n\tvar placeholder\t\t\t\t= input.getAttribute('placeholder') || input.getAttribute('data-placeholder');\n\n\tif (!placeholder && !settings.allowEmptyOption) {\n\t\tlet option\t\t= input.querySelector('option[value=\"\"]');\n\t\tif( option ){\n\t\t\tplaceholder = option.textContent;\n\t\t}\n\n\t}\n\n\tvar settings_element:{\n\t\tplaceholder\t: null|string,\n\t\toptions\t\t: TomOption[],\n\t\toptgroups\t: TomOption[],\n\t\titems\t\t: string[],\n\t\tmaxItems\t: null|number,\n\t} = {\n\t\tplaceholder\t: placeholder,\n\t\toptions\t\t: [],\n\t\toptgroups\t: [],\n\t\titems\t\t: [],\n\t\tmaxItems\t: null,\n\t};\n\n\n\t/**\n\t * Initialize from a <select> element.\n\t *\n\t */\n\tvar init_select = () => {\n\t\tvar tagName;\n\t\tvar options = settings_element.options;\n\t\tvar optionsMap:{[key:string]:any} = {};\n\t\tvar group_count = 1;\n\n\t\tvar readData = (el:HTMLElement):TomOption => {\n\n\t\t\tvar data\t= Object.assign({},el.dataset); // get plain object from DOMStringMap\n\t\t\tvar json\t= attr_data && data[attr_data];\n\n\t\t\tif( typeof json === 'string' && json.length ){\n\t\t\t\tdata = Object.assign(data,JSON.parse(json));\n\t\t\t}\n\n\t\t\treturn data;\n\t\t};\n\n\t\tvar addOption = (option:HTMLOptionElement, group?:string) => {\n\n\t\t\tvar value = hash_key(option.value);\n\t\t\tif ( value == null ) return;\n\t\t\tif ( !value && !settings.allowEmptyOption) return;\n\n\t\t\t// if the option already exists, it's probably been\n\t\t\t// duplicated in another optgroup. in this case, push\n\t\t\t// the current group to the \"optgroup\" property on the\n\t\t\t// existing option so that it's rendered in both places.\n\t\t\tif (optionsMap.hasOwnProperty(value)) {\n\t\t\t\tif (group) {\n\t\t\t\t\tvar arr = optionsMap[value][field_optgroup];\n\t\t\t\t\tif (!arr) {\n\t\t\t\t\t\toptionsMap[value][field_optgroup] = group;\n\t\t\t\t\t} else if (!Array.isArray(arr)) {\n\t\t\t\t\t\toptionsMap[value][field_optgroup] = [arr, group];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tarr.push(group);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}else{\n\n\t\t\t\tvar option_data             = readData(option);\n\t\t\t\toption_data[field_label]    = option_data[field_label] || option.textContent;\n\t\t\t\toption_data[field_value]    = option_data[field_value] || value;\n\t\t\t\toption_data[field_disabled] = option_data[field_disabled] || option.disabled;\n\t\t\t\toption_data[field_optgroup] = option_data[field_optgroup] || group;\n\t\t\t\toption_data.$option\t\t\t= option;\n\n\t\t\t\toptionsMap[value] = option_data;\n\t\t\t\toptions.push(option_data);\n\t\t\t}\n\n\t\t\tif( option.selected ){\n\t\t\t\tsettings_element.items.push(value);\n\t\t\t}\n\t\t};\n\n\t\tvar addGroup = ( optgroup:HTMLOptGroupElement ) => {\n\t\t\tvar id:string, optgroup_data\n\n\t\t\toptgroup_data\t\t\t\t\t\t\t= readData(optgroup);\n\t\t\toptgroup_data[field_optgroup_label]\t\t= optgroup_data[field_optgroup_label] || optgroup.getAttribute('label') || '';\n\t\t\toptgroup_data[field_optgroup_value]\t\t= optgroup_data[field_optgroup_value] || group_count++;\n\t\t\toptgroup_data[field_disabled]\t\t\t= optgroup_data[field_disabled] || optgroup.disabled;\n\t\t\tsettings_element.optgroups.push(optgroup_data);\n\n\t\t\tid = optgroup_data[field_optgroup_value];\n\n\t\t\titerate(optgroup.children, (option)=>{\n\t\t\t\taddOption(option as HTMLOptionElement, id);\n\t\t\t});\n\n\t\t};\n\n\t\tsettings_element.maxItems = input.hasAttribute('multiple') ? null : 1;\n\n\t\titerate(input.children,(child)=>{\n\t\t\ttagName = child.tagName.toLowerCase();\n\t\t\tif (tagName === 'optgroup') {\n\t\t\t\taddGroup(child as HTMLOptGroupElement);\n\t\t\t} else if (tagName === 'option') {\n\t\t\t\taddOption(child as HTMLOptionElement);\n\t\t\t}\n\t\t});\n\n\t};\n\n\n\t/**\n\t * Initialize from a <input type=\"text\"> element.\n\t *\n\t */\n\tvar init_textbox = () => {\n\t\tconst data_raw = input.getAttribute(attr_data);\n\n\t\tif (!data_raw) {\n\t\t\tvar value = input.value.trim() || '';\n\t\t\tif (!settings.allowEmptyOption && !value.length) return;\n\t\t\tconst values = value.split(settings.delimiter);\n\n\t\t\titerate( values, (value) => {\n\t\t\t\tconst option:TomOption = {};\n\t\t\t\toption[field_label] = value;\n\t\t\t\toption[field_value] = value;\n\t\t\t\tsettings_element.options.push(option);\n\t\t\t});\n\t\t\tsettings_element.items = values;\n\t\t} else {\n\t\t\tsettings_element.options = JSON.parse(data_raw);\n\t\t\titerate( settings_element.options, (opt) => {\n\t\t\t\tsettings_element.items.push(opt[field_value]);\n\t\t\t});\n\t\t}\n\t};\n\n\n\tif (tag_name === 'select') {\n\t\tinit_select();\n\t} else {\n\t\tinit_textbox();\n\t}\n\n\treturn Object.assign( {}, defaults, settings_element, settings_user) as TomSettings;\n};\n", "\nimport MicroEvent from './contrib/microevent';\nimport MicroPlugin from './contrib/microplugin';\nimport { Sifter, iterate } from '@orchidjs/sifter';\nimport { escape_regex } from '@orchidjs/unicode-variants';\nimport { TomInput, TomArgObject, TomOption, TomOptions, TomCreateFilter, TomCreateCallback, TomItem, TomSettings, TomTemplateNames, TomClearFilter, RecursivePartial } from './types/index';\nimport {highlight, removeHighlight} from './contrib/highlight';\nimport * as constants from './constants';\nimport getSettings from './getSettings';\nimport {\n\thash_key,\n\tget_hash,\n\tescape_html,\n\tdebounce_events,\n\tgetSelection,\n\tpreventDefault,\n\taddEvent,\n\tloadDebounce,\n\tisKeyDown,\n\tgetId,\n\taddSlashes,\n\tappend\n} from './utils';\n\nimport {\n\tgetDom,\n\tisHtmlString,\n\tescapeQuery,\n\ttriggerEvent,\n\tapplyCSS,\n\taddClasses,\n\tremoveClasses,\n\tparentMatch,\n\tgetTail,\n\tisEmptyObject,\n\tnodeIndex,\n\tsetAttr,\n\treplaceNode\n} from './vanilla';\n\nvar instance_i = 0;\n\nexport default class TomSelect extends MicroPlugin(MicroEvent){\n\n\tpublic control_input\t\t\t: HTMLInputElement;\n\tpublic wrapper\t\t\t\t\t: HTMLElement;\n\tpublic dropdown\t\t\t\t\t: HTMLElement;\n\tpublic control\t\t\t\t\t: HTMLElement;\n\tpublic dropdown_content\t\t\t: HTMLElement;\n\tpublic focus_node\t\t\t\t: HTMLElement;\n\n\tpublic order\t\t\t\t\t: number = 0;\n\tpublic settings\t\t\t\t\t: TomSettings;\n\tpublic input\t\t\t\t\t: TomInput;\n\tpublic tabIndex\t\t\t\t\t: number;\n\tpublic is_select_tag\t\t\t: boolean;\n\tpublic rtl\t\t\t\t\t\t: boolean;\n\tprivate inputId\t\t\t\t\t: string;\n\n\tprivate _destroy\t\t\t\t!: () => void;\n\tpublic sifter\t\t\t\t\t: Sifter;\n\n\n\tpublic isOpen\t\t\t\t\t: boolean = false;\n\tpublic isDisabled\t\t\t\t: boolean = false;\n\tpublic isRequired\t\t\t\t: boolean;\n\tpublic isInvalid\t\t\t\t: boolean = false; // @deprecated 1.8\n\tpublic isValid\t\t\t\t\t: boolean = true;\n\tpublic isLocked\t\t\t\t\t: boolean = false;\n\tpublic isFocused\t\t\t\t: boolean = false;\n\tpublic isInputHidden\t\t\t: boolean = false;\n\tpublic isSetup\t\t\t\t\t: boolean = false;\n\tpublic ignoreFocus\t\t\t\t: boolean = false;\n\tpublic ignoreHover\t\t\t\t: boolean = false;\n\tpublic hasOptions\t\t\t\t: boolean = false;\n\tpublic currentResults\t\t\t?: ReturnType<Sifter['search']>;\n\tpublic lastValue\t\t\t\t: string = '';\n\tpublic caretPos\t\t\t\t\t: number = 0;\n\tpublic loading\t\t\t\t\t: number = 0;\n\tpublic loadedSearches\t\t\t: { [key: string]: boolean } = {};\n\n\tpublic activeOption\t\t\t\t: null|HTMLElement = null;\n\tpublic activeItems\t\t\t\t: TomItem[] = [];\n\n\tpublic optgroups\t\t\t\t: TomOptions = {};\n\tpublic options\t\t\t\t\t: TomOptions = {};\n\tpublic userOptions\t\t\t\t: {[key:string]:boolean} = {};\n\tpublic items\t\t\t\t\t: string[] = [];\n\n\n\n\tconstructor( input_arg: string|TomInput, user_settings:RecursivePartial<TomSettings> ){\n\t\tsuper();\n\n\t\tinstance_i++;\n\n\t\tvar dir;\n\t\tvar input\t\t\t\t= getDom( input_arg ) as TomInput;\n\n\t\tif( input.tomselect ){\n\t\t\tthrow new Error('Tom Select already initialized on this element');\n\t\t}\n\n\n\t\tinput.tomselect\t\t\t= this;\n\n\n\t\t// detect rtl environment\n\t\tvar computedStyle\t\t= window.getComputedStyle && window.getComputedStyle(input, null);\n\t\tdir\t\t\t\t\t\t= computedStyle.getPropertyValue('direction');\n\n\t\t// setup default state\n\t\tconst settings\t\t\t= getSettings( input, user_settings );\n\t\tthis.settings\t\t\t= settings;\n\t\tthis.input\t\t\t\t= input;\n\t\tthis.tabIndex\t\t\t= input.tabIndex || 0;\n\t\tthis.is_select_tag\t\t= input.tagName.toLowerCase() === 'select';\n\t\tthis.rtl\t\t\t\t= /rtl/i.test(dir);\n\t\tthis.inputId\t\t\t= getId(input, 'tomselect-'+instance_i);\n\t\tthis.isRequired\t\t\t= input.required;\n\n\n\t\t// search system\n\t\tthis.sifter = new Sifter(this.options, {diacritics: settings.diacritics});\n\n\t\t// option-dependent defaults\n\t\tsettings.mode = settings.mode || (settings.maxItems === 1 ? 'single' : 'multi');\n\t\tif (typeof settings.hideSelected !== 'boolean') {\n\t\t\tsettings.hideSelected = settings.mode === 'multi';\n\t\t}\n\n\t\tif( typeof settings.hidePlaceholder !== 'boolean' ){\n\t\t\tsettings.hidePlaceholder = settings.mode !== 'multi';\n\t\t}\n\n\t\t// set up createFilter callback\n\t\tvar filter = settings.createFilter;\n\t\tif( typeof filter !== 'function' ){\n\n\t\t\tif( typeof filter === 'string' ){\n\t\t\t\tfilter = new RegExp(filter);\n\t\t\t}\n\n\t\t\tif( filter instanceof RegExp ){\n\t\t\t\tsettings.createFilter = (input) => (filter as RegExp).test(input);\n\t\t\t}else{\n\t\t\t\tsettings.createFilter = (value) => {\n\t\t\t\t\treturn this.settings.duplicates || !this.options[value];\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\n\t\tthis.initializePlugins(settings.plugins);\n\t\tthis.setupCallbacks();\n\t\tthis.setupTemplates();\n\n\n\t\t// Create all elements\n\t\tconst wrapper\t\t\t= getDom('<div>');\n\t\tconst control\t\t\t= getDom('<div>');\n\t\tconst dropdown\t\t\t= this._render('dropdown');\n\t\tconst dropdown_content\t= getDom(`<div role=\"listbox\" tabindex=\"-1\">`);\n\n\t\tconst classes\t\t\t= this.input.getAttribute('class') || '';\n\t\tconst inputMode\t\t\t= settings.mode;\n\n\t\tvar control_input: HTMLInputElement;\n\n\n\t\taddClasses( wrapper, settings.wrapperClass, classes, inputMode);\n\n\n\t\taddClasses(control,settings.controlClass);\n\t\tappend( wrapper, control );\n\n\n\t\taddClasses(dropdown, settings.dropdownClass, inputMode);\n\t\tif( settings.copyClassesToDropdown ){\n\t\t\taddClasses( dropdown, classes);\n\t\t}\n\n\n\t\taddClasses(dropdown_content, settings.dropdownContentClass);\n\t\tappend( dropdown, dropdown_content );\n\n\t\tgetDom( settings.dropdownParent || wrapper ).appendChild( dropdown );\n\n\n\t\t// default controlInput\n\t\tif( isHtmlString(settings.controlInput) ){\n\t\t\tcontrol_input\t\t= getDom(settings.controlInput ) as HTMLInputElement;\n\n\t\t\t// set attributes\n\t\t\tvar attrs = ['autocorrect','autocapitalize','autocomplete'];\n\t\t\titerate(attrs,(attr:string) => {\n\t\t\t\tif( input.getAttribute(attr) ){\n\t\t\t\t\tsetAttr(control_input,{[attr]:input.getAttribute(attr)});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcontrol_input.tabIndex = -1;\n\t\t\tcontrol.appendChild( control_input );\n\t\t\tthis.focus_node\t\t= control_input;\n\n\t\t// dom element\n\t\t}else if( settings.controlInput ){\n\t\t\tcontrol_input\t\t= getDom( settings.controlInput ) as HTMLInputElement;\n\t\t\tthis.focus_node\t\t= control_input;\n\n\t\t}else{\n\t\t\tcontrol_input\t\t= getDom('<input/>') as HTMLInputElement;\n\t\t\tthis.focus_node\t\t= control;\n\t\t}\n\n\t\tthis.wrapper\t\t\t= wrapper;\n\t\tthis.dropdown\t\t\t= dropdown;\n\t\tthis.dropdown_content\t= dropdown_content;\n\t\tthis.control \t\t\t= control;\n\t\tthis.control_input\t\t= control_input;\n\n\t\tthis.setup();\n\t}\n\n\t/**\n\t * set up event bindings.\n\t *\n\t */\n\tsetup(){\n\n\t\tconst self = this;\n\t\tconst settings\t\t\t\t= self.settings;\n\t\tconst control_input\t\t\t= self.control_input;\n\t\tconst dropdown\t\t\t\t= self.dropdown;\n\t\tconst dropdown_content\t\t= self.dropdown_content;\n\t\tconst wrapper\t\t\t\t= self.wrapper;\n\t\tconst control\t\t\t\t= self.control;\n\t\tconst input\t\t\t\t\t= self.input;\n\t\tconst focus_node\t\t\t= self.focus_node;\n\t\tconst passive_event\t\t\t= { passive: true };\n\t\tconst listboxId\t\t\t\t= self.inputId +'-ts-dropdown';\n\n\n\t\tsetAttr(dropdown_content,{\n\t\t\tid: listboxId\n\t\t});\n\n\t\tsetAttr(focus_node,{\n\t\t\trole:'combobox',\n\t\t\t'aria-haspopup':'listbox',\n\t\t\t'aria-expanded':'false',\n\t\t\t'aria-controls':listboxId\n\t\t});\n\n\t\tconst control_id\t= getId(focus_node,self.inputId + '-ts-control');\n\t\tconst query\t\t\t= \"label[for='\"+escapeQuery(self.inputId)+\"']\";\n\t\tconst label\t\t\t= document.querySelector(query);\n\t\tconst label_click\t= self.focus.bind(self);\n\t\tif( label ){\n\t\t\taddEvent(label,'click', label_click );\n\t\t\tsetAttr(label,{for:control_id});\n\t\t\tconst label_id = getId(label,self.inputId+'-ts-label');\n\t\t\tsetAttr(focus_node,{'aria-labelledby':label_id});\n\t\t\tsetAttr(dropdown_content,{'aria-labelledby':label_id});\n\t\t}\n\n\t\twrapper.style.width = input.style.width;\n\n\t\tif (self.plugins.names.length) {\n\t\t\tconst classes_plugins = 'plugin-' + self.plugins.names.join(' plugin-');\n\t\t\taddClasses( [wrapper,dropdown], classes_plugins);\n\t\t}\n\n\t\tif ((settings.maxItems === null || settings.maxItems > 1) && self.is_select_tag ){\n\t\t\tsetAttr(input,{multiple:'multiple'});\n\t\t}\n\n\t\tif (settings.placeholder) {\n\t\t\tsetAttr(control_input,{placeholder:settings.placeholder});\n\t\t}\n\n\t\t// if splitOn was not passed in, construct it from the delimiter to allow pasting universally\n\t\tif (!settings.splitOn && settings.delimiter) {\n\t\t\tsettings.splitOn = new RegExp('\\\\s*' + escape_regex(settings.delimiter) + '+\\\\s*');\n\t\t}\n\n\t\t// debounce user defined load() if loadThrottle > 0\n\t\t// after initializePlugins() so plugins can create/modify user defined loaders\n\t\tif( settings.load && settings.loadThrottle ){\n\t\t\tsettings.load = loadDebounce(settings.load,settings.loadThrottle)\n\t\t}\n\n\t\tself.control_input.type\t= input.type;\n\n\t\taddEvent(dropdown,'mousemove', () => {\n\t\t\tself.ignoreHover = false;\n\t\t});\n\n\t\taddEvent(dropdown,'mouseenter', (e) => {\n\n\t\t\tvar target_match = parentMatch(e.target as HTMLElement, '[data-selectable]', dropdown);\n\t\t\tif( target_match ) self.onOptionHover( e as MouseEvent, target_match );\n\n\t\t}, {capture:true});\n\n\t\t// clicking on an option should select it\n\t\taddEvent(dropdown,'click',(evt) => {\n\t\t\tconst option = parentMatch(evt.target as HTMLElement, '[data-selectable]');\n\t\t\tif( option ){\n\t\t\t\tself.onOptionSelect( evt as MouseEvent, option );\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t}\n\t\t});\n\n\t\taddEvent(control,'click', (evt) => {\n\n\t\t\tvar target_match = parentMatch( evt.target as HTMLElement, '[data-ts-item]', control);\n\t\t\tif( target_match && self.onItemSelect(evt as MouseEvent, target_match as TomItem) ){\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// retain focus (see control_input mousedown)\n\t\t\tif( control_input.value != '' ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tself.onClick();\n\t\t\tpreventDefault(evt,true);\n\t\t});\n\n\n\t\t// keydown on focus_node for arrow_down/arrow_up\n\t\taddEvent(focus_node,'keydown',\t\t(e) => self.onKeyDown(e as KeyboardEvent) );\n\n\t\t// keypress and input/keyup\n\t\taddEvent(control_input,'keypress',\t(e) => self.onKeyPress(e as KeyboardEvent) );\n\t\taddEvent(control_input,'input',\t\t(e) => self.onInput(e as KeyboardEvent) );\n\t\taddEvent(focus_node,'blur', \t\t(e) => self.onBlur(e as FocusEvent) );\n\t\taddEvent(focus_node,'focus',\t\t(e) => self.onFocus(e as MouseEvent) );\n\t\taddEvent(control_input,'paste',\t\t(e) => self.onPaste(e as MouseEvent) );\n\n\n\t\tconst doc_mousedown = (evt:Event) => {\n\n\t\t\t// blur if target is outside of this instance\n\t\t\t// dropdown is not always inside wrapper\n\t\t\tconst target = evt.composedPath()[0];\n\t\t\tif( !wrapper.contains(target as HTMLElement) && !dropdown.contains(target as HTMLElement) ){\n\t\t\t\tif (self.isFocused) {\n\t\t\t\t\tself.blur();\n\t\t\t\t}\n\t\t\t\tself.inputState();\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\t// retain focus by preventing native handling. if the\n\t\t\t// event target is the input it should not be modified.\n\t\t\t// otherwise, text selection within the input won't work.\n\t\t\t// Fixes bug #212 which is no covered by tests\n\t\t\tif( target == control_input && self.isOpen ){\n\t\t\t\tevt.stopPropagation();\n\n\t\t\t// clicking anywhere in the control should not blur the control_input (which would close the dropdown)\n\t\t\t}else{\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t}\n\n\t\t};\n\n\t\tconst win_scroll = () => {\n\t\t\tif (self.isOpen) {\n\t\t\t\tself.positionDropdown();\n\t\t\t}\n\t\t};\n\n\n\t\taddEvent(document,'mousedown', doc_mousedown);\n\t\taddEvent(window,'scroll', win_scroll, passive_event);\n\t\taddEvent(window,'resize', win_scroll, passive_event);\n\n\t\tthis._destroy = () => {\n\t\t\tdocument.removeEventListener('mousedown',doc_mousedown);\n\t\t\twindow.removeEventListener('scroll',win_scroll);\n\t\t\twindow.removeEventListener('resize',win_scroll);\n\t\t\tif( label ) label.removeEventListener('click',label_click);\n\t\t};\n\n\t\t// store original html and tab index so that they can be\n\t\t// restored when the destroy() method is called.\n\t\tthis.revertSettings = {\n\t\t\tinnerHTML : input.innerHTML,\n\t\t\ttabIndex : input.tabIndex\n\t\t};\n\n\n\t\tinput.tabIndex = -1;\n\t\tinput.insertAdjacentElement('afterend', self.wrapper);\n\n\t\tself.sync(false);\n\t\tsettings.items = [];\n\t\tdelete settings.optgroups;\n\t\tdelete settings.options;\n\n\t\taddEvent(input,'invalid', () => {\n\t\t\tif( self.isValid ){\n\t\t\t\tself.isValid = false;\n\t\t\t\tself.isInvalid = true;\n\t\t\t\tself.refreshState();\n\t\t\t}\n\t\t});\n\n\t\tself.updateOriginalInput();\n\t\tself.refreshItems();\n\t\tself.close(false);\n\t\tself.inputState();\n\t\tself.isSetup = true;\n\n\t\tif( input.disabled ){\n\t\t\tself.disable();\n\t\t}else{\n\t\t\tself.enable(); //sets tabIndex\n\t\t}\n\n\t\tself.on('change', this.onChange);\n\n\t\taddClasses(input,'tomselected','ts-hidden-accessible');\n\t\tself.trigger('initialize');\n\n\t\t// preload options\n\t\tif (settings.preload === true) {\n\t\t\tself.preload();\n\t\t}\n\n\t}\n\n\n\t/**\n\t * Register options and optgroups\n\t *\n\t */\n\tsetupOptions(options:TomOption[] = [], optgroups:TomOption[] = []){\n\n\t\t// build options table\n\t\tthis.addOptions(options);\n\n\n\t\t// build optgroup table\n\t\titerate( optgroups, (optgroup:TomOption) => {\n\t\t\tthis.registerOptionGroup(optgroup);\n\t\t});\n\t}\n\n\t/**\n\t * Sets up default rendering functions.\n\t */\n\tsetupTemplates() {\n\t\tvar self = this;\n\t\tvar field_label = self.settings.labelField;\n\t\tvar field_optgroup = self.settings.optgroupLabelField;\n\n\t\tvar templates = {\n\t\t\t'optgroup': (data:TomOption) => {\n\t\t\t\tlet optgroup = document.createElement('div');\n\t\t\t\toptgroup.className = 'optgroup';\n\t\t\t\toptgroup.appendChild(data.options);\n\t\t\t\treturn optgroup;\n\n\t\t\t},\n\t\t\t'optgroup_header': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div class=\"optgroup-header\">' + escape(data[field_optgroup]) + '</div>';\n\t\t\t},\n\t\t\t'option': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div>' + escape(data[field_label]) + '</div>';\n\t\t\t},\n\t\t\t'item': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div>' + escape(data[field_label]) + '</div>';\n\t\t\t},\n\t\t\t'option_create': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div class=\"create\">Add <strong>' + escape(data.input) + '</strong>&hellip;</div>';\n\t\t\t},\n\t\t\t'no_results':() => {\n\t\t\t\treturn '<div class=\"no-results\">No results found</div>';\n\t\t\t},\n\t\t\t'loading':() => {\n\t\t\t\treturn '<div class=\"spinner\"></div>';\n\t\t\t},\n\t\t\t'not_loading':() => {},\n\t\t\t'dropdown':() => {\n\t\t\t\treturn '<div></div>';\n\t\t\t}\n\t\t};\n\n\n\t\tself.settings.render = Object.assign({}, templates, self.settings.render);\n\t}\n\n\t/**\n\t * Maps fired events to callbacks provided\n\t * in the settings used when creating the control.\n\t */\n\tsetupCallbacks() {\n\t\tvar key, fn;\n\t\tvar callbacks:{[key:string]:string} = {\n\t\t\t'initialize'      : 'onInitialize',\n\t\t\t'change'          : 'onChange',\n\t\t\t'item_add'        : 'onItemAdd',\n\t\t\t'item_remove'     : 'onItemRemove',\n\t\t\t'item_select'     : 'onItemSelect',\n\t\t\t'clear'           : 'onClear',\n\t\t\t'option_add'      : 'onOptionAdd',\n\t\t\t'option_remove'   : 'onOptionRemove',\n\t\t\t'option_clear'    : 'onOptionClear',\n\t\t\t'optgroup_add'    : 'onOptionGroupAdd',\n\t\t\t'optgroup_remove' : 'onOptionGroupRemove',\n\t\t\t'optgroup_clear'  : 'onOptionGroupClear',\n\t\t\t'dropdown_open'   : 'onDropdownOpen',\n\t\t\t'dropdown_close'  : 'onDropdownClose',\n\t\t\t'type'            : 'onType',\n\t\t\t'load'            : 'onLoad',\n\t\t\t'focus'           : 'onFocus',\n\t\t\t'blur'            : 'onBlur'\n\t\t};\n\n\t\tfor (key in callbacks) {\n\n\t\t\tfn = this.settings[callbacks[key] as (keyof TomSettings)];\n\t\t\tif (fn) this.on(key, fn);\n\n\t\t}\n\t}\n\n\t/**\n\t * Sync the Tom Select instance with the original input or select\n\t *\n\t */\n\tsync(get_settings:boolean=true):void{\n\t\tconst self\t\t= this;\n\t\tconst settings\t= get_settings ? getSettings( self.input, {delimiter:self.settings.delimiter} as RecursivePartial<TomSettings> ) : self.settings;\n\n\t\tself.setupOptions(settings.options,settings.optgroups);\n\n\t\tself.setValue(settings.items||[],true); // silent prevents recursion\n\n\t\tself.lastQuery = null; // so updated options will be displayed in dropdown\n\t}\n\n\t/**\n\t * Triggered when the main control element\n\t * has a click event.\n\t *\n\t */\n\tonClick():void {\n\t\tvar self = this;\n\n\t\tif( self.activeItems.length > 0 ){\n\t\t\tself.clearActiveItems();\n\t\t\tself.focus();\n\t\t\treturn;\n\t\t}\n\n\t\tif( self.isFocused && self.isOpen ){\n\t\t\tself.blur();\n\t\t} else {\n\t\t\tself.focus();\n\t\t}\n\t}\n\n\t/**\n\t * @deprecated v1.7\n\t *\n\t */\n\tonMouseDown():void {}\n\n\t/**\n\t * Triggered when the value of the control has been changed.\n\t * This should propagate the event to the original DOM\n\t * input / select element.\n\t */\n\tonChange() {\n\t\ttriggerEvent(this.input, 'input');\n\t\ttriggerEvent(this.input, 'change');\n\t}\n\n\t/**\n\t * Triggered on <input> paste.\n\t *\n\t */\n\tonPaste(e:MouseEvent|KeyboardEvent):void {\n\t\tvar self = this;\n\n\t\tif( self.isInputHidden || self.isLocked ){\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\n\t\t// If a regex or string is included, this will split the pasted\n\t\t// input and create Items for each separate value\n\t\tif( !self.settings.splitOn ){\n\t\t\treturn;\n\t\t}\n\n\t\t// Wait for pasted text to be recognized in value\n\t\tsetTimeout(() => {\n\t\t\tvar pastedText = self.inputValue();\n\t\t\tif( !pastedText.match(self.settings.splitOn)){\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tvar splitInput = pastedText.trim().split(self.settings.splitOn);\n\t\t\titerate( splitInput, (piece:string) => {\n\n\t\t\t\tconst hash = hash_key(piece);\n\t\t\t\tif( hash ){\n\t\t\t\t\tif( this.options[piece] ){\n\t\t\t\t\t\tself.addItem(piece);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tself.createItem(piece);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}, 0);\n\n\t}\n\n\t/**\n\t * Triggered on <input> keypress.\n\t *\n\t */\n\tonKeyPress(e:KeyboardEvent):void {\n\t\tvar self = this;\n\t\tif(self.isLocked){\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\t\tvar character = String.fromCharCode(e.keyCode || e.which);\n\t\tif (self.settings.create && self.settings.mode === 'multi' && character === self.settings.delimiter) {\n\t\t\tself.createItem();\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\t}\n\n\t/**\n\t * Triggered on <input> keydown.\n\t *\n\t */\n\tonKeyDown(e:KeyboardEvent):void {\n\t\tvar self = this;\n\n\t\tself.ignoreHover = true;\n\n\t\tif (self.isLocked) {\n\t\t\tif (e.keyCode !== constants.KEY_TAB) {\n\t\t\t\tpreventDefault(e);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (e.keyCode) {\n\n\t\t\t// ctrl+A: select all\n\t\t\tcase constants.KEY_A:\n\t\t\t\tif( isKeyDown(constants.KEY_SHORTCUT,e) ){\n\t\t\t\t\tif( self.control_input.value == '' ){\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t\tself.selectAll();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// esc: close dropdown\n\t\t\tcase constants.KEY_ESC:\n\t\t\t\tif (self.isOpen) {\n\t\t\t\t\tpreventDefault(e,true);\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\t\t\t\tself.clearActiveItems();\n\t\t\t\treturn;\n\n\t\t\t// down: open dropdown or move selection down\n\t\t\tcase constants.KEY_DOWN:\n\t\t\t\tif (!self.isOpen && self.hasOptions) {\n\t\t\t\t\tself.open();\n\t\t\t\t} else if (self.activeOption) {\n\t\t\t\t\tlet next = self.getAdjacent(self.activeOption, 1);\n\t\t\t\t\tif (next) self.setActiveOption(next);\n\t\t\t\t}\n\t\t\t\tpreventDefault(e);\n\t\t\t\treturn;\n\n\t\t\t// up: move selection up\n\t\t\tcase constants.KEY_UP:\n\t\t\t\tif (self.activeOption) {\n\t\t\t\t\tlet prev = self.getAdjacent(self.activeOption, -1);\n\t\t\t\t\tif (prev) self.setActiveOption(prev);\n\t\t\t\t}\n\t\t\t\tpreventDefault(e);\n\t\t\t\treturn;\n\n\t\t\t// return: select active option\n\t\t\tcase constants.KEY_RETURN:\n\t\t\t\tif( self.canSelect(self.activeOption) ){\n\t\t\t\t\tself.onOptionSelect(e,self.activeOption!);\n\t\t\t\t\tpreventDefault(e);\n\n\t\t\t\t// if the option_create=null, the dropdown might be closed\n\t\t\t\t}else if (self.settings.create && self.createItem()) {\n\t\t\t\t\tpreventDefault(e);\n\n\t\t\t\t// don't submit form when searching for a value\n\t\t\t\t}else if( document.activeElement == self.control_input && self.isOpen ){\n\t\t\t\t\tpreventDefault(e);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\n\t\t\t// left: modifiy item selection to the left\n\t\t\tcase constants.KEY_LEFT:\n\t\t\t\tself.advanceSelection(-1, e);\n\t\t\t\treturn;\n\n\t\t\t// right: modifiy item selection to the right\n\t\t\tcase constants.KEY_RIGHT:\n\t\t\t\tself.advanceSelection(1, e);\n\t\t\t\treturn;\n\n\t\t\t// tab: select active option and/or create item\n\t\t\tcase constants.KEY_TAB:\n\n\t\t\t\tif( self.settings.selectOnTab ){\n\t\t\t\t\tif( self.canSelect(self.activeOption) ){\n\t\t\t\t\t\tself.onOptionSelect(e,self.activeOption!);\n\n\t\t\t\t\t\t// prevent default [tab] behaviour of jump to the next field\n\t\t\t\t\t\t// if select isFull, then the dropdown won't be open and [tab] will work normally\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t}\n\t\t\t\t\tif (self.settings.create && self.createItem()) {\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\n\t\t\t// delete|backspace: delete items\n\t\t\tcase constants.KEY_BACKSPACE:\n\t\t\tcase constants.KEY_DELETE:\n\t\t\t\tself.deleteSelection(e);\n\t\t\t\treturn;\n\t\t}\n\n\t\t// don't enter text in the control_input when active items are selected\n\t\tif( self.isInputHidden && !isKeyDown(constants.KEY_SHORTCUT,e) ){\n\t\t\tpreventDefault(e);\n\t\t}\n\t}\n\n\t/**\n\t * Triggered on <input> keyup.\n\t *\n\t */\n\tonInput(e:MouseEvent|KeyboardEvent):void {\n\t\tvar self = this;\n\n\t\tif( self.isLocked ){\n\t\t\treturn;\n\t\t}\n\n\t\tvar value = self.inputValue();\n\t\tif (self.lastValue !== value) {\n\t\t\tself.lastValue = value;\n\n\t\t\tif( self.settings.shouldLoad.call(self,value) ){\n\t\t\t\tself.load(value);\n\t\t\t}\n\n\t\t\tself.refreshOptions();\n\t\t\tself.trigger('type', value);\n\t\t}\n\t}\n\n\t/**\n\t * Triggered when the user rolls over\n\t * an option in the autocomplete dropdown menu.\n\t *\n\t */\n\tonOptionHover( evt:MouseEvent|KeyboardEvent, option:HTMLElement ):void{\n\t\tif( this.ignoreHover ) return;\n\t\tthis.setActiveOption(option, false);\n\t}\n\n\t/**\n\t * Triggered on <input> focus.\n\t *\n\t */\n\tonFocus(e?:MouseEvent|KeyboardEvent):void {\n\t\tvar self = this;\n\t\tvar wasFocused = self.isFocused;\n\n\t\tif (self.isDisabled) {\n\t\t\tself.blur();\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\n\t\tif (self.ignoreFocus) return;\n\t\tself.isFocused = true;\n\t\tif( self.settings.preload === 'focus' ) self.preload();\n\n\t\tif (!wasFocused) self.trigger('focus');\n\n\t\tif (!self.activeItems.length) {\n\t\t\tself.showInput();\n\t\t\tself.refreshOptions(!!self.settings.openOnFocus);\n\t\t}\n\n\t\tself.refreshState();\n\t}\n\n\t/**\n\t * Triggered on <input> blur.\n\t *\n\t */\n\tonBlur(e?:FocusEvent):void {\n\n\t\tif( document.hasFocus() === false ) return;\n\n\t\tvar self = this;\n\t\tif (!self.isFocused) return;\n\t\tself.isFocused = false;\n\t\tself.ignoreFocus = false;\n\n\t\tvar deactivate = () => {\n\t\t\tself.close();\n\t\t\tself.setActiveItem();\n\t\t\tself.setCaret(self.items.length);\n\t\t\tself.trigger('blur');\n\t\t};\n\n\t\tif (self.settings.create && self.settings.createOnBlur) {\n\t\t\tself.createItem(null, deactivate);\n\t\t} else {\n\t\t\tdeactivate();\n\t\t}\n\t}\n\n\n\t/**\n\t * Triggered when the user clicks on an option\n\t * in the autocomplete dropdown menu.\n\t *\n\t */\n\tonOptionSelect( evt:MouseEvent|KeyboardEvent, option:HTMLElement ){\n\t\tvar value, self = this;\n\n\n\t\t// should not be possible to trigger a option under a disabled optgroup\n\t\tif( option.parentElement && option.parentElement.matches('[data-disabled]') ){\n\t\t\treturn;\n\t\t}\n\n\n\t\tif( option.classList.contains('create') ){\n\t\t\tself.createItem(null, () => {\n\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tvalue = option.dataset.value;\n\t\t\tif (typeof value !== 'undefined') {\n\t\t\t\tself.lastQuery = null;\n\t\t\t\tself.addItem(value);\n\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\n\t\t\t\tif( !self.settings.hideSelected && evt.type && /click/.test(evt.type) ){\n\t\t\t\t\tself.setActiveOption(option);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Return true if the given option can be selected\n\t *\n\t */\n\tcanSelect(option:HTMLElement|null):boolean{\n\n\t\tif( this.isOpen && option && this.dropdown_content.contains(option) ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Triggered when the user clicks on an item\n\t * that has been selected.\n\t *\n\t */\n\tonItemSelect( evt?:MouseEvent, item?:TomItem ):boolean{\n\t\tvar self = this;\n\n\t\tif( !self.isLocked && self.settings.mode === 'multi' ){\n\t\t\tpreventDefault(evt);\n\t\t\tself.setActiveItem(item, evt);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determines whether or not to invoke\n\t * the user-provided option provider / loader\n\t *\n\t * Note, there is a subtle difference between\n\t * this.canLoad() and this.settings.shouldLoad();\n\t *\n\t *\t- settings.shouldLoad() is a user-input validator.\n\t *\tWhen false is returned, the not_loading template\n\t *\twill be added to the dropdown\n\t *\n\t *\t- canLoad() is lower level validator that checks\n\t * \tthe Tom Select instance. There is no inherent user\n\t *\tfeedback when canLoad returns false\n\t *\n\t */\n\tcanLoad(value:string):boolean{\n\n\t\tif( !this.settings.load ) return false;\n\t\tif( this.loadedSearches.hasOwnProperty(value) ) return false;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Invokes the user-provided option provider / loader.\n\t *\n\t */\n\tload(value:string):void {\n\t\tconst self = this;\n\n\t\tif( !self.canLoad(value) ) return;\n\n\t\taddClasses(self.wrapper,self.settings.loadingClass);\n\t\tself.loading++;\n\n\t\tconst callback = self.loadCallback.bind(self);\n\t\tself.settings.load.call(self, value, callback);\n\t}\n\n\t/**\n\t * Invoked by the user-provided option provider\n\t *\n\t */\n\tloadCallback( options:TomOption[], optgroups:TomOption[] ):void{\n\t\tconst self = this;\n\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\tself.lastQuery = null;\n\n\t\tself.clearActiveOption(); // when new results load, focus should be on first option\n\t\tself.setupOptions(options,optgroups);\n\n\t\tself.refreshOptions(self.isFocused && !self.isInputHidden);\n\n\t\tif (!self.loading) {\n\t\t\tremoveClasses(self.wrapper,self.settings.loadingClass);\n\t\t}\n\n\t\tself.trigger('load', options, optgroups);\n\t}\n\n\tpreload():void{\n\t\tvar classList = this.wrapper.classList;\n\t\tif( classList.contains('preloaded') ) return;\n\t\tclassList.add('preloaded');\n\t\tthis.load('');\n\t}\n\n\n\t/**\n\t * Sets the input field of the control to the specified value.\n\t *\n\t */\n\tsetTextboxValue(value:string = '') {\n\t\tvar input = this.control_input;\n\t\tvar changed = input.value !== value;\n\t\tif (changed) {\n\t\t\tinput.value = value;\n\t\t\ttriggerEvent(input,'update');\n\t\t\tthis.lastValue = value;\n\t\t}\n\t}\n\n\t/**\n\t * Returns the value of the control. If multiple items\n\t * can be selected (e.g. <select multiple>), this returns\n\t * an array. If only one item can be selected, this\n\t * returns a string.\n\t *\n\t */\n\tgetValue():string|string[] {\n\n\t\tif( this.is_select_tag && this.input.hasAttribute('multiple')) {\n\t\t\treturn this.items;\n\t\t}\n\n\t\treturn this.items.join(this.settings.delimiter);\n\t}\n\n\t/**\n\t * Resets the selected items to the given value.\n\t *\n\t */\n\tsetValue( value:string|string[], silent?:boolean ):void{\n\t\tvar events = silent ? [] : ['change'];\n\n\t\tdebounce_events(this, events,() => {\n\t\t\tthis.clear(silent);\n\t\t\tthis.addItems(value, silent);\n\t\t});\n\t}\n\n\n\t/**\n\t * Resets the number of max items to the given value\n\t *\n\t */\n\tsetMaxItems(value:null|number){\n\t\tif(value === 0) value = null; //reset to unlimited items.\n\t\tthis.settings.maxItems = value;\n\t\tthis.refreshState();\n\t}\n\n\t/**\n\t * Sets the selected item.\n\t *\n\t */\n\tsetActiveItem( item?:TomItem, e?:MouseEvent|KeyboardEvent ){\n\t\tvar self = this;\n\t\tvar eventName;\n\t\tvar i, begin, end, swap;\n\t\tvar last;\n\n\t\tif (self.settings.mode === 'single') return;\n\n\t\t// clear the active selection\n\t\tif( !item ){\n\t\t\tself.clearActiveItems();\n\t\t\tif (self.isFocused) {\n\t\t\t\tself.showInput();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// modify selection\n\t\teventName = e && e.type.toLowerCase();\n\n\t\tif (eventName === 'click' && isKeyDown('shiftKey',e) && self.activeItems.length) {\n\t\t\tlast\t= self.getLastActive();\n\t\t\tbegin\t= Array.prototype.indexOf.call(self.control.children, last);\n\t\t\tend\t\t= Array.prototype.indexOf.call(self.control.children, item);\n\n\t\t\tif (begin > end) {\n\t\t\t\tswap  = begin;\n\t\t\t\tbegin = end;\n\t\t\t\tend   = swap;\n\t\t\t}\n\t\t\tfor (i = begin; i <= end; i++) {\n\t\t\t\titem = self.control.children[i] as TomItem;\n\t\t\t\tif (self.activeItems.indexOf(item) === -1) {\n\t\t\t\t\tself.setActiveItemClass(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\tpreventDefault(e);\n\t\t} else if ((eventName === 'click' && isKeyDown(constants.KEY_SHORTCUT,e) ) || (eventName === 'keydown' && isKeyDown('shiftKey',e))) {\n\t\t\tif( item.classList.contains('active') ){\n\t\t\t\tself.removeActiveItem( item );\n\t\t\t} else {\n\t\t\t\tself.setActiveItemClass(item);\n\t\t\t}\n\t\t} else {\n\t\t\tself.clearActiveItems();\n\t\t\tself.setActiveItemClass(item);\n\t\t}\n\n\t\t// ensure control has focus\n\t\tself.hideInput();\n\t\tif (!self.isFocused) {\n\t\t\tself.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Set the active and last-active classes\n\t *\n\t */\n\tsetActiveItemClass( item:TomItem ){\n\t\tconst self = this;\n\t\tconst last_active = self.control.querySelector('.last-active');\n\t\tif( last_active ) removeClasses(last_active as HTMLElement,'last-active');\n\n\t\taddClasses(item,'active last-active');\n\t\tself.trigger('item_select', item);\n\t\tif( self.activeItems.indexOf(item) == -1 ){\n\t\t\tself.activeItems.push( item );\n\t\t}\n\t}\n\n\t/**\n\t * Remove active item\n\t *\n\t */\n\tremoveActiveItem( item:TomItem ){\n\t\tvar idx = this.activeItems.indexOf(item);\n\t\tthis.activeItems.splice(idx, 1);\n\t\tremoveClasses(item,'active');\n\t}\n\n\t/**\n\t * Clears all the active items\n\t *\n\t */\n\tclearActiveItems(){\n\t\tremoveClasses(this.activeItems,'active');\n\t\tthis.activeItems = [];\n\t}\n\n\t/**\n\t * Sets the selected item in the dropdown menu\n\t * of available options.\n\t *\n\t */\n\tsetActiveOption( option:null|HTMLElement,scroll:boolean=true ):void{\n\n\t\tif( option === this.activeOption ){\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clearActiveOption();\n\t\tif( !option ) return;\n\n\t\tthis.activeOption = option;\n\t\tsetAttr(this.focus_node,{'aria-activedescendant':option.getAttribute('id')});\n\t\tsetAttr(option,{'aria-selected':'true'});\n\t\taddClasses(option,'active');\n\t\tif( scroll ) this.scrollToOption(option);\n\t}\n\n\t/**\n\t * Sets the dropdown_content scrollTop to display the option\n\t *\n\t */\n\tscrollToOption( option:null|HTMLElement, behavior?:string ):void{\n\n\t\tif( !option ) return;\n\n\t\tconst content\t\t= this.dropdown_content;\n\t\tconst height_menu\t= content.clientHeight;\n\t\tconst scrollTop\t\t= content.scrollTop || 0;\n\t\tconst height_item\t= option.offsetHeight;\n\t\tconst y\t\t\t\t= option.getBoundingClientRect().top - content.getBoundingClientRect().top + scrollTop;\n\n\t\tif (y + height_item > height_menu + scrollTop) {\n\t\t\tthis.scroll(y - height_menu + height_item, behavior);\n\n\t\t} else if (y < scrollTop) {\n\t\t\tthis.scroll(y, behavior);\n\t\t}\n\t}\n\n\t/**\n\t * Scroll the dropdown to the given position\n\t *\n\t */\n\tscroll( scrollTop:number, behavior?:string ):void{\n\t\tconst content = this.dropdown_content;\n\t\tif( behavior ){\n\t\t\tcontent.style.scrollBehavior = behavior;\n\t\t}\n\t\tcontent.scrollTop = scrollTop;\n\t\tcontent.style.scrollBehavior = '';\n\t}\n\n\t/**\n\t * Clears the active option\n\t *\n\t */\n\tclearActiveOption(){\n\t\tif( this.activeOption ){\n\t\t\tremoveClasses(this.activeOption,'active');\n\t\t\tsetAttr(this.activeOption,{'aria-selected':null});\n\t\t}\n\t\tthis.activeOption = null;\n\t\tsetAttr(this.focus_node,{'aria-activedescendant':null});\n\t}\n\n\n\t/**\n\t * Selects all items (CTRL + A).\n\t */\n\tselectAll() {\n\t\tconst self = this;\n\n\t\tif (self.settings.mode === 'single') return;\n\n\t\tconst activeItems = self.controlChildren();\n\n\t\tif( !activeItems.length ) return;\n\n\t\tself.hideInput();\n\t\tself.close();\n\n\t\tself.activeItems = activeItems;\n\t\titerate( activeItems, (item:TomItem) => {\n\t\t\tself.setActiveItemClass(item);\n\t\t});\n\n\t}\n\n\t/**\n\t * Determines if the control_input should be in a hidden or visible state\n\t *\n\t */\n\tinputState(){\n\t\tvar self = this;\n\n\t\tif( !self.control.contains(self.control_input) ) return;\n\n\t\tsetAttr(self.control_input,{placeholder:self.settings.placeholder});\n\n\t\tif( self.activeItems.length > 0 || (!self.isFocused && self.settings.hidePlaceholder && self.items.length > 0) ){\n\t\t\tself.setTextboxValue();\n\t\t\tself.isInputHidden = true;\n\n\t\t}else{\n\n\t\t\tif( self.settings.hidePlaceholder && self.items.length > 0 ){\n\t\t\t\tsetAttr(self.control_input,{placeholder:''});\n\t\t\t}\n\t\t\tself.isInputHidden = false;\n\t\t}\n\n\t\tself.wrapper.classList.toggle('input-hidden', self.isInputHidden );\n\t}\n\n\t/**\n\t * Hides the input element out of view, while\n\t * retaining its focus.\n\t * @deprecated 1.3\n\t */\n\thideInput() {\n\t\tthis.inputState();\n\t}\n\n\t/**\n\t * Restores input visibility.\n\t * @deprecated 1.3\n\t */\n\tshowInput() {\n\t\tthis.inputState();\n\t}\n\n\t/**\n\t * Get the input value\n\t */\n\tinputValue(){\n\t\treturn this.control_input.value.trim();\n\t}\n\n\t/**\n\t * Gives the control focus.\n\t */\n\tfocus() {\n\t\tvar self = this;\n\t\tif (self.isDisabled) return;\n\n\t\tself.ignoreFocus = true;\n\n\t\tif( self.control_input.offsetWidth ){\n\t\t\tself.control_input.focus();\n\t\t}else{\n\t\t\tself.focus_node.focus();\n\t\t}\n\n\t\tsetTimeout(() => {\n\t\t\tself.ignoreFocus = false;\n\t\t\tself.onFocus();\n\t\t}, 0);\n\t}\n\n\t/**\n\t * Forces the control out of focus.\n\t *\n\t */\n\tblur():void {\n\t\tthis.focus_node.blur();\n\t\tthis.onBlur();\n\t}\n\n\t/**\n\t * Returns a function that scores an object\n\t * to show how good of a match it is to the\n\t * provided query.\n\t *\n\t * @return {function}\n\t */\n\tgetScoreFunction(query:string) {\n\t\treturn this.sifter.getScoreFunction(query, this.getSearchOptions());\n\t}\n\n\t/**\n\t * Returns search options for sifter (the system\n\t * for scoring and sorting results).\n\t *\n\t * @see https://github.com/orchidjs/sifter.js\n\t * @return {object}\n\t */\n\tgetSearchOptions() {\n\t\tvar settings = this.settings;\n\t\tvar sort = settings.sortField;\n\t\tif (typeof settings.sortField === 'string') {\n\t\t\tsort = [{field: settings.sortField}];\n\t\t}\n\n\t\treturn {\n\t\t\tfields      : settings.searchField,\n\t\t\tconjunction : settings.searchConjunction,\n\t\t\tsort        : sort,\n\t\t\tnesting     : settings.nesting\n\t\t};\n\t}\n\n\t/**\n\t * Searches through available options and returns\n\t * a sorted array of matches.\n\t *\n\t */\n\tsearch(query:string) : ReturnType<Sifter['search']>{\n\t\tvar result, calculateScore;\n\t\tvar self     = this;\n\t\tvar options  = this.getSearchOptions();\n\n\t\t// validate user-provided result scoring function\n\t\tif ( self.settings.score ){\n\t\t\tcalculateScore = self.settings.score.call(self,query);\n\t\t\tif (typeof calculateScore !== 'function') {\n\t\t\t\tthrow new Error('Tom Select \"score\" setting must be a function that returns a function');\n\t\t\t}\n\t\t}\n\n\t\t// perform search\n\t\tif (query !== self.lastQuery) {\n\t\t\tself.lastQuery\t\t\t= query;\n\t\t\tresult\t\t\t\t\t= self.sifter.search(query, Object.assign(options, {score: calculateScore}));\n\t\t\tself.currentResults\t\t= result;\n\t\t} else {\n\t\t\tresult\t\t\t\t\t= Object.assign( {}, self.currentResults);\n\t\t}\n\n\t\t// filter out selected items\n\t\tif( self.settings.hideSelected ){\n\t\t\tresult.items = result.items.filter((item) => {\n\t\t\t\tlet hashed = hash_key(item.id);\n\t\t\t\treturn !(hashed && self.items.indexOf(hashed) !== -1 );\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Refreshes the list of available options shown\n\t * in the autocomplete dropdown menu.\n\t *\n\t */\n\trefreshOptions( triggerDropdown:boolean = true ){\n\t\tvar i, j, k, n, optgroup, optgroups, html:DocumentFragment, has_create_option, active_group;\n\t\tvar create;\n\t\tconst groups: {[key:string]:DocumentFragment} = {};\n\n\t\tconst groups_order:string[]\t= [];\n\t\tvar self\t\t\t\t\t= this;\n\t\tvar query\t\t\t\t\t= self.inputValue();\n\t\tconst same_query\t\t\t= query === self.lastQuery || (query == '' && self.lastQuery == null);\n\t\tvar results\t\t\t\t\t= self.search(query);\n\t\tvar active_option\t\t\t= null;\n\t\tvar show_dropdown\t\t\t= self.settings.shouldOpen || false;\n\t\tvar dropdown_content\t\t= self.dropdown_content;\n\n\n\t\tif( same_query ){\n\t\t\tactive_option\t\t\t= self.activeOption;\n\n\t\t\tif( active_option ){\n\t\t\t\tactive_group = active_option.closest('[data-group]') as HTMLElement;\n\t\t\t}\n\t\t}\n\n\t\t// build markup\n\t\tn = results.items.length;\n\t\tif (typeof self.settings.maxOptions === 'number') {\n\t\t\tn = Math.min(n, self.settings.maxOptions);\n\t\t}\n\n\t\tif( n > 0 ){\n\t\t\tshow_dropdown = true;\n\t\t}\n\n\t\t// render and group available options individually\n\t\tfor (i = 0; i < n; i++) {\n\n\t\t\t// get option dom element\n\t\t\tlet item\t\t\t= results.items[i];\n\t\t\tif( !item ) continue;\n\n\t\t\tlet opt_value\t\t= item.id;\n\t\t\tlet option\t\t\t= self.options[opt_value];\n\n\t\t\tif( option === undefined ) continue;\n\n\t\t\tlet opt_hash\t\t= get_hash(opt_value);\n\t\t\tlet option_el\t\t= self.getOption(opt_hash,true) as HTMLElement;\n\n\t\t\t// toggle 'selected' class\n\t\t\tif( !self.settings.hideSelected ){\n\t\t\t\toption_el.classList.toggle('selected', self.items.includes(opt_hash) );\n\t\t\t}\n\n\t\t\toptgroup    = option[self.settings.optgroupField] || '';\n\t\t\toptgroups   = Array.isArray(optgroup) ? optgroup : [optgroup];\n\n\t\t\tfor (j = 0, k = optgroups && optgroups.length; j < k; j++) {\n\t\t\t\toptgroup = optgroups[j];\n\t\t\t\tif (!self.optgroups.hasOwnProperty(optgroup)) {\n\t\t\t\t\toptgroup = '';\n\t\t\t\t}\n\n\t\t\t\tlet group_fragment = groups[optgroup];\n\t\t\t\tif( group_fragment === undefined ){\n\t\t\t\t\tgroup_fragment = document.createDocumentFragment();\n\t\t\t\t\tgroups_order.push(optgroup);\n\t\t\t\t}\n\n\t\t\t\t// nodes can only have one parent, so if the option is in mutple groups, we need a clone\n\t\t\t\tif( j > 0 ){\n\t\t\t\t\toption_el = option_el.cloneNode(true) as HTMLElement;\n\t\t\t\t\tsetAttr(option_el,{id: option.$id+'-clone-'+j,'aria-selected':null});\n\t\t\t\t\toption_el.classList.add('ts-cloned');\n\t\t\t\t\tremoveClasses(option_el,'active');\n\n\n\t\t\t\t\t// make sure we keep the activeOption in the same group\n\t\t\t\t\tif( self.activeOption && self.activeOption.dataset.value == opt_value ){\n\t\t\t\t\t\tif( active_group && active_group.dataset.group === optgroup.toString() ){\n\t\t\t\t\t\t\tactive_option = option_el;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tgroup_fragment.appendChild(option_el);\n\t\t\t\tgroups[optgroup] = group_fragment;\n\t\t\t}\n\t\t}\n\n\t\t// sort optgroups\n\t\tif( self.settings.lockOptgroupOrder ){\n\t\t\tgroups_order.sort((a, b) => {\n\t\t\t\tconst grp_a\t\t= self.optgroups[a];\n\t\t\t\tconst grp_b\t\t= self.optgroups[b];\n\t\t\t\tconst a_order\t= grp_a && grp_a.$order || 0;\n\t\t\t\tconst b_order\t= grp_b && grp_b.$order || 0;\n\t\t\t\treturn a_order - b_order;\n\t\t\t});\n\t\t}\n\n\t\t// render optgroup headers & join groups\n\t\thtml = document.createDocumentFragment();\n\t\titerate( groups_order, (optgroup:string) => {\n\n\t\t\tlet group_fragment = groups[optgroup];\n\n\t\t\tif( !group_fragment || !group_fragment.children.length ) return;\n\n\t\t\tlet group_heading = self.optgroups[optgroup];\n\n\t\t\tif( group_heading !== undefined ){\n\n\t\t\t\tlet group_options = document.createDocumentFragment();\n\t\t\t\tlet header = self.render('optgroup_header', group_heading);\n\t\t\t\tappend( group_options, header );\n\t\t\t\tappend( group_options, group_fragment );\n\n\t\t\t\tlet group_html = self.render('optgroup', {group:group_heading,options:group_options} );\n\n\t\t\t\tappend( html, group_html );\n\n\t\t\t} else {\n\t\t\t\tappend( html, group_fragment );\n\t\t\t}\n\t\t});\n\n\t\tdropdown_content.innerHTML = '';\n\t\tappend( dropdown_content, html );\n\n\t\t// highlight matching terms inline\n\t\tif (self.settings.highlight) {\n\t\t\tremoveHighlight( dropdown_content );\n\t\t\tif (results.query.length && results.tokens.length) {\n\t\t\t\titerate( results.tokens, (tok) => {\n\t\t\t\t\thighlight( dropdown_content, tok.regex);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// helper method for adding templates to dropdown\n\t\tvar add_template = (template:TomTemplateNames) => {\n\t\t\tlet content = self.render(template,{input:query});\n\t\t\tif( content ){\n\t\t\t\tshow_dropdown = true;\n\t\t\t\tdropdown_content.insertBefore(content, dropdown_content.firstChild);\n\t\t\t}\n\t\t\treturn content;\n\t\t};\n\n\n\t\t// add loading message\n\t\tif( self.loading ){\n\t\t\tadd_template('loading');\n\n\t\t// invalid query\n\t\t}else if( !self.settings.shouldLoad.call(self,query) ){\n\t\t\tadd_template('not_loading');\n\n\t\t// add no_results message\n\t\t}else if( results.items.length === 0 ){\n\t\t\tadd_template('no_results');\n\n\t\t}\n\n\n\n\t\t// add create option\n\t\thas_create_option = self.canCreate(query);\n\t\tif (has_create_option) {\n\t\t\tcreate = add_template('option_create');\n\t\t}\n\n\n\t\t// activate\n\t\tself.hasOptions = results.items.length > 0 || has_create_option;\n\t\tif( show_dropdown ){\n\n\t\t\tif (results.items.length > 0) {\n\n\t\t\t\tif( !active_option && self.settings.mode === 'single' && self.items[0] != undefined ){\n\t\t\t\t\tactive_option = self.getOption(self.items[0]);\n\t\t\t\t}\n\n\t\t\t\tif( !dropdown_content.contains(active_option)  ){\n\n\t\t\t\t\tlet active_index = 0;\n\t\t\t\t\tif( create && !self.settings.addPrecedence ){\n\t\t\t\t\t\tactive_index = 1;\n\t\t\t\t\t}\n\t\t\t\t\tactive_option = self.selectable()[active_index] as HTMLElement;\n\t\t\t\t}\n\n\t\t\t}else if( create ){\n\t\t\t\tactive_option = create;\n\t\t\t}\n\n\t\t\tif( triggerDropdown && !self.isOpen ){\n\t\t\t\tself.open();\n\t\t\t\tself.scrollToOption(active_option,'auto');\n\t\t\t}\n\t\t\tself.setActiveOption(active_option);\n\n\t\t}else{\n\t\t\tself.clearActiveOption();\n\t\t\tif( triggerDropdown && self.isOpen ){\n\t\t\t\tself.close(false); // if create_option=null, we want the dropdown to close but not reset the textbox value\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Return list of selectable options\n\t *\n\t */\n\tselectable():NodeList{\n\t\treturn this.dropdown_content.querySelectorAll('[data-selectable]');\n\t}\n\n\n\n\t/**\n\t * Adds an available option. If it already exists,\n\t * nothing will happen. Note: this does not refresh\n\t * the options list dropdown (use `refreshOptions`\n\t * for that).\n\t *\n\t * Usage:\n\t *\n\t *   this.addOption(data)\n\t *\n\t */\n\taddOption( data:TomOption, user_created = false ):false|string {\n\t\tconst self = this;\n\n\t\t// @deprecated 1.7.7\n\t\t// use addOptions( array, user_created ) for adding multiple options\n\t\tif( Array.isArray(data) ){\n\t\t\tself.addOptions( data, user_created);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst key = hash_key(data[self.settings.valueField]);\n\t\tif( key === null || self.options.hasOwnProperty(key) ){\n\t\t\treturn false;\n\t\t}\n\n\t\tdata.$order\t\t\t= data.$order || ++self.order;\n\t\tdata.$id\t\t\t= self.inputId + '-opt-' + data.$order;\n\t\tself.options[key]\t= data;\n\t\tself.lastQuery\t\t= null;\n\n\t\tif( user_created ){\n\t\t\tself.userOptions[key] = user_created;\n\t\t\tself.trigger('option_add', key, data);\n\t\t}\n\n\t\treturn key;\n\t}\n\n\t/**\n\t * Add multiple options\n\t *\n\t */\n\taddOptions( data:TomOption[], user_created = false ):void{\n\t\titerate( data, (dat:TomOption) => {\n\t\t\tthis.addOption(dat, user_created);\n\t\t});\n\t}\n\n\t/**\n\t * @deprecated 1.7.7\n\t */\n\tregisterOption( data:TomOption ):false|string {\n\t\treturn this.addOption(data);\n\t}\n\n\t/**\n\t * Registers an option group to the pool of option groups.\n\t *\n\t * @return {boolean|string}\n\t */\n\tregisterOptionGroup(data:TomOption) {\n\t\tvar key = hash_key(data[this.settings.optgroupValueField]);\n\n\t\tif ( key === null ) return false;\n\n\t\tdata.$order = data.$order || ++this.order;\n\t\tthis.optgroups[key] = data;\n\t\treturn key;\n\t}\n\n\t/**\n\t * Registers a new optgroup for options\n\t * to be bucketed into.\n\t *\n\t */\n\taddOptionGroup(id:string, data:TomOption) {\n\t\tvar hashed_id;\n\t\tdata[this.settings.optgroupValueField] = id;\n\n\t\tif( hashed_id = this.registerOptionGroup(data) ){\n\t\t\tthis.trigger('optgroup_add', hashed_id, data);\n\t\t}\n\t}\n\n\t/**\n\t * Removes an existing option group.\n\t *\n\t */\n\tremoveOptionGroup(id:string) {\n\t\tif (this.optgroups.hasOwnProperty(id)) {\n\t\t\tdelete this.optgroups[id];\n\t\t\tthis.clearCache();\n\t\t\tthis.trigger('optgroup_remove', id);\n\t\t}\n\t}\n\n\t/**\n\t * Clears all existing option groups.\n\t */\n\tclearOptionGroups() {\n\t\tthis.optgroups = {};\n\t\tthis.clearCache();\n\t\tthis.trigger('optgroup_clear');\n\t}\n\n\t/**\n\t * Updates an option available for selection. If\n\t * it is visible in the selected items or options\n\t * dropdown, it will be re-rendered automatically.\n\t *\n\t */\n\tupdateOption(value:string, data:TomOption) {\n\t\tconst self = this;\n\t\tvar item_new;\n\t\tvar index_item;\n\n\t\tconst value_old\t\t= hash_key(value);\n\t\tconst value_new\t\t= hash_key(data[self.settings.valueField]);\n\n\t\t// sanity checks\n\t\tif( value_old === null ) return;\n\n\t\tconst data_old\t\t= self.options[value_old];\n\n\t\tif( data_old == undefined ) return;\n\t\tif( typeof value_new !== 'string' ) throw new Error('Value must be set in option data');\n\n\n\t\tconst option\t\t= self.getOption(value_old);\n\t\tconst item\t\t\t= self.getItem(value_old);\n\n\n\t\tdata.$order = data.$order || data_old.$order;\n\t\tdelete self.options[value_old];\n\n\t\t// invalidate render cache\n\t\t// don't remove existing node yet, we'll remove it after replacing it\n\t\tself.uncacheValue(value_new);\n\n\t\tself.options[value_new] = data;\n\n\t\t// update the option if it's in the dropdown\n\t\tif( option ){\n\t\t\tif( self.dropdown_content.contains(option) ){\n\n\t\t\t\tconst option_new\t= self._render('option', data);\n\t\t\t\treplaceNode(option, option_new);\n\n\t\t\t\tif( self.activeOption === option ){\n\t\t\t\t\tself.setActiveOption(option_new);\n\t\t\t\t}\n\t\t\t}\n\t\t\toption.remove();\n\t\t}\n\n\t\t// update the item if we have one\n\t\tif( item ){\n\t\t\tindex_item = self.items.indexOf(value_old);\n\t\t\tif (index_item !== -1) {\n\t\t\t\tself.items.splice(index_item, 1, value_new);\n\t\t\t}\n\n\t\t\titem_new\t= self._render('item', data);\n\n\t\t\tif( item.classList.contains('active') ) addClasses(item_new,'active');\n\n\t\t\treplaceNode( item, item_new);\n\t\t}\n\n\t\t// invalidate last query because we might have updated the sortField\n\t\tself.lastQuery = null;\n\t}\n\n\t/**\n\t * Removes a single option.\n\t *\n\t */\n\tremoveOption(value:string, silent?:boolean):void {\n\t\tconst self = this;\n\t\tvalue = get_hash(value);\n\n\t\tself.uncacheValue(value);\n\n\t\tdelete self.userOptions[value];\n\t\tdelete self.options[value];\n\t\tself.lastQuery = null;\n\t\tself.trigger('option_remove', value);\n\t\tself.removeItem(value, silent);\n\t}\n\n\t/**\n\t * Clears all options.\n\t */\n\tclearOptions(filter?:TomClearFilter ) {\n\n\t\tconst boundFilter = (filter || this.clearFilter).bind(this);\n\n\t\tthis.loadedSearches\t\t= {};\n\t\tthis.userOptions\t\t= {};\n\t\tthis.clearCache();\n\n\t\tconst selected:TomOptions\t= {};\n\t\titerate(this.options,(option:TomOption,key:string)=>{\n\t\t\tif( boundFilter(option,key as string) ){\n\t\t\t\tselected[key] = option;\n\t\t\t}\n\t\t});\n\n\t\tthis.options = this.sifter.items = selected;\n\t\tthis.lastQuery = null;\n\t\tthis.trigger('option_clear');\n\t}\n\n\t/**\n\t * Used by clearOptions() to decide whether or not an option should be removed\n\t * Return true to keep an option, false to remove\n\t *\n\t */\n\tclearFilter(option:TomOption,value:string){\n\t\tif( this.items.indexOf(value) >= 0 ){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Returns the dom element of the option\n\t * matching the given value.\n\t *\n\t */\n\tgetOption(value:undefined|null|boolean|string|number, create:boolean=false):null|HTMLElement {\n\n\t\tconst hashed = hash_key(value);\n\t\tif( hashed === null ) return null;\n\n\t\tconst option = this.options[hashed];\n\t\tif( option != undefined ){\n\n\t\t\tif( option.$div ){\n\t\t\t\treturn option.$div;\n\t\t\t}\n\n\t\t\tif( create ){\n\t\t\t\treturn this._render('option', option);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Returns the dom element of the next or previous dom element of the same type\n\t * Note: adjacent options may not be adjacent DOM elements (optgroups)\n\t *\n\t */\n\tgetAdjacent( option:null|HTMLElement, direction:number, type:string = 'option' ) : HTMLElement|null{\n\t\tvar self = this, all;\n\n\t\tif( !option ){\n\t\t\treturn null;\n\t\t}\n\n\t\tif( type == 'item' ){\n\t\t\tall\t\t\t= self.controlChildren();\n\t\t}else{\n\t\t\tall\t\t\t= self.dropdown_content.querySelectorAll('[data-selectable]');\n\t\t}\n\n\t\tfor( let i = 0; i < all.length; i++ ){\n\t\t\tif( all[i] != option ){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif( direction > 0 ){\n\t\t\t\treturn all[i+1] as HTMLElement;\n\t\t\t}\n\n\t\t\treturn all[i-1] as HTMLElement;\n\t\t}\n\t\treturn null;\n\t}\n\n\n\t/**\n\t * Returns the dom element of the item\n\t * matching the given value.\n\t *\n\t */\n\tgetItem(item:string|TomItem|null):null|TomItem {\n\n\t\tif( typeof item == 'object' ){\n\t\t\treturn item;\n\t\t}\n\n\t\tvar value = hash_key(item);\n\t\treturn value !== null\n\t\t\t? this.control.querySelector(`[data-value=\"${addSlashes(value)}\"]`)\n\t\t\t: null;\n\t}\n\n\t/**\n\t * \"Selects\" multiple items at once. Adds them to the list\n\t * at the current caret position.\n\t *\n\t */\n\taddItems( values:string|string[], silent?:boolean ):void{\n\t\tvar self = this;\n\n\t\tvar items = Array.isArray(values) ? values : [values];\n\t\titems = items.filter(x => self.items.indexOf(x) === -1);\n\t\tconst last_item = items[items.length - 1];\n\t\titems.forEach(item => {\n\t\t\tself.isPending = (item !== last_item);\n\t\t\tself.addItem(item, silent);\n\t\t});\n\t}\n\n\t/**\n\t * \"Selects\" an item. Adds it to the list\n\t * at the current caret position.\n\t *\n\t */\n\taddItem( value:string, silent?:boolean ):void{\n\t\tvar events = silent ? [] : ['change','dropdown_close'];\n\n\t\tdebounce_events(this, events, () => {\n\t\t\tvar item, wasFull;\n\t\t\tconst self = this;\n\t\t \tconst inputMode = self.settings.mode;\n\t\t\tconst hashed = hash_key(value);\n\n\t\t\tif( hashed && self.items.indexOf(hashed) !== -1 ){\n\n\t\t\t\tif( inputMode === 'single' ){\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\n\t\t\t\tif( inputMode === 'single' || !self.settings.duplicates ){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (hashed === null || !self.options.hasOwnProperty(hashed)) return;\n\t\t\tif (inputMode === 'single') self.clear(silent);\n\t\t\tif (inputMode === 'multi' && self.isFull()) return;\n\n\t\t\titem = self._render('item', self.options[hashed]);\n\n\t\t\tif( self.control.contains(item) ){ // duplicates\n\t\t\t\titem = item.cloneNode(true) as HTMLElement;\n\t\t\t}\n\n\t\t\twasFull = self.isFull();\n\t\t\tself.items.splice(self.caretPos, 0, hashed);\n\t\t\tself.insertAtCaret(item);\n\n\t\t\tif (self.isSetup) {\n\n\t\t\t\t// update menu / remove the option (if this is not one item being added as part of series)\n\t\t\t\tif( !self.isPending && self.settings.hideSelected ){\n\t\t\t\t\tlet option = self.getOption(hashed);\n\t\t\t\t\tlet next = self.getAdjacent(option, 1);\n\t\t\t\t\tif( next ){\n\t\t\t\t\t\tself.setActiveOption(next);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// refreshOptions after setActiveOption(),\n\t\t\t\t// otherwise setActiveOption() will be called by refreshOptions() with the wrong value\n\t\t\t\tif( !self.isPending && !self.settings.closeAfterSelect ){\n\t\t\t\t\tself.refreshOptions(self.isFocused && inputMode !== 'single');\n\t\t\t\t}\n\n\t\t\t\t// hide the menu if the maximum number of items have been selected or no options are left\n\t\t\t\tif( self.settings.closeAfterSelect != false && self.isFull() ){\n\t\t\t\t\tself.close();\n\t\t\t\t} else if (!self.isPending) {\n\t\t\t\t\tself.positionDropdown();\n\t\t\t\t}\n\n\t\t\t\tself.trigger('item_add', hashed, item);\n\n\t\t\t\tif (!self.isPending) {\n\t\t\t\t\tself.updateOriginalInput({silent: silent});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!self.isPending || (!wasFull && self.isFull())) {\n\t\t\t\tself.inputState();\n\t\t\t\tself.refreshState();\n\t\t\t}\n\n\t\t});\n\t}\n\n\t/**\n\t * Removes the selected item matching\n\t * the provided value.\n\t *\n\t */\n\tremoveItem( item:string|TomItem|null=null, silent?:boolean ){\n\t\tconst self\t\t= this;\n\t\titem\t\t\t= self.getItem(item);\n\n\t\tif( !item ) return;\n\n\t\tvar i,idx;\n\t\tconst value\t= item.dataset.value;\n\t\ti = nodeIndex(item);\n\n\t\titem.remove();\n\t\tif( item.classList.contains('active') ){\n\t\t\tidx = self.activeItems.indexOf(item);\n\t\t\tself.activeItems.splice(idx, 1);\n\t\t\tremoveClasses(item,'active');\n\t\t}\n\n\t\tself.items.splice(i, 1);\n\t\tself.lastQuery = null;\n\t\tif (!self.settings.persist && self.userOptions.hasOwnProperty(value)) {\n\t\t\tself.removeOption(value, silent);\n\t\t}\n\n\t\tif (i < self.caretPos) {\n\t\t\tself.setCaret(self.caretPos - 1);\n\t\t}\n\n\t\tself.updateOriginalInput({silent: silent});\n\t\tself.refreshState();\n\t\tself.positionDropdown();\n\t\tself.trigger('item_remove', value, item);\n\n\t}\n\n\t/**\n\t * Invokes the `create` method provided in the\n\t * TomSelect options that should provide the data\n\t * for the new item, given the user input.\n\t *\n\t * Once this completes, it will be added\n\t * to the item list.\n\t *\n\t */\n\tcreateItem( input:null|string=null, callback:TomCreateCallback = ()=>{} ):boolean{\n\n\t\t// triggerDropdown parameter @deprecated 2.1.1\n\t\tif( arguments.length === 3 ){\n\t\t\tcallback = arguments[2];\n\t\t}\n\t\tif( typeof callback != 'function' ){\n\t\t\tcallback = () => {};\n\t\t}\n\n\t\tvar self  = this;\n\t\tvar caret = self.caretPos;\n\t\tvar output;\n\t\tinput = input || self.inputValue();\n\n\t\tif (!self.canCreate(input)) {\n\t\t\tcallback();\n\t\t\treturn false;\n\t\t}\n\n\t\tself.lock();\n\n\t\tvar created = false;\n\t\tvar create = (data?:boolean|TomOption) => {\n\t\t\tself.unlock();\n\n\t\t\tif (!data || typeof data !== 'object') return callback();\n\t\t\tvar value = hash_key(data[self.settings.valueField]);\n\t\t\tif( typeof value !== 'string' ){\n\t\t\t\treturn callback();\n\t\t\t}\n\n\t\t\tself.setTextboxValue();\n\t\t\tself.addOption(data,true);\n\t\t\tself.setCaret(caret);\n\t\t\tself.addItem(value);\n\t\t\tcallback(data);\n\t\t\tcreated = true;\n\t\t};\n\n\t\tif( typeof self.settings.create === 'function' ){\n\t\t\toutput = self.settings.create.call(this, input, create);\n\t\t}else{\n\t\t\toutput = {\n\t\t\t\t[self.settings.labelField]: input,\n\t\t\t\t[self.settings.valueField]: input,\n\t\t\t};\n\t\t}\n\n\t\tif( !created ){\n\t\t\tcreate(output);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Re-renders the selected item lists.\n\t */\n\trefreshItems() {\n\t\tvar self = this;\n\t\tself.lastQuery = null;\n\n\t\tif (self.isSetup) {\n\t\t\tself.addItems(self.items);\n\t\t}\n\n\t\tself.updateOriginalInput();\n\t\tself.refreshState();\n\t}\n\n\t/**\n\t * Updates all state-dependent attributes\n\t * and CSS classes.\n\t */\n\trefreshState() {\n\t\tconst self     = this;\n\n\t\tself.refreshValidityState();\n\n\t\tconst isFull\t= self.isFull();\n\t\tconst isLocked\t= self.isLocked;\n\n\t\tself.wrapper.classList.toggle('rtl',self.rtl);\n\n\n\t\tconst wrap_classList = self.wrapper.classList;\n\n\t\twrap_classList.toggle('focus', self.isFocused)\n\t\twrap_classList.toggle('disabled', self.isDisabled)\n\t\twrap_classList.toggle('required', self.isRequired)\n\t\twrap_classList.toggle('invalid', !self.isValid)\n\t\twrap_classList.toggle('locked', isLocked)\n\t\twrap_classList.toggle('full', isFull)\n\t\twrap_classList.toggle('input-active', self.isFocused && !self.isInputHidden)\n\t\twrap_classList.toggle('dropdown-active', self.isOpen)\n\t\twrap_classList.toggle('has-options', isEmptyObject(self.options) )\n\t\twrap_classList.toggle('has-items', self.items.length > 0);\n\n\t}\n\n\n\t/**\n\t * Update the `required` attribute of both input and control input.\n\t *\n\t * The `required` property needs to be activated on the control input\n\t * for the error to be displayed at the right place. `required` also\n\t * needs to be temporarily deactivated on the input since the input is\n\t * hidden and can't show errors.\n\t */\n\trefreshValidityState() {\n\t\tvar self = this;\n\n\t\tif( !self.input.validity ){\n\t\t\treturn;\n\t\t}\n\n\t\tself.isValid = self.input.validity.valid;\n\t\tself.isInvalid = !self.isValid;\n\t}\n\n\t/**\n\t * Determines whether or not more items can be added\n\t * to the control without exceeding the user-defined maximum.\n\t *\n\t * @returns {boolean}\n\t */\n\tisFull() {\n\t\treturn this.settings.maxItems !== null && this.items.length >= this.settings.maxItems;\n\t}\n\n\t/**\n\t * Refreshes the original <select> or <input>\n\t * element to reflect the current state.\n\t *\n\t */\n\tupdateOriginalInput( opts:TomArgObject = {} ){\n\t\tconst self = this;\n\t\tvar option, label;\n\n\t\tconst empty_option = self.input.querySelector('option[value=\"\"]') as HTMLOptionElement;\n\n\t\tif( self.is_select_tag ){\n\n\t\t\tconst selected:HTMLOptionElement[]\t\t= [];\n\t\t\tconst has_selected:number\t\t\t\t= self.input.querySelectorAll('option:checked').length;\n\n\t\t\tfunction AddSelected(option_el:HTMLOptionElement|null, value:string, label:string):HTMLOptionElement{\n\n\t\t\t\tif( !option_el ){\n\t\t\t\t\toption_el = getDom('<option value=\"' + escape_html(value) + '\">' + escape_html(label) + '</option>') as HTMLOptionElement;\n\t\t\t\t}\n\n\t\t\t\t// don't move empty option from top of list\n\t\t\t\t// fixes bug in firefox https://bugzilla.mozilla.org/show_bug.cgi?id=1725293\n\t\t\t\tif( option_el != empty_option ){\n\t\t\t\t\tself.input.append(option_el);\n\t\t\t\t}\n\n\t\t\t\tselected.push(option_el);\n\n\t\t\t\t// marking empty option as selected can break validation\n\t\t\t\t// fixes https://github.com/orchidjs/tom-select/issues/303\n\t\t\t\tif( option_el != empty_option || has_selected > 0 ){\n\t\t\t\t\toption_el.selected = true;\n\t\t\t\t}\n\n\t\t\t\treturn option_el;\n\t\t\t}\n\n\t\t\t// unselect all selected options\n\t\t\tself.input.querySelectorAll('option:checked').forEach((option_el:Element) => {\n\t\t\t\t(<HTMLOptionElement>option_el).selected = false;\n\t\t\t});\n\n\n\t\t\t// nothing selected?\n\t\t\tif( self.items.length == 0 && self.settings.mode == 'single' ){\n\n\t\t\t\tAddSelected(empty_option, \"\", \"\");\n\n\t\t\t// order selected <option> tags for values in self.items\n\t\t\t}else{\n\n\t\t\t\tself.items.forEach((value)=>{\n\t\t\t\t\toption\t\t\t= self.options[value]!;\n\t\t\t\t\tlabel\t\t\t= option[self.settings.labelField] || '';\n\n\t\t\t\t\tif( selected.includes(option.$option) ){\n\t\t\t\t\t\tconst reuse_opt = self.input.querySelector(`option[value=\"${addSlashes(value)}\"]:not(:checked)`) as HTMLOptionElement;\n\t\t\t\t\t\tAddSelected(reuse_opt, value, label);\n\t\t\t\t\t}else{\n\t\t\t\t\t\toption.$option\t= AddSelected(option.$option, value, label);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t} else {\n\t\t\tself.input.value = self.getValue() as string;\n\t\t}\n\n\t\tif (self.isSetup) {\n\t\t\tif (!opts.silent) {\n\t\t\t\tself.trigger('change', self.getValue() );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Shows the autocomplete dropdown containing\n\t * the available options.\n\t */\n\topen() {\n\t\tvar self = this;\n\n\t\tif (self.isLocked || self.isOpen || (self.settings.mode === 'multi' && self.isFull())) return;\n\t\tself.isOpen = true;\n\t\tsetAttr(self.focus_node,{'aria-expanded': 'true'});\n\t\tself.refreshState();\n\t\tapplyCSS(self.dropdown,{visibility: 'hidden', display: 'block'});\n\t\tself.positionDropdown();\n\t\tapplyCSS(self.dropdown,{visibility: 'visible', display: 'block'});\n\t\tself.focus();\n\t\tself.trigger('dropdown_open', self.dropdown);\n\t}\n\n\t/**\n\t * Closes the autocomplete dropdown menu.\n\t */\n\tclose(setTextboxValue=true) {\n\t\tvar self = this;\n\t\tvar trigger = self.isOpen;\n\n\t\tif( setTextboxValue ){\n\n\t\t\t// before blur() to prevent form onchange event\n\t\t\tself.setTextboxValue();\n\n\t\t\tif (self.settings.mode === 'single' && self.items.length) {\n\t\t\t\tself.hideInput();\n\t\t\t}\n\t\t}\n\n\t\tself.isOpen = false;\n\t\tsetAttr(self.focus_node,{'aria-expanded': 'false'});\n\t\tapplyCSS(self.dropdown,{display: 'none'});\n\t\tif( self.settings.hideSelected ){\n\t\t\tself.clearActiveOption();\n\t\t}\n\t\tself.refreshState();\n\n\t\tif (trigger) self.trigger('dropdown_close', self.dropdown);\n\t}\n\n\t/**\n\t * Calculates and applies the appropriate\n\t * position of the dropdown if dropdownParent = 'body'.\n\t * Otherwise, position is determined by css\n\t */\n\tpositionDropdown(){\n\n\t\tif( this.settings.dropdownParent !== 'body' ){\n\t\t\treturn;\n\t\t}\n\n\t\tvar context\t\t\t= this.control;\n\t\tvar rect\t\t\t= context.getBoundingClientRect();\n\t\tvar top\t\t\t\t= context.offsetHeight + rect.top  + window.scrollY;\n\t\tvar left\t\t\t= rect.left + window.scrollX;\n\n\n\t\tapplyCSS(this.dropdown,{\n\t\t\twidth : rect.width + 'px',\n\t\t\ttop   : top + 'px',\n\t\t\tleft  : left + 'px'\n\t\t});\n\n\t}\n\n\t/**\n\t * Resets / clears all selected items\n\t * from the control.\n\t *\n\t */\n\tclear(silent?:boolean) {\n\t\tvar self = this;\n\n\t\tif (!self.items.length) return;\n\n\t\tvar items = self.controlChildren();\n\t\titerate(items,(item:TomItem)=>{\n\t\t\tself.removeItem(item,true);\n\t\t});\n\n\t\tself.showInput();\n\t\tif( !silent ) self.updateOriginalInput();\n\t\tself.trigger('clear');\n\t}\n\n\t/**\n\t * A helper method for inserting an element\n\t * at the current caret position.\n\t *\n\t */\n\tinsertAtCaret(el:HTMLElement) {\n\t\tconst self\t\t= this;\n\t\tconst caret\t\t= self.caretPos;\n\t\tconst target\t= self.control;\n\n\t\ttarget.insertBefore(el, target.children[caret] || null);\n\t\tself.setCaret(caret + 1);\n\t}\n\n\t/**\n\t * Removes the current selected item(s).\n\t *\n\t */\n\tdeleteSelection(e:KeyboardEvent):boolean {\n\t\tvar direction, selection, caret, tail;\n\t\tvar self = this;\n\n\t\tdirection = (e && e.keyCode === constants.KEY_BACKSPACE) ? -1 : 1;\n\t\tselection = getSelection(self.control_input);\n\n\n\t\t// determine items that will be removed\n\t\tconst rm_items:TomItem[]\t= [];\n\n\t\tif (self.activeItems.length) {\n\n\t\t\ttail = getTail(self.activeItems, direction);\n\t\t\tcaret = nodeIndex(tail);\n\n\t\t\tif (direction > 0) { caret++; }\n\n\t\t\titerate(self.activeItems, (item:TomItem) => rm_items.push(item) );\n\n\t\t} else if ((self.isFocused || self.settings.mode === 'single') && self.items.length) {\n\t\t\tconst items = self.controlChildren();\n\t\t\tlet rm_item;\n\t\t\tif( direction < 0 && selection.start === 0 && selection.length === 0 ){\n\t\t\t\trm_item = items[self.caretPos - 1];\n\n\t\t\t}else if( direction > 0 && selection.start === self.inputValue().length ){\n\t\t\t\trm_item = items[self.caretPos];\n\t\t\t}\n\n\t\t\tif( rm_item !== undefined ){\n\t\t\t\trm_items.push( rm_item );\n\t\t\t}\n\t\t}\n\n\t\tif( !self.shouldDelete(rm_items,e) ){\n\t\t\treturn false;\n\t\t}\n\n\t\tpreventDefault(e,true);\n\n\t\t// perform removal\n\t\tif (typeof caret !== 'undefined') {\n\t\t\tself.setCaret(caret);\n\t\t}\n\n\t\twhile( rm_items.length ){\n\t\t\tself.removeItem(rm_items.pop());\n\t\t}\n\n\t\tself.showInput();\n\t\tself.positionDropdown();\n\t\tself.refreshOptions(false);\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Return true if the items should be deleted\n\t */\n\tshouldDelete(items:TomItem[],evt:MouseEvent|KeyboardEvent){\n\n\t\tconst values = items.map(item => item.dataset.value);\n\n\t\t// allow the callback to abort\n\t\tif( !values.length || (typeof this.settings.onDelete === 'function' && this.settings.onDelete(values,evt) === false) ){\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Selects the previous / next item (depending on the `direction` argument).\n\t *\n\t * > 0 - right\n\t * < 0 - left\n\t *\n\t */\n\tadvanceSelection(direction:number, e?:MouseEvent|KeyboardEvent) {\n\t\tvar last_active, adjacent, self = this;\n\n\t\tif (self.rtl) direction *= -1;\n\t\tif( self.inputValue().length ) return;\n\n\n\t\t// add or remove to active items\n\t\tif( isKeyDown(constants.KEY_SHORTCUT,e) || isKeyDown('shiftKey',e) ){\n\n\t\t\tlast_active\t\t\t= self.getLastActive(direction);\n\t\t\tif( last_active ){\n\n\t\t\t\tif( !last_active.classList.contains('active') ){\n\t\t\t\t\tadjacent\t\t\t= last_active;\n\t\t\t\t}else{\n\t\t\t\t\tadjacent\t\t\t= self.getAdjacent(last_active,direction,'item');\n\t\t\t\t}\n\n\t\t\t// if no active item, get items adjacent to the control input\n\t\t\t}else if( direction > 0 ){\n\t\t\t\tadjacent\t\t\t= self.control_input.nextElementSibling;\n\t\t\t}else{\n\t\t\t\tadjacent\t\t\t= self.control_input.previousElementSibling;\n\t\t\t}\n\n\n\t\t\tif( adjacent ){\n\t\t\t\tif( adjacent.classList.contains('active') ){\n\t\t\t\t\tself.removeActiveItem(last_active);\n\t\t\t\t}\n\t\t\t\tself.setActiveItemClass(adjacent); // mark as last_active !! after removeActiveItem() on last_active\n\t\t\t}\n\n\t\t// move caret to the left or right\n\t\t}else{\n\t\t\tself.moveCaret(direction);\n\t\t}\n\t}\n\n\tmoveCaret(direction:number){}\n\n\t/**\n\t * Get the last active item\n\t *\n\t */\n\tgetLastActive(direction?:number){\n\n\t\tlet last_active = this.control.querySelector('.last-active');\n\t\tif( last_active ){\n\t\t\treturn last_active;\n\t\t}\n\n\n\t\tvar result = this.control.querySelectorAll('.active');\n\t\tif( result ){\n\t\t\treturn getTail(result,direction);\n\t\t}\n\t}\n\n\n\t/**\n\t * Moves the caret to the specified index.\n\t *\n\t * The input must be moved by leaving it in place and moving the\n\t * siblings, due to the fact that focus cannot be restored once lost\n\t * on mobile webkit devices\n\t *\n\t */\n\tsetCaret(new_pos:number) {\n\t\tthis.caretPos = this.items.length;\n\t}\n\n\t/**\n\t * Return list of item dom elements\n\t *\n\t */\n\tcontrolChildren():TomItem[]{\n\t\treturn Array.from( this.control.querySelectorAll('[data-ts-item]') ) as TomItem[];\n\t}\n\n\t/**\n\t * Disables user input on the control. Used while\n\t * items are being asynchronously created.\n\t */\n\tlock() {\n\t\tthis.isLocked = true;\n\t\tthis.refreshState();\n\t}\n\n\t/**\n\t * Re-enables user input on the control.\n\t */\n\tunlock() {\n\t\tthis.isLocked = false;\n\t\tthis.refreshState();\n\t}\n\n\t/**\n\t * Disables user input on the control completely.\n\t * While disabled, it cannot receive focus.\n\t */\n\tdisable() {\n\t\tvar self = this;\n\t\tself.input.disabled\t\t\t\t= true;\n\t\tself.control_input.disabled\t\t= true;\n\t\tself.focus_node.tabIndex\t\t= -1;\n\t\tself.isDisabled\t\t\t\t\t= true;\n\t\tthis.close();\n\t\tself.lock();\n\t}\n\n\t/**\n\t * Enables the control so that it can respond\n\t * to focus and user input.\n\t */\n\tenable() {\n\t\tvar self = this;\n\t\tself.input.disabled\t\t\t\t= false;\n\t\tself.control_input.disabled\t\t= false;\n\t\tself.focus_node.tabIndex\t\t= self.tabIndex;\n\t\tself.isDisabled\t\t\t\t\t= false;\n\t\tself.unlock();\n\t}\n\n\t/**\n\t * Completely destroys the control and\n\t * unbinds all event listeners so that it can\n\t * be garbage collected.\n\t */\n\tdestroy() {\n\t\tvar self = this;\n\t\tvar revertSettings = self.revertSettings;\n\n\t\tself.trigger('destroy');\n\t\tself.off();\n\t\tself.wrapper.remove();\n\t\tself.dropdown.remove();\n\n\t\tself.input.innerHTML = revertSettings.innerHTML;\n\t\tself.input.tabIndex = revertSettings.tabIndex;\n\n\t\tremoveClasses(self.input,'tomselected','ts-hidden-accessible');\n\n\t\tself._destroy();\n\n\t\tdelete self.input.tomselect;\n\t}\n\n\t/**\n\t * A helper method for rendering \"item\" and\n\t * \"option\" templates, given the data.\n\t *\n\t */\n\trender( templateName:TomTemplateNames, data?:any ):null|HTMLElement{\n\t\tvar id, html;\n\t\tconst self = this;\n\n\t\tif( typeof this.settings.render[templateName] !== 'function' ){\n\t\t\treturn null;\n\t\t}\n\n\t\t// render markup\n\t\thtml = self.settings.render[templateName].call(this, data, escape_html);\n\n\t\tif( !html ){\n\t\t\treturn null;\n\t\t}\n\n\t\thtml = getDom( html );\n\n\t\t// add mandatory attributes\n\t\tif (templateName === 'option' || templateName === 'option_create') {\n\n\t\t\tif( data[self.settings.disabledField] ){\n\t\t\t\tsetAttr(html,{'aria-disabled':'true'});\n\t\t\t}else{\n\t\t\t\tsetAttr(html,{'data-selectable': ''});\n\t\t\t}\n\n\t\t}else if (templateName === 'optgroup') {\n\t\t\tid = data.group[self.settings.optgroupValueField];\n\t\t\tsetAttr(html,{'data-group': id});\n\t\t\tif(data.group[self.settings.disabledField]) {\n\t\t\t\tsetAttr(html,{'data-disabled': ''});\n\t\t\t}\n\t\t}\n\n\t\tif (templateName === 'option' || templateName === 'item') {\n\t\t\tconst value\t= get_hash(data[self.settings.valueField]);\n\t\t\tsetAttr(html,{'data-value': value });\n\n\n\t\t\t// make sure we have some classes if a template is overwritten\n\t\t\tif( templateName === 'item' ){\n\t\t\t\taddClasses(html,self.settings.itemClass);\n\t\t\t\tsetAttr(html,{'data-ts-item':''});\n\t\t\t}else{\n\t\t\t\taddClasses(html,self.settings.optionClass);\n\t\t\t\tsetAttr(html,{\n\t\t\t\t\trole:'option',\n\t\t\t\t\tid:data.$id\n\t\t\t\t});\n\n\t\t\t\t// update cache\n\t\t\t\tdata.$div = html;\n\t\t\t\tself.options[value] = data;\n\t\t\t}\n\n\n\t\t}\n\n\t\treturn html;\n\n\t}\n\n\n\t/**\n\t * Type guarded rendering\n\t *\n\t */\n\t_render( templateName:TomTemplateNames, data?:any ):HTMLElement{\n\t\tconst html = this.render(templateName, data);\n\n\t\tif( html == null ){\n\t\t\tthrow 'HTMLElement expected';\n\t\t}\n\t\treturn html;\n\t}\n\n\n\t/**\n\t * Clears the render cache for a template. If\n\t * no template is given, clears all render\n\t * caches.\n\t *\n\t */\n\tclearCache():void{\n\n\t\titerate(this.options, (option:TomOption)=>{\n\t\t\tif( option.$div ){\n\t\t\t\toption.$div.remove();\n\t\t\t\tdelete option.$div;\n\t\t\t}\n\t\t});\n\n\t}\n\n\t/**\n\t * Removes a value from item and option caches\n\t *\n\t */\n\tuncacheValue(value:string){\n\n\t\tconst option_el\t\t\t= this.getOption(value);\n\t\tif( option_el ) option_el.remove();\n\n\t}\n\n\t/**\n\t * Determines whether or not to display the\n\t * create item prompt, given a user input.\n\t *\n\t */\n\tcanCreate( input:string ):boolean {\n\t\treturn this.settings.create && (input.length > 0) && (this.settings.createFilter as TomCreateFilter ).call(this, input);\n\t}\n\n\n\t/**\n\t * Wraps this.`method` so that `new_fn` can be invoked 'before', 'after', or 'instead' of the original method\n\t *\n\t * this.hook('instead','onKeyDown',function( arg1, arg2 ...){\n\t *\n\t * });\n\t */\n\thook( when:string, method:string, new_fn:any ){\n\t\tvar self = this;\n\t\tvar orig_method = self[method];\n\n\n\t\tself[method] = function(){\n\t\t\tvar result, result_new;\n\n\t\t\tif( when === 'after' ){\n\t\t\t\tresult = orig_method.apply(self, arguments);\n\t\t\t}\n\n\t\t\tresult_new = new_fn.apply(self, arguments );\n\n\t\t\tif( when === 'instead' ){\n\t\t\t\treturn result_new;\n\t\t\t}\n\n\t\t\tif( when === 'before' ){\n\t\t\t\tresult = orig_method.apply(self, arguments);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\n\t}\n\n};\n", "/**\n * Plugin: \"change_listener\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { addEvent } from '../../utils';\n\nexport default function(this:TomSelect) {\n\taddEvent(this.input,'change',()=>{\n\t\tthis.sync();\n\t});\n};\n", "/**\n * Plugin: \"restore_on_backspace\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { preventDefault, hash_key } from '../../utils';\nimport { getDom } from '../../vanilla';\n\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\tvar orig_onOptionSelect = self.onOptionSelect;\n\n\tself.settings.hideSelected = false;\n\n\n\t// update the checkbox for an option\n\tvar UpdateCheckbox = function(option:HTMLElement){\n\t\tsetTimeout(()=>{\n\t\t\tvar checkbox = option.querySelector('input');\n\t\t\tif( checkbox instanceof HTMLInputElement ){\n\t\t\t\tif( option.classList.contains('selected') ){\n\t\t\t\t\tcheckbox.checked = true;\n\t\t\t\t}else{\n\t\t\t\t\tcheckbox.checked = false;\n\t\t\t\t}\n\t\t\t}\n\t\t},1);\n\t};\n\n\t// add checkbox to option template\n\tself.hook('after','setupTemplates',() => {\n\n\t\tvar orig_render_option = self.settings.render.option;\n\n\t\tself.settings.render.option = (data, escape_html) => {\n\t\t\tvar rendered = getDom(orig_render_option.call(self, data, escape_html));\n\t\t\tvar checkbox = document.createElement('input');\n\t\t\tcheckbox.addEventListener('click',function(evt){\n\t\t\t\tpreventDefault(evt);\n\t\t\t});\n\n\t\t\tcheckbox.type = 'checkbox';\n\t\t\tconst hashed = hash_key(data[self.settings.valueField]);\n\n\n\t\t\tif( hashed && self.items.indexOf(hashed) > -1 ){\n\t\t\t\tcheckbox.checked = true;\n\t\t\t}\n\n\t\t\trendered.prepend(checkbox);\n\t\t\treturn rendered;\n\t\t};\n\t});\n\n\t// uncheck when item removed\n\tself.on('item_remove',(value:string) => {\n\t\tvar option = self.getOption(value);\n\n\t\tif( option ){ // if dropdown hasn't been opened yet, the option won't exist\n\t\t\toption.classList.remove('selected'); // selected class won't be removed yet\n\t\t\tUpdateCheckbox(option);\n\t\t}\n\t});\n\n\t// check when item added\n\tself.on('item_add',(value:string) => {\n\t\tvar option = self.getOption(value);\n\n\t\tif( option ){ // if dropdown hasn't been opened yet, the option won't exist\n\t\t\tUpdateCheckbox(option);\n\t\t}\n\t});\n\n\n\t// remove items when selected option is clicked\n\tself.hook('instead','onOptionSelect',( evt:KeyboardEvent, option:HTMLElement )=>{\n\n\t\tif( option.classList.contains('selected') ){\n\t\t\toption.classList.remove('selected')\n\t\t\tself.removeItem(option.dataset.value);\n\t\t\tself.refreshOptions();\n\t\t\tpreventDefault(evt,true);\n\t\t\treturn;\n        }\n\n\t\torig_onOptionSelect.call(self, evt, option);\n\n\t\tUpdateCheckbox(option);\n\t});\n\n};\n", "/**\n * Plugin: \"dropdown_header\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { getDom } from '../../vanilla';\nimport { CBOptions } from './types';\n\nexport default function(this:TomSelect, userOptions:CBOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\tclassName: 'clear-button',\n\t\ttitle: 'Clear All',\n\t\thtml: (data:CBOptions) => {\n\t\t\treturn `<div class=\"${data.className}\" title=\"${data.title}\">&#10799;</div>`;\n\t\t}\n\t}, userOptions);\n\n\tself.on('initialize',()=>{\n\t\tvar button = getDom(options.html(options));\n\t\tbutton.addEventListener('click',(evt)=>{\n\n\t\t\tif( self.isDisabled ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tself.clear();\n\n\t\t\tif( self.settings.mode === 'single' && self.settings.allowEmptyOption ){\n\t\t\t\tself.addItem('');\n\t\t\t}\n\n\t\t\tevt.preventDefault();\n\t\t\tevt.stopPropagation();\n\t\t});\n\t\tself.control.appendChild(button);\n\t});\n\n};\n", "/**\n * Plugin: \"drag_drop\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\tif (!$.fn.sortable) throw new Error('The \"drag_drop\" plugin requires jQuery UI \"sortable\".');\n\tif (self.settings.mode !== 'multi') return;\n\n\tvar orig_lock\t\t= self.lock;\n\tvar orig_unlock\t\t= self.unlock;\n\n\tself.hook('instead','lock',()=>{\n\t\tvar sortable = $(self.control).data('sortable');\n\t\tif (sortable) sortable.disable();\n\t\treturn orig_lock.call(self);\n\t});\n\n\tself.hook('instead','unlock',()=>{\n\t\tvar sortable = $(self.control).data('sortable');\n\t\tif (sortable) sortable.enable();\n\t\treturn orig_unlock.call(self);\n\t});\n\n\tself.on('initialize',()=>{\n\t\tvar $control = $(self.control).sortable({\n\t\t\titems: '[data-value]',\n\t\t\tforcePlaceholderSize: true,\n\t\t\tdisabled: self.isLocked,\n\t\t\tstart: (e, ui) => {\n\t\t\t\tui.placeholder.css('width', ui.helper.css('width'));\n\t\t\t\t$control.css({overflow: 'visible'});\n\t\t\t},\n\t\t\tstop: ()=>{\n\t\t\t\t$control.css({overflow: 'hidden'});\n\n\t\t\t\tvar values:string[] = [];\n\t\t\t\t$control.children('[data-value]').each(function(this:HTMLElement){\n\t\t\t\t\tif( this.dataset.value ) values.push(this.dataset.value);\n\t\t\t\t});\n\n\t\t\t\tself.setValue(values);\n\t\t\t}\n\t\t});\n\n\t});\n\n};\n", "/**\n * Plugin: \"dropdown_header\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { getDom } from '../../vanilla';\nimport { preventDefault } from '../../utils';\nimport { DHOptions } from './types';\n\nexport default function(this:TomSelect, userOptions:DHOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\ttitle         : 'Untitled',\n\t\theaderClass   : 'dropdown-header',\n\t\ttitleRowClass : 'dropdown-header-title',\n\t\tlabelClass    : 'dropdown-header-label',\n\t\tcloseClass    : 'dropdown-header-close',\n\n\t\thtml: (data:DHOptions) => {\n\t\t\treturn (\n\t\t\t\t'<div class=\"' + data.headerClass + '\">' +\n\t\t\t\t\t'<div class=\"' + data.titleRowClass + '\">' +\n\t\t\t\t\t\t'<span class=\"' + data.labelClass + '\">' + data.title + '</span>' +\n\t\t\t\t\t\t'<a class=\"' + data.closeClass + '\">&times;</a>' +\n\t\t\t\t\t'</div>' +\n\t\t\t\t'</div>'\n\t\t\t);\n\t\t}\n\t}, userOptions);\n\n\tself.on('initialize',()=>{\n\t\tvar header = getDom(options.html(options));\n\n\t\tvar close_link = header.querySelector('.'+options.closeClass);\n\t\tif( close_link ){\n\t\t\tclose_link.addEventListener('click',(evt)=>{\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t\tself.close();\n\t\t\t});\n\t\t}\n\n\t\tself.dropdown.insertBefore(header, self.dropdown.firstChild);\n\t});\n\n};\n", "/**\n * Plugin: \"dropdown_input\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { nodeIndex, removeClasses } from '../../vanilla';\n\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\n\t/**\n\t * Moves the caret to the specified index.\n\t *\n\t * The input must be moved by leaving it in place and moving the\n\t * siblings, due to the fact that focus cannot be restored once lost\n\t * on mobile webkit devices\n\t *\n\t */\n\tself.hook('instead','setCaret',(new_pos:number) => {\n\n\t\tif( self.settings.mode === 'single' || !self.control.contains(self.control_input) ) {\n\t\t\tnew_pos = self.items.length;\n\t\t} else {\n\t\t\tnew_pos = Math.max(0, Math.min(self.items.length, new_pos));\n\n\t\t\tif( new_pos != self.caretPos && !self.isPending ){\n\n\t\t\t\tself.controlChildren().forEach((child,j) => {\n\t\t\t\t\tif( j < new_pos ){\n\t\t\t\t\t\tself.control_input.insertAdjacentElement('beforebegin', child );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.control.appendChild( child );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tself.caretPos = new_pos;\n\t});\n\n\tself.hook('instead','moveCaret',(direction:number) => {\n\n\t\tif( !self.isFocused ) return;\n\n\t\t// move caret before or after selected items\n\t\tconst last_active\t\t= self.getLastActive(direction);\n\t\tif( last_active ){\n\t\t\tconst idx = nodeIndex(last_active);\n\t\t\tself.setCaret(direction > 0 ? idx + 1: idx);\n\t\t\tself.setActiveItem();\n\t\t\tremoveClasses(last_active as HTMLElement,'last-active');\n\n\t\t// move caret left or right of current position\n\t\t}else{\n\t\t\tself.setCaret(self.caretPos + direction);\n\n\t\t}\n\n\t});\n\n};\n", "/**\n * Plugin: \"dropdown_input\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport * as constants from '../../constants';\nimport { getDom, addClasses } from '../../vanilla';\nimport { addEvent, preventDefault } from '../../utils';\n\n\nexport default function(this:TomSelect) {\n\tconst self = this;\n\n\tself.settings.shouldOpen = true; // make sure the input is shown even if there are no options to display in the dropdown\n\n\tself.hook('before','setup',()=>{\n\t\tself.focus_node\t\t= self.control;\n\n\t\taddClasses( self.control_input, 'dropdown-input');\n\n\t \tconst div = getDom('<div class=\"dropdown-input-wrap\">');\n\t\tdiv.append(self.control_input);\n\t\tself.dropdown.insertBefore(div, self.dropdown.firstChild);\n\n\t\t// set a placeholder in the select control\n\t\tconst placeholder = getDom('<input class=\"items-placeholder\" tabindex=\"-1\" />') as HTMLInputElement;\n\t\tplaceholder.placeholder = self.settings.placeholder ||'';\n\t\tself.control.append(placeholder);\n\n\t});\n\n\n\tself.on('initialize',()=>{\n\n\t\t// set tabIndex on control to -1, otherwise [shift+tab] will put focus right back on control_input\n\t\tself.control_input.addEventListener('keydown',(evt:KeyboardEvent) =>{\n\t\t//addEvent(self.control_input,'keydown' as const,(evt:KeyboardEvent) =>{\n\t\t\tswitch( evt.keyCode ){\n\t\t\t\tcase constants.KEY_ESC:\n\t\t\t\t\tif (self.isOpen) {\n\t\t\t\t\t\tpreventDefault(evt,true);\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t}\n\t\t\t\t\tself.clearActiveItems();\n\t\t\t\treturn;\n\t\t\t\tcase constants.KEY_TAB:\n\t\t\t\t\tself.focus_node.tabIndex = -1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn self.onKeyDown.call(self,evt);\n\t\t});\n\n\t\tself.on('blur',()=>{\n\t\t\tself.focus_node.tabIndex = self.isDisabled ? -1 : self.tabIndex;\n\t\t});\n\n\n\t\t// give the control_input focus when the dropdown is open\n\t\tself.on('dropdown_open',() =>{\n\t\t\tself.control_input.focus();\n\t\t});\n\n\t\t// prevent onBlur from closing when focus is on the control_input\n\t\tconst orig_onBlur = self.onBlur;\n\t\tself.hook('instead','onBlur',(evt?:FocusEvent)=>{\n\t\t\tif( evt && evt.relatedTarget == self.control_input ) return;\n\t\t\treturn orig_onBlur.call(self);\n\t\t});\n\n\t\taddEvent(self.control_input,'blur', () => self.onBlur() );\n\n\t\t// return focus to control to allow further keyboard input\n\t\tself.hook('before','close',() =>{\n\n\t\t\tif( !self.isOpen ) return;\n\t\t\tself.focus_node.focus({preventScroll: true});\n\t\t});\n\n\t});\n\n};\n", "/**\n * Plugin: \"input_autogrow\" (Tom Select)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { addEvent } from '../../utils';\n\nexport default function(this:TomSelect) {\n\tvar self\t\t\t\t\t= this;\n\n\tself.on('initialize',()=>{\n\n\n\t\tvar test_input\t\t\t\t= document.createElement('span');\n\t\tvar control\t\t\t\t\t= self.control_input;\n\t\ttest_input.style.cssText\t= 'position:absolute; top:-99999px; left:-99999px; width:auto; padding:0; white-space:pre; ';\n\n\t\tself.wrapper.appendChild(test_input);\n\n\n\t\tvar transfer_styles\t\t\t= [ 'letterSpacing', 'fontSize', 'fontFamily', 'fontWeight', 'textTransform' ];\n\n\t\tfor( const style_name of transfer_styles ){\n\t\t\t// @ts-ignore TS7015 https://stackoverflow.com/a/50506154/697576\n\t\t\ttest_input.style[style_name] = control.style[style_name];\n\t\t}\n\n\n\t\t/**\n\t\t * Set the control width\n\t\t *\n\t\t */\n\t\tvar resize = ()=>{\n\t\t\ttest_input.textContent\t= control.value;\n\t\t\tcontrol.style.width\t\t= test_input.clientWidth+'px';\n\t\t};\n\n\t\tresize();\n\t\tself.on('update item_add item_remove',resize);\n\t\taddEvent(control,'input', resize );\n\t\taddEvent(control,'keyup', resize );\n\t\taddEvent(control,'blur', resize );\n\t\taddEvent(control,'update', resize );\n\t});\n\n};\n", "/**\n * Plugin: \"input_autogrow\" (Tom Select)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\tvar orig_deleteSelection = self.deleteSelection;\n\n\tthis.hook('instead','deleteSelection',(evt:KeyboardEvent) => {\n\n\t\tif( self.activeItems.length ){\n\t\t\treturn orig_deleteSelection.call(self, evt);\n\t\t}\n\n\t\treturn false;\n\t});\n\n};\n", "/**\n * Plugin: \"no_active_items\" (Tom Select)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\n\nexport default function(this:TomSelect) {\n\tthis.hook('instead','setActiveItem',() => {});\n\tthis.hook('instead','selectAll',() => {});\n};\n", "/**\n * Plugin: \"optgroup_columns\" (Tom Select.js)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport * as constants from '../../constants';\nimport { parentMatch, nodeIndex } from '../../vanilla';\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\n\tvar orig_keydown = self.onKeyDown;\n\n\tself.hook('instead','onKeyDown',(evt:KeyboardEvent)=>{\n\t\tvar index, option, options, optgroup;\n\n\t\tif( !self.isOpen || !(evt.keyCode === constants.KEY_LEFT || evt.keyCode === constants.KEY_RIGHT)) {\n\t\t\treturn orig_keydown.call(self,evt);\n\t\t}\n\n\t\tself.ignoreHover\t= true;\n\t\toptgroup\t\t\t= parentMatch(self.activeOption,'[data-group]');\n\t\tindex\t\t\t\t= nodeIndex(self.activeOption,'[data-selectable]');\n\n\t\tif( !optgroup ){\n\t\t\treturn;\n\t\t}\n\n\t\tif( evt.keyCode === constants.KEY_LEFT ){\n\t\t\toptgroup = optgroup.previousSibling;\n\t\t} else {\n\t\t\toptgroup = optgroup.nextSibling;\n\t\t}\n\n\t\tif( !optgroup ){\n\t\t\treturn;\n\t\t}\n\n\t\toptions\t\t\t\t= (<HTMLOptGroupElement>optgroup).querySelectorAll('[data-selectable]');\n\t\toption\t\t\t\t= options[ Math.min(options.length - 1, index) ] as HTMLElement;\n\n\t\tif( option ){\n\t\t\tself.setActiveOption(option);\n\t\t}\n\n\t});\n\n};\n", "/**\n * Plugin: \"remove_button\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { getDom } from '../../vanilla';\nimport { escape_html, preventDefault, addEvent } from '../../utils';\nimport { TomOption, TomItem } from '../../types/index';\nimport { RBOptions } from './types';\n\nexport default function(this:TomSelect, userOptions:RBOptions) {\n\n\tconst options = Object.assign({\n\t\t\tlabel     : '&times;',\n\t\t\ttitle     : 'Remove',\n\t\t\tclassName : 'remove',\n\t\t\tappend    : true\n\t\t}, userOptions);\n\n\n\t//options.className = 'remove-single';\n\tvar self\t\t\t= this;\n\n\t// override the render method to add remove button to each item\n\tif( !options.append ){\n\t\treturn;\n\t}\n\n\tvar html = '<a href=\"javascript:void(0)\" class=\"' + options.className + '\" tabindex=\"-1\" title=\"' + escape_html(options.title) + '\">' + options.label + '</a>';\n\n\tself.hook('after','setupTemplates',() => {\n\n\t\tvar orig_render_item = self.settings.render.item;\n\n\t\tself.settings.render.item = (data:TomOption, escape:typeof escape_html) => {\n\n\t\t\tvar item = getDom(orig_render_item.call(self, data, escape)) as TomItem;\n\n\t\t\tvar close_button = getDom(html);\n\t\t\titem.appendChild(close_button);\n\n\t\t\taddEvent(close_button,'mousedown',(evt) => {\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t});\n\n\t\t\taddEvent(close_button,'click',(evt) => {\n\n\t\t\t\t// propagating will trigger the dropdown to show for single mode\n\t\t\t\tpreventDefault(evt,true);\n\n\t\t\t\tif( self.isLocked ) return;\n\t\t\t\tif( !self.shouldDelete([item],evt as MouseEvent) ) return;\n\n\t\t\t\tself.removeItem(item);\n\t\t\t\tself.refreshOptions(false);\n\t\t\t\tself.inputState();\n\t\t\t});\n\n\t\t\treturn item;\n\t\t};\n\n\t});\n\n\n};\n", "/**\n * Plugin: \"restore_on_backspace\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\nimport TomSelect from '../../tom-select';\nimport { TomOption } from '../../types/index';\n\ntype TPluginOptions = {\n\ttext?:(option:TomOption)=>string,\n};\n\nexport default function(this:TomSelect, userOptions:TPluginOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\ttext: (option:TomOption) => {\n\t\t\treturn option[self.settings.labelField];\n\t\t}\n\t},userOptions);\n\n\tself.on('item_remove',function(value:string){\n\t\tif( !self.isFocused ){\n\t\t\treturn;\n\t\t}\n\n\t\tif( self.control_input.value.trim() === '' ){\n\t\t\tvar option = self.options[value];\n\t\t\tif( option ){\n\t\t\t\tself.setTextboxValue(options.text.call(self, option));\n\t\t\t}\n\t\t}\n\t});\n\n};\n", "/**\n * Plugin: \"restore_on_backspace\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { TomOption } from '../../types/index';\nimport { addClasses } from '../../vanilla';\n\nexport default function(this:TomSelect) {\n\tconst self\t\t\t\t\t\t\t= this;\n\tconst orig_canLoad\t\t\t\t\t= self.canLoad;\n\tconst orig_clearActiveOption\t\t= self.clearActiveOption;\n\tconst orig_loadCallback\t\t\t\t= self.loadCallback;\n\n\tvar pagination:{[key:string]:any}\t= {};\n\tvar dropdown_content:HTMLElement;\n\tvar loading_more\t\t\t\t\t= false;\n\tvar load_more_opt:HTMLElement;\n\tvar default_values: string[]\t\t= [];\n\n\tif( !self.settings.shouldLoadMore ){\n\n\t\t// return true if additional results should be loaded\n\t\tself.settings.shouldLoadMore = ():boolean=>{\n\n\t\t\tconst scroll_percent = dropdown_content.clientHeight / (dropdown_content.scrollHeight - dropdown_content.scrollTop);\n\t\t\tif( scroll_percent > 0.9 ){\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif( self.activeOption ){\n\t\t\t\tvar selectable\t= self.selectable();\n\t\t\t\tvar index\t\t= Array.from(selectable).indexOf(self.activeOption);\n\t\t\t\tif( index >= (selectable.length-2) ){\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t}\n\n\n\tif( !self.settings.firstUrl ){\n\t\tthrow 'virtual_scroll plugin requires a firstUrl() method';\n\t}\n\n\n\t// in order for virtual scrolling to work,\n\t// options need to be ordered the same way they're returned from the remote data source\n\tself.settings.sortField\t\t\t= [{field:'$order'},{field:'$score'}];\n\n\n\t// can we load more results for given query?\n\tconst canLoadMore = (query:string):boolean => {\n\n\t\tif( typeof self.settings.maxOptions === 'number' && dropdown_content.children.length >= self.settings.maxOptions ){\n\t\t\treturn false;\n\t\t}\n\n\t\tif( (query in pagination) && pagination[query] ){\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tconst clearFilter = (option:TomOption, value:string):boolean => {\n\t\tif( self.items.indexOf(value) >= 0 || default_values.indexOf(value) >= 0 ){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\n\t// set the next url that will be\n\tself.setNextUrl = (value:string,next_url:any):void => {\n\t\tpagination[value] = next_url;\n\t};\n\n\t// getUrl() to be used in settings.load()\n\tself.getUrl = (query:string):any =>{\n\n\t\tif( query in pagination ){\n\t\t\tconst next_url = pagination[query];\n\t\t\tpagination[query] = false;\n\t\t\treturn next_url;\n\t\t}\n\n\t\t// if the user goes back to a previous query\n\t\t// we need to load the first page again\n\t\tpagination = {};\n\n\t\treturn self.settings.firstUrl.call(self,query);\n\t};\n\n\n\t// don't clear the active option (and cause unwanted dropdown scroll)\n\t// while loading more results\n\tself.hook('instead','clearActiveOption',()=>{\n\n\t\tif( loading_more ){\n\t\t\treturn;\n\t\t}\n\n\t\treturn orig_clearActiveOption.call(self);\n\t});\n\n\t// override the canLoad method\n\tself.hook('instead','canLoad',(query:string)=>{\n\n\t\t// first time the query has been seen\n\t\tif( !(query in pagination) ){\n\t\t\treturn orig_canLoad.call(self,query);\n\t\t}\n\n\t\treturn canLoadMore(query);\n\t});\n\n\n\t// wrap the load\n\tself.hook('instead','loadCallback',( options:TomOption[], optgroups:TomOption[])=>{\n\n\t\tif( !loading_more ){\n\t\t\tself.clearOptions(clearFilter);\n\t\t}else if( load_more_opt ){\n\t\t\tconst first_option = options[0];\n\t\t\tif( first_option !== undefined ){\n\t\t\t\tload_more_opt.dataset.value\t\t= first_option[self.settings.valueField];\n\t\t\t}\n\t\t}\n\n\t\torig_loadCallback.call( self, options, optgroups);\n\n\t\tloading_more = false;\n\t});\n\n\n\t// add templates to dropdown\n\t//\tloading_more if we have another url in the queue\n\t//\tno_more_results if we don't have another url in the queue\n\tself.hook('after','refreshOptions',()=>{\n\n\t\tconst query\t\t= self.lastValue;\n\t\tvar option;\n\n\t\tif( canLoadMore(query) ){\n\n\t\t\toption = self.render('loading_more',{query:query});\n\t\t\tif( option ){\n\t\t\t\toption.setAttribute('data-selectable',''); // so that navigating dropdown with [down] keypresses can navigate to this node\n\t\t\t\tload_more_opt = option;\n\t\t\t}\n\n\t\t}else if( (query in pagination) && !dropdown_content.querySelector('.no-results') ){\n\t\t\toption = self.render('no_more_results',{query:query});\n\t\t}\n\n\t\tif( option ){\n\t\t\taddClasses(option,self.settings.optionClass);\n\t\t\tdropdown_content.append( option );\n\t\t}\n\n\t});\n\n\n\t// add scroll listener and default templates\n\tself.on('initialize',()=>{\n\t\tdefault_values = Object.keys(self.options);\n\t\tdropdown_content = self.dropdown_content;\n\n\t\t// default templates\n\t\tself.settings.render = Object.assign({}, {\n\t\t\tloading_more:() => {\n\t\t\t\treturn `<div class=\"loading-more-results\">Loading more results ... </div>`;\n\t\t\t},\n\t\t\tno_more_results:() =>{\n\t\t\t\treturn `<div class=\"no-more-results\">No more results</div>`;\n\t\t\t}\n\t\t},self.settings.render);\n\n\n\t\t// watch dropdown content scroll position\n\t\tdropdown_content.addEventListener('scroll',()=>{\n\n\t\t\tif( !self.settings.shouldLoadMore.call(self) ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// !important: this will get checked again in load() but we still need to check here otherwise loading_more will be set to true\n\t\t\tif( !canLoadMore(self.lastValue) ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// don't call load() too much\n\t\t\tif( loading_more ) return;\n\n\n\t\t\tloading_more = true;\n\t\t\tself.load.call(self,self.lastValue);\n\t\t});\n\t});\n\n};\n", "import TomSelect from './tom-select';\n\nimport change_listener from './plugins/change_listener/plugin';\nimport checkbox_options from './plugins/checkbox_options/plugin';\nimport clear_button from './plugins/clear_button/plugin';\nimport drag_drop from './plugins/drag_drop/plugin';\nimport dropdown_header from './plugins/dropdown_header/plugin';\nimport caret_position from './plugins/caret_position/plugin';\nimport dropdown_input from './plugins/dropdown_input/plugin';\nimport input_autogrow from './plugins/input_autogrow/plugin';\nimport no_backspace_delete from './plugins/no_backspace_delete/plugin';\nimport no_active_items from './plugins/no_active_items/plugin';\nimport optgroup_columns from './plugins/optgroup_columns/plugin';\nimport remove_button from './plugins/remove_button/plugin';\nimport restore_on_backspace from './plugins/restore_on_backspace/plugin';\nimport virtual_scroll from './plugins/virtual_scroll/plugin';\n\nTomSelect.define('change_listener', change_listener);\nTomSelect.define('checkbox_options', checkbox_options);\nTomSelect.define('clear_button', clear_button);\nTomSelect.define('drag_drop', drag_drop);\nTomSelect.define('dropdown_header', dropdown_header);\nTomSelect.define('caret_position', caret_position);\nTomSelect.define('dropdown_input', dropdown_input);\nTomSelect.define('input_autogrow', input_autogrow);\nTomSelect.define('no_backspace_delete', no_backspace_delete);\nTomSelect.define('no_active_items', no_active_items);\nTomSelect.define('optgroup_columns', optgroup_columns);\nTomSelect.define('remove_button', remove_button);\nTomSelect.define('restore_on_backspace', restore_on_backspace);\nTomSelect.define('virtual_scroll', virtual_scroll);\n\nexport default TomSelect;\n", "/*!\n* sweetalert2 v11.7.12\n* Released under the MIT License.\n*/\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Sweetalert2 = factory());\n})(this, (function () { 'use strict';\n\n  const RESTORE_FOCUS_TIMEOUT = 100;\n\n  /** @type {GlobalState} */\n  const globalState = {};\n  const focusPreviousActiveElement = () => {\n    if (globalState.previousActiveElement instanceof HTMLElement) {\n      globalState.previousActiveElement.focus();\n      globalState.previousActiveElement = null;\n    } else if (document.body) {\n      document.body.focus();\n    }\n  };\n\n  /**\n   * Restore previous active (focused) element\n   *\n   * @param {boolean} returnFocus\n   * @returns {Promise<void>}\n   */\n  const restoreActiveElement = returnFocus => {\n    return new Promise(resolve => {\n      if (!returnFocus) {\n        return resolve();\n      }\n      const x = window.scrollX;\n      const y = window.scrollY;\n      globalState.restoreFocusTimeout = setTimeout(() => {\n        focusPreviousActiveElement();\n        resolve();\n      }, RESTORE_FOCUS_TIMEOUT); // issues/900\n\n      window.scrollTo(x, y);\n    });\n  };\n\n  /**\n   * This module contains `WeakMap`s for each effectively-\"private  property\" that a `Swal` has.\n   * For example, to set the private property \"foo\" of `this` to \"bar\", you can `privateProps.foo.set(this, 'bar')`\n   * This is the approach that Babel will probably take to implement private methods/fields\n   *   https://github.com/tc39/proposal-private-methods\n   *   https://github.com/babel/babel/pull/7555\n   * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*\n   *   then we can use that language feature.\n   */\n\n  var privateProps = {\n    promise: new WeakMap(),\n    innerParams: new WeakMap(),\n    domCache: new WeakMap()\n  };\n\n  const swalPrefix = 'swal2-';\n\n  /**\n   * @typedef\n   * { | 'container'\n   *   | 'shown'\n   *   | 'height-auto'\n   *   | 'iosfix'\n   *   | 'popup'\n   *   | 'modal'\n   *   | 'no-backdrop'\n   *   | 'no-transition'\n   *   | 'toast'\n   *   | 'toast-shown'\n   *   | 'show'\n   *   | 'hide'\n   *   | 'close'\n   *   | 'title'\n   *   | 'html-container'\n   *   | 'actions'\n   *   | 'confirm'\n   *   | 'deny'\n   *   | 'cancel'\n   *   | 'default-outline'\n   *   | 'footer'\n   *   | 'icon'\n   *   | 'icon-content'\n   *   | 'image'\n   *   | 'input'\n   *   | 'file'\n   *   | 'range'\n   *   | 'select'\n   *   | 'radio'\n   *   | 'checkbox'\n   *   | 'label'\n   *   | 'textarea'\n   *   | 'inputerror'\n   *   | 'input-label'\n   *   | 'validation-message'\n   *   | 'progress-steps'\n   *   | 'active-progress-step'\n   *   | 'progress-step'\n   *   | 'progress-step-line'\n   *   | 'loader'\n   *   | 'loading'\n   *   | 'styled'\n   *   | 'top'\n   *   | 'top-start'\n   *   | 'top-end'\n   *   | 'top-left'\n   *   | 'top-right'\n   *   | 'center'\n   *   | 'center-start'\n   *   | 'center-end'\n   *   | 'center-left'\n   *   | 'center-right'\n   *   | 'bottom'\n   *   | 'bottom-start'\n   *   | 'bottom-end'\n   *   | 'bottom-left'\n   *   | 'bottom-right'\n   *   | 'grow-row'\n   *   | 'grow-column'\n   *   | 'grow-fullscreen'\n   *   | 'rtl'\n   *   | 'timer-progress-bar'\n   *   | 'timer-progress-bar-container'\n   *   | 'scrollbar-measure'\n   *   | 'icon-success'\n   *   | 'icon-warning'\n   *   | 'icon-info'\n   *   | 'icon-question'\n   *   | 'icon-error'\n   * } SwalClass\n   * @typedef {Record<SwalClass, string>} SwalClasses\n   */\n\n  /**\n   * @typedef {'success' | 'warning' | 'info' | 'question' | 'error'} SwalIcon\n   * @typedef {Record<SwalIcon, string>} SwalIcons\n   */\n\n  /** @type {SwalClass[]} */\n  const classNames = ['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error'];\n  const swalClasses = classNames.reduce((acc, className) => {\n    acc[className] = swalPrefix + className;\n    return acc;\n  }, /** @type {SwalClasses} */{});\n\n  /** @type {SwalIcon[]} */\n  const icons = ['success', 'warning', 'info', 'question', 'error'];\n  const iconTypes = icons.reduce((acc, icon) => {\n    acc[icon] = swalPrefix + icon;\n    return acc;\n  }, /** @type {SwalIcons} */{});\n\n  const consolePrefix = 'SweetAlert2:';\n\n  /**\n   * Capitalize the first letter of a string\n   *\n   * @param {string} str\n   * @returns {string}\n   */\n  const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1);\n\n  /**\n   * Standardize console warnings\n   *\n   * @param {string | string[]} message\n   */\n  const warn = message => {\n    console.warn(`${consolePrefix} ${typeof message === 'object' ? message.join(' ') : message}`);\n  };\n\n  /**\n   * Standardize console errors\n   *\n   * @param {string} message\n   */\n  const error = message => {\n    console.error(`${consolePrefix} ${message}`);\n  };\n\n  /**\n   * Private global state for `warnOnce`\n   *\n   * @type {string[]}\n   * @private\n   */\n  const previousWarnOnceMessages = [];\n\n  /**\n   * Show a console warning, but only if it hasn't already been shown\n   *\n   * @param {string} message\n   */\n  const warnOnce = message => {\n    if (!previousWarnOnceMessages.includes(message)) {\n      previousWarnOnceMessages.push(message);\n      warn(message);\n    }\n  };\n\n  /**\n   * Show a one-time console warning about deprecated params/methods\n   *\n   * @param {string} deprecatedParam\n   * @param {string} useInstead\n   */\n  const warnAboutDeprecation = (deprecatedParam, useInstead) => {\n    warnOnce(`\"${deprecatedParam}\" is deprecated and will be removed in the next major release. Please use \"${useInstead}\" instead.`);\n  };\n\n  /**\n   * If `arg` is a function, call it (with no arguments or context) and return the result.\n   * Otherwise, just pass the value through\n   *\n   * @param {Function | any} arg\n   * @returns {any}\n   */\n  const callIfFunction = arg => typeof arg === 'function' ? arg() : arg;\n\n  /**\n   * @param {any} arg\n   * @returns {boolean}\n   */\n  const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function';\n\n  /**\n   * @param {any} arg\n   * @returns {Promise<any>}\n   */\n  const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg);\n\n  /**\n   * @param {any} arg\n   * @returns {boolean}\n   */\n  const isPromise = arg => arg && Promise.resolve(arg) === arg;\n\n  /**\n   * Gets the popup container which contains the backdrop and the popup itself.\n   *\n   * @returns {HTMLElement | null}\n   */\n  const getContainer = () => document.body.querySelector(`.${swalClasses.container}`);\n\n  /**\n   * @param {string} selectorString\n   * @returns {HTMLElement | null}\n   */\n  const elementBySelector = selectorString => {\n    const container = getContainer();\n    return container ? container.querySelector(selectorString) : null;\n  };\n\n  /**\n   * @param {string} className\n   * @returns {HTMLElement | null}\n   */\n  const elementByClass = className => {\n    return elementBySelector(`.${className}`);\n  };\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getPopup = () => elementByClass(swalClasses.popup);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getIcon = () => elementByClass(swalClasses.icon);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getIconContent = () => elementByClass(swalClasses['icon-content']);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getTitle = () => elementByClass(swalClasses.title);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getHtmlContainer = () => elementByClass(swalClasses['html-container']);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getImage = () => elementByClass(swalClasses.image);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getProgressSteps = () => elementByClass(swalClasses['progress-steps']);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getValidationMessage = () => elementByClass(swalClasses['validation-message']);\n\n  /**\n   * @returns {HTMLButtonElement | null}\n   */\n  const getConfirmButton = () => /** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.confirm}`);\n\n  /**\n   * @returns {HTMLButtonElement | null}\n   */\n  const getCancelButton = () => /** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.cancel}`);\n\n  /**\n   * @returns {HTMLButtonElement | null}\n   */\n  const getDenyButton = () => /** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.deny}`);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getInputLabel = () => elementByClass(swalClasses['input-label']);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getLoader = () => elementBySelector(`.${swalClasses.loader}`);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getActions = () => elementByClass(swalClasses.actions);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getFooter = () => elementByClass(swalClasses.footer);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getCloseButton = () => elementByClass(swalClasses.close);\n\n  // https://github.com/jkup/focusable/blob/master/index.js\n  const focusable = `\n  a[href],\n  area[href],\n  input:not([disabled]),\n  select:not([disabled]),\n  textarea:not([disabled]),\n  button:not([disabled]),\n  iframe,\n  object,\n  embed,\n  [tabindex=\"0\"],\n  [contenteditable],\n  audio[controls],\n  video[controls],\n  summary\n`;\n  /**\n   * @returns {HTMLElement[]}\n   */\n  const getFocusableElements = () => {\n    /** @type {NodeListOf<HTMLElement>} */\n    const focusableElementsWithTabindex = getPopup().querySelectorAll('[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])');\n    const focusableElementsWithTabindexSorted = Array.from(focusableElementsWithTabindex)\n    // sort according to tabindex\n    .sort((a, b) => {\n      const tabindexA = parseInt(a.getAttribute('tabindex'));\n      const tabindexB = parseInt(b.getAttribute('tabindex'));\n      if (tabindexA > tabindexB) {\n        return 1;\n      } else if (tabindexA < tabindexB) {\n        return -1;\n      }\n      return 0;\n    });\n\n    /** @type {NodeListOf<HTMLElement>} */\n    const otherFocusableElements = getPopup().querySelectorAll(focusable);\n    const otherFocusableElementsFiltered = Array.from(otherFocusableElements).filter(el => el.getAttribute('tabindex') !== '-1');\n    return [...new Set(focusableElementsWithTabindexSorted.concat(otherFocusableElementsFiltered))].filter(el => isVisible$1(el));\n  };\n\n  /**\n   * @returns {boolean}\n   */\n  const isModal = () => {\n    return hasClass(document.body, swalClasses.shown) && !hasClass(document.body, swalClasses['toast-shown']) && !hasClass(document.body, swalClasses['no-backdrop']);\n  };\n\n  /**\n   * @returns {boolean}\n   */\n  const isToast = () => {\n    return getPopup() && hasClass(getPopup(), swalClasses.toast);\n  };\n\n  /**\n   * @returns {boolean}\n   */\n  const isLoading = () => {\n    return getPopup().hasAttribute('data-loading');\n  };\n\n  /**\n   * Securely set innerHTML of an element\n   * https://github.com/sweetalert2/sweetalert2/issues/1926\n   *\n   * @param {HTMLElement} elem\n   * @param {string} html\n   */\n  const setInnerHtml = (elem, html) => {\n    elem.textContent = '';\n    if (html) {\n      const parser = new DOMParser();\n      const parsed = parser.parseFromString(html, `text/html`);\n      Array.from(parsed.querySelector('head').childNodes).forEach(child => {\n        elem.appendChild(child);\n      });\n      Array.from(parsed.querySelector('body').childNodes).forEach(child => {\n        if (child instanceof HTMLVideoElement || child instanceof HTMLAudioElement) {\n          elem.appendChild(child.cloneNode(true)); // https://github.com/sweetalert2/sweetalert2/issues/2507\n        } else {\n          elem.appendChild(child);\n        }\n      });\n    }\n  };\n\n  /**\n   * @param {HTMLElement} elem\n   * @param {string} className\n   * @returns {boolean}\n   */\n  const hasClass = (elem, className) => {\n    if (!className) {\n      return false;\n    }\n    const classList = className.split(/\\s+/);\n    for (let i = 0; i < classList.length; i++) {\n      if (!elem.classList.contains(classList[i])) {\n        return false;\n      }\n    }\n    return true;\n  };\n\n  /**\n   * @param {HTMLElement} elem\n   * @param {SweetAlertOptions} params\n   */\n  const removeCustomClasses = (elem, params) => {\n    Array.from(elem.classList).forEach(className => {\n      if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass).includes(className)) {\n        elem.classList.remove(className);\n      }\n    });\n  };\n\n  /**\n   * @param {HTMLElement} elem\n   * @param {SweetAlertOptions} params\n   * @param {string} className\n   */\n  const applyCustomClass = (elem, params, className) => {\n    removeCustomClasses(elem, params);\n    if (params.customClass && params.customClass[className]) {\n      if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) {\n        warn(`Invalid type of customClass.${className}! Expected string or iterable object, got \"${typeof params.customClass[className]}\"`);\n        return;\n      }\n      addClass(elem, params.customClass[className]);\n    }\n  };\n\n  /**\n   * @param {HTMLElement} popup\n   * @param {import('./renderers/renderInput').InputClass} inputClass\n   * @returns {HTMLInputElement | null}\n   */\n  const getInput$1 = (popup, inputClass) => {\n    if (!inputClass) {\n      return null;\n    }\n    switch (inputClass) {\n      case 'select':\n      case 'textarea':\n      case 'file':\n        return popup.querySelector(`.${swalClasses.popup} > .${swalClasses[inputClass]}`);\n      case 'checkbox':\n        return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.checkbox} input`);\n      case 'radio':\n        return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.radio} input:checked`) || popup.querySelector(`.${swalClasses.popup} > .${swalClasses.radio} input:first-child`);\n      case 'range':\n        return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.range} input`);\n      default:\n        return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.input}`);\n    }\n  };\n\n  /**\n   * @param {HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement} input\n   */\n  const focusInput = input => {\n    input.focus();\n\n    // place cursor at end of text in text input\n    if (input.type !== 'file') {\n      // http://stackoverflow.com/a/2345915\n      const val = input.value;\n      input.value = '';\n      input.value = val;\n    }\n  };\n\n  /**\n   * @param {HTMLElement | HTMLElement[] | null} target\n   * @param {string | string[] | readonly string[]} classList\n   * @param {boolean} condition\n   */\n  const toggleClass = (target, classList, condition) => {\n    if (!target || !classList) {\n      return;\n    }\n    if (typeof classList === 'string') {\n      classList = classList.split(/\\s+/).filter(Boolean);\n    }\n    classList.forEach(className => {\n      if (Array.isArray(target)) {\n        target.forEach(elem => {\n          condition ? elem.classList.add(className) : elem.classList.remove(className);\n        });\n      } else {\n        condition ? target.classList.add(className) : target.classList.remove(className);\n      }\n    });\n  };\n\n  /**\n   * @param {HTMLElement | HTMLElement[] | null} target\n   * @param {string | string[] | readonly string[]} classList\n   */\n  const addClass = (target, classList) => {\n    toggleClass(target, classList, true);\n  };\n\n  /**\n   * @param {HTMLElement | HTMLElement[] | null} target\n   * @param {string | string[] | readonly string[]} classList\n   */\n  const removeClass = (target, classList) => {\n    toggleClass(target, classList, false);\n  };\n\n  /**\n   * Get direct child of an element by class name\n   *\n   * @param {HTMLElement} elem\n   * @param {string} className\n   * @returns {HTMLElement | undefined}\n   */\n  const getDirectChildByClass = (elem, className) => {\n    const children = Array.from(elem.children);\n    for (let i = 0; i < children.length; i++) {\n      const child = children[i];\n      if (child instanceof HTMLElement && hasClass(child, className)) {\n        return child;\n      }\n    }\n  };\n\n  /**\n   * @param {HTMLElement} elem\n   * @param {string} property\n   * @param {*} value\n   */\n  const applyNumericalStyle = (elem, property, value) => {\n    if (value === `${parseInt(value)}`) {\n      value = parseInt(value);\n    }\n    if (value || parseInt(value) === 0) {\n      elem.style[property] = typeof value === 'number' ? `${value}px` : value;\n    } else {\n      elem.style.removeProperty(property);\n    }\n  };\n\n  /**\n   * @param {HTMLElement | null} elem\n   * @param {string} display\n   */\n  const show = function (elem) {\n    let display = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'flex';\n    elem && (elem.style.display = display);\n  };\n\n  /**\n   * @param {HTMLElement | null} elem\n   */\n  const hide = elem => {\n    elem && (elem.style.display = 'none');\n  };\n\n  /**\n   * @param {HTMLElement} parent\n   * @param {string} selector\n   * @param {string} property\n   * @param {string} value\n   */\n  const setStyle = (parent, selector, property, value) => {\n    /** @type {HTMLElement} */\n    const el = parent.querySelector(selector);\n    if (el) {\n      el.style[property] = value;\n    }\n  };\n\n  /**\n   * @param {HTMLElement} elem\n   * @param {any} condition\n   * @param {string} display\n   */\n  const toggle = function (elem, condition) {\n    let display = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'flex';\n    condition ? show(elem, display) : hide(elem);\n  };\n\n  /**\n   * borrowed from jquery $(elem).is(':visible') implementation\n   *\n   * @param {HTMLElement} elem\n   * @returns {boolean}\n   */\n  const isVisible$1 = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length));\n\n  /**\n   * @returns {boolean}\n   */\n  const allButtonsAreHidden = () => !isVisible$1(getConfirmButton()) && !isVisible$1(getDenyButton()) && !isVisible$1(getCancelButton());\n\n  /**\n   * @param {HTMLElement} elem\n   * @returns {boolean}\n   */\n  const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight);\n\n  /**\n   * borrowed from https://stackoverflow.com/a/46352119\n   *\n   * @param {HTMLElement} elem\n   * @returns {boolean}\n   */\n  const hasCssAnimation = elem => {\n    const style = window.getComputedStyle(elem);\n    const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0');\n    const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0');\n    return animDuration > 0 || transDuration > 0;\n  };\n\n  /**\n   * @param {number} timer\n   * @param {boolean} reset\n   */\n  const animateTimerProgressBar = function (timer) {\n    let reset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    const timerProgressBar = getTimerProgressBar();\n    if (isVisible$1(timerProgressBar)) {\n      if (reset) {\n        timerProgressBar.style.transition = 'none';\n        timerProgressBar.style.width = '100%';\n      }\n      setTimeout(() => {\n        timerProgressBar.style.transition = `width ${timer / 1000}s linear`;\n        timerProgressBar.style.width = '0%';\n      }, 10);\n    }\n  };\n  const stopTimerProgressBar = () => {\n    const timerProgressBar = getTimerProgressBar();\n    const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width);\n    timerProgressBar.style.removeProperty('transition');\n    timerProgressBar.style.width = '100%';\n    const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width);\n    const timerProgressBarPercent = timerProgressBarWidth / timerProgressBarFullWidth * 100;\n    timerProgressBar.style.width = `${timerProgressBarPercent}%`;\n  };\n\n  /**\n   * Detect Node env\n   *\n   * @returns {boolean}\n   */\n  const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined';\n\n  const sweetHTML = `\n <div aria-labelledby=\"${swalClasses.title}\" aria-describedby=\"${swalClasses['html-container']}\" class=\"${swalClasses.popup}\" tabindex=\"-1\">\n   <button type=\"button\" class=\"${swalClasses.close}\"></button>\n   <ul class=\"${swalClasses['progress-steps']}\"></ul>\n   <div class=\"${swalClasses.icon}\"></div>\n   <img class=\"${swalClasses.image}\" />\n   <h2 class=\"${swalClasses.title}\" id=\"${swalClasses.title}\"></h2>\n   <div class=\"${swalClasses['html-container']}\" id=\"${swalClasses['html-container']}\"></div>\n   <input class=\"${swalClasses.input}\" />\n   <input type=\"file\" class=\"${swalClasses.file}\" />\n   <div class=\"${swalClasses.range}\">\n     <input type=\"range\" />\n     <output></output>\n   </div>\n   <select class=\"${swalClasses.select}\"></select>\n   <div class=\"${swalClasses.radio}\"></div>\n   <label for=\"${swalClasses.checkbox}\" class=\"${swalClasses.checkbox}\">\n     <input type=\"checkbox\" />\n     <span class=\"${swalClasses.label}\"></span>\n   </label>\n   <textarea class=\"${swalClasses.textarea}\"></textarea>\n   <div class=\"${swalClasses['validation-message']}\" id=\"${swalClasses['validation-message']}\"></div>\n   <div class=\"${swalClasses.actions}\">\n     <div class=\"${swalClasses.loader}\"></div>\n     <button type=\"button\" class=\"${swalClasses.confirm}\"></button>\n     <button type=\"button\" class=\"${swalClasses.deny}\"></button>\n     <button type=\"button\" class=\"${swalClasses.cancel}\"></button>\n   </div>\n   <div class=\"${swalClasses.footer}\"></div>\n   <div class=\"${swalClasses['timer-progress-bar-container']}\">\n     <div class=\"${swalClasses['timer-progress-bar']}\"></div>\n   </div>\n </div>\n`.replace(/(^|\\n)\\s*/g, '');\n\n  /**\n   * @returns {boolean}\n   */\n  const resetOldContainer = () => {\n    const oldContainer = getContainer();\n    if (!oldContainer) {\n      return false;\n    }\n    oldContainer.remove();\n    removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]);\n    return true;\n  };\n  const resetValidationMessage$1 = () => {\n    globalState.currentInstance.resetValidationMessage();\n  };\n  const addInputChangeListeners = () => {\n    const popup = getPopup();\n    const input = getDirectChildByClass(popup, swalClasses.input);\n    const file = getDirectChildByClass(popup, swalClasses.file);\n    /** @type {HTMLInputElement} */\n    const range = popup.querySelector(`.${swalClasses.range} input`);\n    /** @type {HTMLOutputElement} */\n    const rangeOutput = popup.querySelector(`.${swalClasses.range} output`);\n    const select = getDirectChildByClass(popup, swalClasses.select);\n    /** @type {HTMLInputElement} */\n    const checkbox = popup.querySelector(`.${swalClasses.checkbox} input`);\n    const textarea = getDirectChildByClass(popup, swalClasses.textarea);\n    input.oninput = resetValidationMessage$1;\n    file.onchange = resetValidationMessage$1;\n    select.onchange = resetValidationMessage$1;\n    checkbox.onchange = resetValidationMessage$1;\n    textarea.oninput = resetValidationMessage$1;\n    range.oninput = () => {\n      resetValidationMessage$1();\n      rangeOutput.value = range.value;\n    };\n    range.onchange = () => {\n      resetValidationMessage$1();\n      rangeOutput.value = range.value;\n    };\n  };\n\n  /**\n   * @param {string | HTMLElement} target\n   * @returns {HTMLElement}\n   */\n  const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target;\n\n  /**\n   * @param {SweetAlertOptions} params\n   */\n  const setupAccessibility = params => {\n    const popup = getPopup();\n    popup.setAttribute('role', params.toast ? 'alert' : 'dialog');\n    popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive');\n    if (!params.toast) {\n      popup.setAttribute('aria-modal', 'true');\n    }\n  };\n\n  /**\n   * @param {HTMLElement} targetElement\n   */\n  const setupRTL = targetElement => {\n    if (window.getComputedStyle(targetElement).direction === 'rtl') {\n      addClass(getContainer(), swalClasses.rtl);\n    }\n  };\n\n  /**\n   * Add modal + backdrop + no-war message for Russians to DOM\n   *\n   * @param {SweetAlertOptions} params\n   */\n  const init = params => {\n    // Clean up the old popup container if it exists\n    const oldContainerExisted = resetOldContainer();\n\n    /* istanbul ignore if */\n    if (isNodeEnv()) {\n      error('SweetAlert2 requires document to initialize');\n      return;\n    }\n    const container = document.createElement('div');\n    container.className = swalClasses.container;\n    if (oldContainerExisted) {\n      addClass(container, swalClasses['no-transition']);\n    }\n    setInnerHtml(container, sweetHTML);\n    const targetElement = getTarget(params.target);\n    targetElement.appendChild(container);\n    setupAccessibility(params);\n    setupRTL(targetElement);\n    addInputChangeListeners();\n  };\n\n  /**\n   * @param {HTMLElement | object | string} param\n   * @param {HTMLElement} target\n   */\n  const parseHtmlToContainer = (param, target) => {\n    // DOM element\n    if (param instanceof HTMLElement) {\n      target.appendChild(param);\n    }\n\n    // Object\n    else if (typeof param === 'object') {\n      handleObject(param, target);\n    }\n\n    // Plain string\n    else if (param) {\n      setInnerHtml(target, param);\n    }\n  };\n\n  /**\n   * @param {object} param\n   * @param {HTMLElement} target\n   */\n  const handleObject = (param, target) => {\n    // JQuery element(s)\n    if (param.jquery) {\n      handleJqueryElem(target, param);\n    }\n\n    // For other objects use their string representation\n    else {\n      setInnerHtml(target, param.toString());\n    }\n  };\n\n  /**\n   * @param {HTMLElement} target\n   * @param {HTMLElement} elem\n   */\n  const handleJqueryElem = (target, elem) => {\n    target.textContent = '';\n    if (0 in elem) {\n      for (let i = 0; (i in elem); i++) {\n        target.appendChild(elem[i].cloneNode(true));\n      }\n    } else {\n      target.appendChild(elem.cloneNode(true));\n    }\n  };\n\n  /**\n   * @returns {'webkitAnimationEnd' | 'animationend' | false}\n   */\n  const animationEndEvent = (() => {\n    // Prevent run in Node env\n    /* istanbul ignore if */\n    if (isNodeEnv()) {\n      return false;\n    }\n    const testEl = document.createElement('div');\n    const transEndEventNames = {\n      WebkitAnimation: 'webkitAnimationEnd',\n      // Chrome, Safari and Opera\n      animation: 'animationend' // Standard syntax\n    };\n\n    for (const i in transEndEventNames) {\n      if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') {\n        return transEndEventNames[i];\n      }\n    }\n    return false;\n  })();\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderActions = (instance, params) => {\n    const actions = getActions();\n    const loader = getLoader();\n\n    // Actions (buttons) wrapper\n    if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) {\n      hide(actions);\n    } else {\n      show(actions);\n    }\n\n    // Custom class\n    applyCustomClass(actions, params, 'actions');\n\n    // Render all the buttons\n    renderButtons(actions, loader, params);\n\n    // Loader\n    setInnerHtml(loader, params.loaderHtml);\n    applyCustomClass(loader, params, 'loader');\n  };\n\n  /**\n   * @param {HTMLElement} actions\n   * @param {HTMLElement} loader\n   * @param {SweetAlertOptions} params\n   */\n  function renderButtons(actions, loader, params) {\n    const confirmButton = getConfirmButton();\n    const denyButton = getDenyButton();\n    const cancelButton = getCancelButton();\n\n    // Render buttons\n    renderButton(confirmButton, 'confirm', params);\n    renderButton(denyButton, 'deny', params);\n    renderButton(cancelButton, 'cancel', params);\n    handleButtonsStyling(confirmButton, denyButton, cancelButton, params);\n    if (params.reverseButtons) {\n      if (params.toast) {\n        actions.insertBefore(cancelButton, confirmButton);\n        actions.insertBefore(denyButton, confirmButton);\n      } else {\n        actions.insertBefore(cancelButton, loader);\n        actions.insertBefore(denyButton, loader);\n        actions.insertBefore(confirmButton, loader);\n      }\n    }\n  }\n\n  /**\n   * @param {HTMLElement} confirmButton\n   * @param {HTMLElement} denyButton\n   * @param {HTMLElement} cancelButton\n   * @param {SweetAlertOptions} params\n   */\n  function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) {\n    if (!params.buttonsStyling) {\n      removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled);\n      return;\n    }\n    addClass([confirmButton, denyButton, cancelButton], swalClasses.styled);\n\n    // Buttons background colors\n    if (params.confirmButtonColor) {\n      confirmButton.style.backgroundColor = params.confirmButtonColor;\n      addClass(confirmButton, swalClasses['default-outline']);\n    }\n    if (params.denyButtonColor) {\n      denyButton.style.backgroundColor = params.denyButtonColor;\n      addClass(denyButton, swalClasses['default-outline']);\n    }\n    if (params.cancelButtonColor) {\n      cancelButton.style.backgroundColor = params.cancelButtonColor;\n      addClass(cancelButton, swalClasses['default-outline']);\n    }\n  }\n\n  /**\n   * @param {HTMLElement} button\n   * @param {'confirm' | 'deny' | 'cancel'} buttonType\n   * @param {SweetAlertOptions} params\n   */\n  function renderButton(button, buttonType, params) {\n    toggle(button, params[`show${capitalizeFirstLetter(buttonType)}Button`], 'inline-block');\n    setInnerHtml(button, params[`${buttonType}ButtonText`]); // Set caption text\n    button.setAttribute('aria-label', params[`${buttonType}ButtonAriaLabel`]); // ARIA label\n\n    // Add buttons custom classes\n    button.className = swalClasses[buttonType];\n    applyCustomClass(button, params, `${buttonType}Button`);\n    addClass(button, params[`${buttonType}ButtonClass`]);\n  }\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderCloseButton = (instance, params) => {\n    const closeButton = getCloseButton();\n    if (!closeButton) {\n      return;\n    }\n    setInnerHtml(closeButton, params.closeButtonHtml || '');\n\n    // Custom class\n    applyCustomClass(closeButton, params, 'closeButton');\n    toggle(closeButton, params.showCloseButton);\n    closeButton.setAttribute('aria-label', params.closeButtonAriaLabel || '');\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderContainer = (instance, params) => {\n    const container = getContainer();\n    if (!container) {\n      return;\n    }\n    handleBackdropParam(container, params.backdrop);\n    handlePositionParam(container, params.position);\n    handleGrowParam(container, params.grow);\n\n    // Custom class\n    applyCustomClass(container, params, 'container');\n  };\n\n  /**\n   * @param {HTMLElement} container\n   * @param {SweetAlertOptions['backdrop']} backdrop\n   */\n  function handleBackdropParam(container, backdrop) {\n    if (typeof backdrop === 'string') {\n      container.style.background = backdrop;\n    } else if (!backdrop) {\n      addClass([document.documentElement, document.body], swalClasses['no-backdrop']);\n    }\n  }\n\n  /**\n   * @param {HTMLElement} container\n   * @param {SweetAlertOptions['position']} position\n   */\n  function handlePositionParam(container, position) {\n    if (position in swalClasses) {\n      addClass(container, swalClasses[position]);\n    } else {\n      warn('The \"position\" parameter is not valid, defaulting to \"center\"');\n      addClass(container, swalClasses.center);\n    }\n  }\n\n  /**\n   * @param {HTMLElement} container\n   * @param {SweetAlertOptions['grow']} grow\n   */\n  function handleGrowParam(container, grow) {\n    if (grow && typeof grow === 'string') {\n      const growClass = `grow-${grow}`;\n      if (growClass in swalClasses) {\n        addClass(container, swalClasses[growClass]);\n      }\n    }\n  }\n\n  /// <reference path=\"../../../../sweetalert2.d.ts\"/>\n\n\n  /** @type {InputClass[]} */\n  const inputClasses = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderInput = (instance, params) => {\n    const popup = getPopup();\n    const innerParams = privateProps.innerParams.get(instance);\n    const rerender = !innerParams || params.input !== innerParams.input;\n    inputClasses.forEach(inputClass => {\n      const inputContainer = getDirectChildByClass(popup, swalClasses[inputClass]);\n\n      // set attributes\n      setAttributes(inputClass, params.inputAttributes);\n\n      // set class\n      inputContainer.className = swalClasses[inputClass];\n      if (rerender) {\n        hide(inputContainer);\n      }\n    });\n    if (params.input) {\n      if (rerender) {\n        showInput(params);\n      }\n      // set custom class\n      setCustomClass(params);\n    }\n  };\n\n  /**\n   * @param {SweetAlertOptions} params\n   */\n  const showInput = params => {\n    if (!renderInputType[params.input]) {\n      error(`Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"${params.input}\"`);\n      return;\n    }\n    const inputContainer = getInputContainer(params.input);\n    const input = renderInputType[params.input](inputContainer, params);\n    show(inputContainer);\n\n    // input autofocus\n    if (params.inputAutoFocus) {\n      setTimeout(() => {\n        focusInput(input);\n      });\n    }\n  };\n\n  /**\n   * @param {HTMLInputElement} input\n   */\n  const removeAttributes = input => {\n    for (let i = 0; i < input.attributes.length; i++) {\n      const attrName = input.attributes[i].name;\n      if (!['type', 'value', 'style'].includes(attrName)) {\n        input.removeAttribute(attrName);\n      }\n    }\n  };\n\n  /**\n   * @param {InputClass} inputClass\n   * @param {SweetAlertOptions['inputAttributes']} inputAttributes\n   */\n  const setAttributes = (inputClass, inputAttributes) => {\n    const input = getInput$1(getPopup(), inputClass);\n    if (!input) {\n      return;\n    }\n    removeAttributes(input);\n    for (const attr in inputAttributes) {\n      input.setAttribute(attr, inputAttributes[attr]);\n    }\n  };\n\n  /**\n   * @param {SweetAlertOptions} params\n   */\n  const setCustomClass = params => {\n    const inputContainer = getInputContainer(params.input);\n    if (typeof params.customClass === 'object') {\n      addClass(inputContainer, params.customClass.input);\n    }\n  };\n\n  /**\n   * @param {HTMLInputElement | HTMLTextAreaElement} input\n   * @param {SweetAlertOptions} params\n   */\n  const setInputPlaceholder = (input, params) => {\n    if (!input.placeholder || params.inputPlaceholder) {\n      input.placeholder = params.inputPlaceholder;\n    }\n  };\n\n  /**\n   * @param {Input} input\n   * @param {Input} prependTo\n   * @param {SweetAlertOptions} params\n   */\n  const setInputLabel = (input, prependTo, params) => {\n    if (params.inputLabel) {\n      input.id = swalClasses.input;\n      const label = document.createElement('label');\n      const labelClass = swalClasses['input-label'];\n      label.setAttribute('for', input.id);\n      label.className = labelClass;\n      if (typeof params.customClass === 'object') {\n        addClass(label, params.customClass.inputLabel);\n      }\n      label.innerText = params.inputLabel;\n      prependTo.insertAdjacentElement('beforebegin', label);\n    }\n  };\n\n  /**\n   * @param {SweetAlertOptions['input']} inputType\n   * @returns {HTMLElement}\n   */\n  const getInputContainer = inputType => {\n    return getDirectChildByClass(getPopup(), swalClasses[inputType] || swalClasses.input);\n  };\n\n  /**\n   * @param {HTMLInputElement | HTMLOutputElement | HTMLTextAreaElement} input\n   * @param {SweetAlertOptions['inputValue']} inputValue\n   */\n  const checkAndSetInputValue = (input, inputValue) => {\n    if (['string', 'number'].includes(typeof inputValue)) {\n      input.value = `${inputValue}`;\n    } else if (!isPromise(inputValue)) {\n      warn(`Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"${typeof inputValue}\"`);\n    }\n  };\n\n  /** @type {Record<string, (input: Input | HTMLElement, params: SweetAlertOptions) => Input>} */\n  const renderInputType = {};\n\n  /**\n   * @param {HTMLInputElement} input\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLInputElement}\n   */\n  renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => {\n    checkAndSetInputValue(input, params.inputValue);\n    setInputLabel(input, input, params);\n    setInputPlaceholder(input, params);\n    input.type = params.input;\n    return input;\n  };\n\n  /**\n   * @param {HTMLInputElement} input\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLInputElement}\n   */\n  renderInputType.file = (input, params) => {\n    setInputLabel(input, input, params);\n    setInputPlaceholder(input, params);\n    return input;\n  };\n\n  /**\n   * @param {HTMLInputElement} range\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLInputElement}\n   */\n  renderInputType.range = (range, params) => {\n    const rangeInput = range.querySelector('input');\n    const rangeOutput = range.querySelector('output');\n    checkAndSetInputValue(rangeInput, params.inputValue);\n    rangeInput.type = params.input;\n    checkAndSetInputValue(rangeOutput, params.inputValue);\n    setInputLabel(rangeInput, range, params);\n    return range;\n  };\n\n  /**\n   * @param {HTMLSelectElement} select\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLSelectElement}\n   */\n  renderInputType.select = (select, params) => {\n    select.textContent = '';\n    if (params.inputPlaceholder) {\n      const placeholder = document.createElement('option');\n      setInnerHtml(placeholder, params.inputPlaceholder);\n      placeholder.value = '';\n      placeholder.disabled = true;\n      placeholder.selected = true;\n      select.appendChild(placeholder);\n    }\n    setInputLabel(select, select, params);\n    return select;\n  };\n\n  /**\n   * @param {HTMLInputElement} radio\n   * @returns {HTMLInputElement}\n   */\n  renderInputType.radio = radio => {\n    radio.textContent = '';\n    return radio;\n  };\n\n  /**\n   * @param {HTMLLabelElement} checkboxContainer\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLInputElement}\n   */\n  renderInputType.checkbox = (checkboxContainer, params) => {\n    const checkbox = getInput$1(getPopup(), 'checkbox');\n    checkbox.value = '1';\n    checkbox.id = swalClasses.checkbox;\n    checkbox.checked = Boolean(params.inputValue);\n    const label = checkboxContainer.querySelector('span');\n    setInnerHtml(label, params.inputPlaceholder);\n    return checkbox;\n  };\n\n  /**\n   * @param {HTMLTextAreaElement} textarea\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLTextAreaElement}\n   */\n  renderInputType.textarea = (textarea, params) => {\n    checkAndSetInputValue(textarea, params.inputValue);\n    setInputPlaceholder(textarea, params);\n    setInputLabel(textarea, textarea, params);\n\n    /**\n     * @param {HTMLElement} el\n     * @returns {number}\n     */\n    const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight);\n\n    // https://github.com/sweetalert2/sweetalert2/issues/2291\n    setTimeout(() => {\n      // https://github.com/sweetalert2/sweetalert2/issues/1699\n      if ('MutationObserver' in window) {\n        const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width);\n        const textareaResizeHandler = () => {\n          const textareaWidth = textarea.offsetWidth + getMargin(textarea);\n          if (textareaWidth > initialPopupWidth) {\n            getPopup().style.width = `${textareaWidth}px`;\n          } else {\n            getPopup().style.width = null;\n          }\n        };\n        new MutationObserver(textareaResizeHandler).observe(textarea, {\n          attributes: true,\n          attributeFilter: ['style']\n        });\n      }\n    });\n    return textarea;\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderContent = (instance, params) => {\n    const htmlContainer = getHtmlContainer();\n    if (!htmlContainer) {\n      return;\n    }\n    applyCustomClass(htmlContainer, params, 'htmlContainer');\n\n    // Content as HTML\n    if (params.html) {\n      parseHtmlToContainer(params.html, htmlContainer);\n      show(htmlContainer, 'block');\n    }\n\n    // Content as plain text\n    else if (params.text) {\n      htmlContainer.textContent = params.text;\n      show(htmlContainer, 'block');\n    }\n\n    // No content\n    else {\n      hide(htmlContainer);\n    }\n    renderInput(instance, params);\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderFooter = (instance, params) => {\n    const footer = getFooter();\n    if (!footer) {\n      return;\n    }\n    toggle(footer, params.footer);\n    if (params.footer) {\n      parseHtmlToContainer(params.footer, footer);\n    }\n\n    // Custom class\n    applyCustomClass(footer, params, 'footer');\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderIcon = (instance, params) => {\n    const innerParams = privateProps.innerParams.get(instance);\n    const icon = getIcon();\n\n    // if the given icon already rendered, apply the styling without re-rendering the icon\n    if (innerParams && params.icon === innerParams.icon) {\n      // Custom or default content\n      setContent(icon, params);\n      applyStyles(icon, params);\n      return;\n    }\n    if (!params.icon && !params.iconHtml) {\n      hide(icon);\n      return;\n    }\n    if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) {\n      error(`Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"${params.icon}\"`);\n      hide(icon);\n      return;\n    }\n    show(icon);\n\n    // Custom or default content\n    setContent(icon, params);\n    applyStyles(icon, params);\n\n    // Animate icon\n    addClass(icon, params.showClass.icon);\n  };\n\n  /**\n   * @param {HTMLElement} icon\n   * @param {SweetAlertOptions} params\n   */\n  const applyStyles = (icon, params) => {\n    for (const iconType in iconTypes) {\n      if (params.icon !== iconType) {\n        removeClass(icon, iconTypes[iconType]);\n      }\n    }\n    addClass(icon, iconTypes[params.icon]);\n\n    // Icon color\n    setColor(icon, params);\n\n    // Success icon background color\n    adjustSuccessIconBackgroundColor();\n\n    // Custom class\n    applyCustomClass(icon, params, 'icon');\n  };\n\n  // Adjust success icon background color to match the popup background color\n  const adjustSuccessIconBackgroundColor = () => {\n    const popup = getPopup();\n    const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color');\n    /** @type {NodeListOf<HTMLElement>} */\n    const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix');\n    for (let i = 0; i < successIconParts.length; i++) {\n      successIconParts[i].style.backgroundColor = popupBackgroundColor;\n    }\n  };\n  const successIconHtml = `\n  <div class=\"swal2-success-circular-line-left\"></div>\n  <span class=\"swal2-success-line-tip\"></span> <span class=\"swal2-success-line-long\"></span>\n  <div class=\"swal2-success-ring\"></div> <div class=\"swal2-success-fix\"></div>\n  <div class=\"swal2-success-circular-line-right\"></div>\n`;\n  const errorIconHtml = `\n  <span class=\"swal2-x-mark\">\n    <span class=\"swal2-x-mark-line-left\"></span>\n    <span class=\"swal2-x-mark-line-right\"></span>\n  </span>\n`;\n\n  /**\n   * @param {HTMLElement} icon\n   * @param {SweetAlertOptions} params\n   */\n  const setContent = (icon, params) => {\n    let oldContent = icon.innerHTML;\n    let newContent;\n    if (params.iconHtml) {\n      newContent = iconContent(params.iconHtml);\n    } else if (params.icon === 'success') {\n      newContent = successIconHtml;\n      oldContent = oldContent.replace(/ style=\".*?\"/g, ''); // undo adjustSuccessIconBackgroundColor()\n    } else if (params.icon === 'error') {\n      newContent = errorIconHtml;\n    } else {\n      const defaultIconHtml = {\n        question: '?',\n        warning: '!',\n        info: 'i'\n      };\n      newContent = iconContent(defaultIconHtml[params.icon]);\n    }\n    if (oldContent.trim() !== newContent.trim()) {\n      setInnerHtml(icon, newContent);\n    }\n  };\n\n  /**\n   * @param {HTMLElement} icon\n   * @param {SweetAlertOptions} params\n   */\n  const setColor = (icon, params) => {\n    if (!params.iconColor) {\n      return;\n    }\n    icon.style.color = params.iconColor;\n    icon.style.borderColor = params.iconColor;\n    for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) {\n      setStyle(icon, sel, 'backgroundColor', params.iconColor);\n    }\n    setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor);\n  };\n\n  /**\n   * @param {string} content\n   * @returns {string}\n   */\n  const iconContent = content => `<div class=\"${swalClasses['icon-content']}\">${content}</div>`;\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderImage = (instance, params) => {\n    const image = getImage();\n    if (!image) {\n      return;\n    }\n    if (!params.imageUrl) {\n      hide(image);\n      return;\n    }\n    show(image, '');\n\n    // Src, alt\n    image.setAttribute('src', params.imageUrl);\n    image.setAttribute('alt', params.imageAlt || '');\n\n    // Width, height\n    applyNumericalStyle(image, 'width', params.imageWidth);\n    applyNumericalStyle(image, 'height', params.imageHeight);\n\n    // Class\n    image.className = swalClasses.image;\n    applyCustomClass(image, params, 'image');\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderPopup = (instance, params) => {\n    const container = getContainer();\n    const popup = getPopup();\n    if (!container || !popup) {\n      return;\n    }\n\n    // Width\n    // https://github.com/sweetalert2/sweetalert2/issues/2170\n    if (params.toast) {\n      applyNumericalStyle(container, 'width', params.width);\n      popup.style.width = '100%';\n      const loader = getLoader();\n      loader && popup.insertBefore(loader, getIcon());\n    } else {\n      applyNumericalStyle(popup, 'width', params.width);\n    }\n\n    // Padding\n    applyNumericalStyle(popup, 'padding', params.padding);\n\n    // Color\n    if (params.color) {\n      popup.style.color = params.color;\n    }\n\n    // Background\n    if (params.background) {\n      popup.style.background = params.background;\n    }\n    hide(getValidationMessage());\n\n    // Classes\n    addClasses$1(popup, params);\n  };\n\n  /**\n   * @param {HTMLElement} popup\n   * @param {SweetAlertOptions} params\n   */\n  const addClasses$1 = (popup, params) => {\n    const showClass = params.showClass || {};\n    // Default Class + showClass when updating Swal.update({})\n    popup.className = `${swalClasses.popup} ${isVisible$1(popup) ? showClass.popup : ''}`;\n    if (params.toast) {\n      addClass([document.documentElement, document.body], swalClasses['toast-shown']);\n      addClass(popup, swalClasses.toast);\n    } else {\n      addClass(popup, swalClasses.modal);\n    }\n\n    // Custom class\n    applyCustomClass(popup, params, 'popup');\n    if (typeof params.customClass === 'string') {\n      addClass(popup, params.customClass);\n    }\n\n    // Icon class (#1842)\n    if (params.icon) {\n      addClass(popup, swalClasses[`icon-${params.icon}`]);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderProgressSteps = (instance, params) => {\n    const progressStepsContainer = getProgressSteps();\n    if (!progressStepsContainer) {\n      return;\n    }\n    const {\n      progressSteps,\n      currentProgressStep\n    } = params;\n    if (!progressSteps || progressSteps.length === 0 || currentProgressStep === undefined) {\n      hide(progressStepsContainer);\n      return;\n    }\n    show(progressStepsContainer);\n    progressStepsContainer.textContent = '';\n    if (currentProgressStep >= progressSteps.length) {\n      warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');\n    }\n    progressSteps.forEach((step, index) => {\n      const stepEl = createStepElement(step);\n      progressStepsContainer.appendChild(stepEl);\n      if (index === currentProgressStep) {\n        addClass(stepEl, swalClasses['active-progress-step']);\n      }\n      if (index !== progressSteps.length - 1) {\n        const lineEl = createLineElement(params);\n        progressStepsContainer.appendChild(lineEl);\n      }\n    });\n  };\n\n  /**\n   * @param {string} step\n   * @returns {HTMLLIElement}\n   */\n  const createStepElement = step => {\n    const stepEl = document.createElement('li');\n    addClass(stepEl, swalClasses['progress-step']);\n    setInnerHtml(stepEl, step);\n    return stepEl;\n  };\n\n  /**\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLLIElement}\n   */\n  const createLineElement = params => {\n    const lineEl = document.createElement('li');\n    addClass(lineEl, swalClasses['progress-step-line']);\n    if (params.progressStepsDistance) {\n      applyNumericalStyle(lineEl, 'width', params.progressStepsDistance);\n    }\n    return lineEl;\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderTitle = (instance, params) => {\n    const title = getTitle();\n    if (!title) {\n      return;\n    }\n    toggle(title, params.title || params.titleText, 'block');\n    if (params.title) {\n      parseHtmlToContainer(params.title, title);\n    }\n    if (params.titleText) {\n      title.innerText = params.titleText;\n    }\n\n    // Custom class\n    applyCustomClass(title, params, 'title');\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const render = (instance, params) => {\n    renderPopup(instance, params);\n    renderContainer(instance, params);\n    renderProgressSteps(instance, params);\n    renderIcon(instance, params);\n    renderImage(instance, params);\n    renderTitle(instance, params);\n    renderCloseButton(instance, params);\n    renderContent(instance, params);\n    renderActions(instance, params);\n    renderFooter(instance, params);\n    const popup = getPopup();\n    if (typeof params.didRender === 'function' && popup) {\n      params.didRender(popup);\n    }\n  };\n\n  /*\n   * Global function to determine if SweetAlert2 popup is shown\n   */\n  const isVisible = () => {\n    return isVisible$1(getPopup());\n  };\n\n  /*\n   * Global function to click 'Confirm' button\n   */\n  const clickConfirm = () => getConfirmButton() && getConfirmButton().click();\n\n  /*\n   * Global function to click 'Deny' button\n   */\n  const clickDeny = () => getDenyButton() && getDenyButton().click();\n\n  /*\n   * Global function to click 'Cancel' button\n   */\n  const clickCancel = () => getCancelButton() && getCancelButton().click();\n\n  /** @typedef {'cancel' | 'backdrop' | 'close' | 'esc' | 'timer'} DismissReason */\n\n  /** @type {Record<DismissReason, DismissReason>} */\n  const DismissReason = Object.freeze({\n    cancel: 'cancel',\n    backdrop: 'backdrop',\n    close: 'close',\n    esc: 'esc',\n    timer: 'timer'\n  });\n\n  /**\n   * @param {GlobalState} globalState\n   */\n  const removeKeydownHandler = globalState => {\n    if (globalState.keydownTarget && globalState.keydownHandlerAdded) {\n      globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, {\n        capture: globalState.keydownListenerCapture\n      });\n      globalState.keydownHandlerAdded = false;\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {GlobalState} globalState\n   * @param {SweetAlertOptions} innerParams\n   * @param {*} dismissWith\n   */\n  const addKeydownHandler = (instance, globalState, innerParams, dismissWith) => {\n    removeKeydownHandler(globalState);\n    if (!innerParams.toast) {\n      globalState.keydownHandler = e => keydownHandler(instance, e, dismissWith);\n      globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup();\n      globalState.keydownListenerCapture = innerParams.keydownListenerCapture;\n      globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, {\n        capture: globalState.keydownListenerCapture\n      });\n      globalState.keydownHandlerAdded = true;\n    }\n  };\n\n  /**\n   * @param {number} index\n   * @param {number} increment\n   */\n  const setFocus = (index, increment) => {\n    const focusableElements = getFocusableElements();\n    // search for visible elements and select the next possible match\n    if (focusableElements.length) {\n      index = index + increment;\n\n      // rollover to first item\n      if (index === focusableElements.length) {\n        index = 0;\n\n        // go to last item\n      } else if (index === -1) {\n        index = focusableElements.length - 1;\n      }\n      focusableElements[index].focus();\n      return;\n    }\n    // no visible focusable elements, focus the popup\n    getPopup().focus();\n  };\n  const arrowKeysNextButton = ['ArrowRight', 'ArrowDown'];\n  const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp'];\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {KeyboardEvent} event\n   * @param {Function} dismissWith\n   */\n  const keydownHandler = (instance, event, dismissWith) => {\n    const innerParams = privateProps.innerParams.get(instance);\n    if (!innerParams) {\n      return; // This instance has already been destroyed\n    }\n\n    // Ignore keydown during IME composition\n    // https://developer.mozilla.org/en-US/docs/Web/API/Document/keydown_event#ignoring_keydown_during_ime_composition\n    // https://github.com/sweetalert2/sweetalert2/issues/720\n    // https://github.com/sweetalert2/sweetalert2/issues/2406\n    if (event.isComposing || event.keyCode === 229) {\n      return;\n    }\n    if (innerParams.stopKeydownPropagation) {\n      event.stopPropagation();\n    }\n\n    // ENTER\n    if (event.key === 'Enter') {\n      handleEnter(instance, event, innerParams);\n    }\n\n    // TAB\n    else if (event.key === 'Tab') {\n      handleTab(event);\n    }\n\n    // ARROWS - switch focus between buttons\n    else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(event.key)) {\n      handleArrows(event.key);\n    }\n\n    // ESC\n    else if (event.key === 'Escape') {\n      handleEsc(event, innerParams, dismissWith);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {KeyboardEvent} event\n   * @param {SweetAlertOptions} innerParams\n   */\n  const handleEnter = (instance, event, innerParams) => {\n    // https://github.com/sweetalert2/sweetalert2/issues/2386\n    if (!callIfFunction(innerParams.allowEnterKey)) {\n      return;\n    }\n    if (event.target && instance.getInput() && event.target instanceof HTMLElement && event.target.outerHTML === instance.getInput().outerHTML) {\n      if (['textarea', 'file'].includes(innerParams.input)) {\n        return; // do not submit\n      }\n\n      clickConfirm();\n      event.preventDefault();\n    }\n  };\n\n  /**\n   * @param {KeyboardEvent} event\n   */\n  const handleTab = event => {\n    const targetElement = event.target;\n    const focusableElements = getFocusableElements();\n    let btnIndex = -1;\n    for (let i = 0; i < focusableElements.length; i++) {\n      if (targetElement === focusableElements[i]) {\n        btnIndex = i;\n        break;\n      }\n    }\n\n    // Cycle to the next button\n    if (!event.shiftKey) {\n      setFocus(btnIndex, 1);\n    }\n\n    // Cycle to the prev button\n    else {\n      setFocus(btnIndex, -1);\n    }\n    event.stopPropagation();\n    event.preventDefault();\n  };\n\n  /**\n   * @param {string} key\n   */\n  const handleArrows = key => {\n    const confirmButton = getConfirmButton();\n    const denyButton = getDenyButton();\n    const cancelButton = getCancelButton();\n    /** @type HTMLElement[] */\n    const buttons = [confirmButton, denyButton, cancelButton];\n    if (document.activeElement instanceof HTMLElement && !buttons.includes(document.activeElement)) {\n      return;\n    }\n    const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling';\n    let buttonToFocus = document.activeElement;\n    for (let i = 0; i < getActions().children.length; i++) {\n      buttonToFocus = buttonToFocus[sibling];\n      if (!buttonToFocus) {\n        return;\n      }\n      if (buttonToFocus instanceof HTMLButtonElement && isVisible$1(buttonToFocus)) {\n        break;\n      }\n    }\n    if (buttonToFocus instanceof HTMLButtonElement) {\n      buttonToFocus.focus();\n    }\n  };\n\n  /**\n   * @param {KeyboardEvent} event\n   * @param {SweetAlertOptions} innerParams\n   * @param {Function} dismissWith\n   */\n  const handleEsc = (event, innerParams, dismissWith) => {\n    if (callIfFunction(innerParams.allowEscapeKey)) {\n      event.preventDefault();\n      dismissWith(DismissReason.esc);\n    }\n  };\n\n  /**\n   * This module contains `WeakMap`s for each effectively-\"private  property\" that a `Swal` has.\n   * For example, to set the private property \"foo\" of `this` to \"bar\", you can `privateProps.foo.set(this, 'bar')`\n   * This is the approach that Babel will probably take to implement private methods/fields\n   *   https://github.com/tc39/proposal-private-methods\n   *   https://github.com/babel/babel/pull/7555\n   * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*\n   *   then we can use that language feature.\n   */\n\n  var privateMethods = {\n    swalPromiseResolve: new WeakMap(),\n    swalPromiseReject: new WeakMap()\n  };\n\n  // From https://developer.paciellogroup.com/blog/2018/06/the-current-state-of-modal-dialog-accessibility/\n  // Adding aria-hidden=\"true\" to elements outside of the active modal dialog ensures that\n  // elements not within the active modal dialog will not be surfaced if a user opens a screen\n  // reader\u2019s list of elements (headings, form controls, landmarks, etc.) in the document.\n\n  const setAriaHidden = () => {\n    const bodyChildren = Array.from(document.body.children);\n    bodyChildren.forEach(el => {\n      if (el === getContainer() || el.contains(getContainer())) {\n        return;\n      }\n      if (el.hasAttribute('aria-hidden')) {\n        el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden') || '');\n      }\n      el.setAttribute('aria-hidden', 'true');\n    });\n  };\n  const unsetAriaHidden = () => {\n    const bodyChildren = Array.from(document.body.children);\n    bodyChildren.forEach(el => {\n      if (el.hasAttribute('data-previous-aria-hidden')) {\n        el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden') || '');\n        el.removeAttribute('data-previous-aria-hidden');\n      } else {\n        el.removeAttribute('aria-hidden');\n      }\n    });\n  };\n\n  /* istanbul ignore file */\n\n  // Fix iOS scrolling http://stackoverflow.com/q/39626302\n\n  const iOSfix = () => {\n    const iOS =\n    // @ts-ignore\n    /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;\n    if (iOS && !hasClass(document.body, swalClasses.iosfix)) {\n      const offset = document.body.scrollTop;\n      document.body.style.top = `${offset * -1}px`;\n      addClass(document.body, swalClasses.iosfix);\n      lockBodyScroll();\n      addBottomPaddingForTallPopups();\n    }\n  };\n\n  /**\n   * https://github.com/sweetalert2/sweetalert2/issues/1948\n   */\n  const addBottomPaddingForTallPopups = () => {\n    const ua = navigator.userAgent;\n    const iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i);\n    const webkit = !!ua.match(/WebKit/i);\n    const iOSSafari = iOS && webkit && !ua.match(/CriOS/i);\n    if (iOSSafari) {\n      const bottomPanelHeight = 44;\n      if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) {\n        getContainer().style.paddingBottom = `${bottomPanelHeight}px`;\n      }\n    }\n  };\n\n  /**\n   * https://github.com/sweetalert2/sweetalert2/issues/1246\n   */\n  const lockBodyScroll = () => {\n    const container = getContainer();\n    let preventTouchMove;\n    /**\n     * @param {TouchEvent} event\n     */\n    container.ontouchstart = event => {\n      preventTouchMove = shouldPreventTouchMove(event);\n    };\n    /**\n     * @param {TouchEvent} event\n     */\n    container.ontouchmove = event => {\n      if (preventTouchMove) {\n        event.preventDefault();\n        event.stopPropagation();\n      }\n    };\n  };\n\n  /**\n   * @param {TouchEvent} event\n   * @returns {boolean}\n   */\n  const shouldPreventTouchMove = event => {\n    const target = event.target;\n    const container = getContainer();\n    if (isStylus(event) || isZoom(event)) {\n      return false;\n    }\n    if (target === container) {\n      return true;\n    }\n    if (!isScrollable(container) && target instanceof HTMLElement && target.tagName !== 'INPUT' &&\n    // #1603\n    target.tagName !== 'TEXTAREA' &&\n    // #2266\n    !(isScrollable(getHtmlContainer()) &&\n    // #1944\n    getHtmlContainer().contains(target))) {\n      return true;\n    }\n    return false;\n  };\n\n  /**\n   * https://github.com/sweetalert2/sweetalert2/issues/1786\n   *\n   * @param {*} event\n   * @returns {boolean}\n   */\n  const isStylus = event => {\n    return event.touches && event.touches.length && event.touches[0].touchType === 'stylus';\n  };\n\n  /**\n   * https://github.com/sweetalert2/sweetalert2/issues/1891\n   *\n   * @param {TouchEvent} event\n   * @returns {boolean}\n   */\n  const isZoom = event => {\n    return event.touches && event.touches.length > 1;\n  };\n  const undoIOSfix = () => {\n    if (hasClass(document.body, swalClasses.iosfix)) {\n      const offset = parseInt(document.body.style.top, 10);\n      removeClass(document.body, swalClasses.iosfix);\n      document.body.style.top = '';\n      document.body.scrollTop = offset * -1;\n    }\n  };\n\n  /**\n   * Measure scrollbar width for padding body during modal show/hide\n   * https://github.com/twbs/bootstrap/blob/master/js/src/modal.js\n   *\n   * @returns {number}\n   */\n  const measureScrollbar = () => {\n    const scrollDiv = document.createElement('div');\n    scrollDiv.className = swalClasses['scrollbar-measure'];\n    document.body.appendChild(scrollDiv);\n    const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n    document.body.removeChild(scrollDiv);\n    return scrollbarWidth;\n  };\n\n  /**\n   * Remember state in cases where opening and handling a modal will fiddle with it.\n   * @type {number | null}\n   */\n  let previousBodyPadding = null;\n  const fixScrollbar = () => {\n    // for queues, do not do this more than once\n    if (previousBodyPadding !== null) {\n      return;\n    }\n    // if the body has overflow\n    if (document.body.scrollHeight > window.innerHeight) {\n      // add padding so the content doesn't shift after removal of scrollbar\n      previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'));\n      document.body.style.paddingRight = `${previousBodyPadding + measureScrollbar()}px`;\n    }\n  };\n  const undoScrollbar = () => {\n    if (previousBodyPadding !== null) {\n      document.body.style.paddingRight = `${previousBodyPadding}px`;\n      previousBodyPadding = null;\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {HTMLElement} container\n   * @param {boolean} returnFocus\n   * @param {Function} didClose\n   */\n  function removePopupAndResetState(instance, container, returnFocus, didClose) {\n    if (isToast()) {\n      triggerDidCloseAndDispose(instance, didClose);\n    } else {\n      restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose));\n      removeKeydownHandler(globalState);\n    }\n    const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n    // workaround for #2088\n    // for some reason removing the container in Safari will scroll the document to bottom\n    if (isSafari) {\n      container.setAttribute('style', 'display:none !important');\n      container.removeAttribute('class');\n      container.innerHTML = '';\n    } else {\n      container.remove();\n    }\n    if (isModal()) {\n      undoScrollbar();\n      undoIOSfix();\n      unsetAriaHidden();\n    }\n    removeBodyClasses();\n  }\n\n  /**\n   * Remove SweetAlert2 classes from body\n   */\n  function removeBodyClasses() {\n    removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]);\n  }\n\n  /**\n   * Instance method to close sweetAlert\n   *\n   * @param {any} resolveValue\n   */\n  function close(resolveValue) {\n    resolveValue = prepareResolveValue(resolveValue);\n    const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this);\n    const didClose = triggerClosePopup(this);\n    if (this.isAwaitingPromise) {\n      // A swal awaiting for a promise (after a click on Confirm or Deny) cannot be dismissed anymore #2335\n      if (!resolveValue.isDismissed) {\n        handleAwaitingPromise(this);\n        swalPromiseResolve(resolveValue);\n      }\n    } else if (didClose) {\n      // Resolve Swal promise\n      swalPromiseResolve(resolveValue);\n    }\n  }\n  const triggerClosePopup = instance => {\n    const popup = getPopup();\n    if (!popup) {\n      return false;\n    }\n    const innerParams = privateProps.innerParams.get(instance);\n    if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) {\n      return false;\n    }\n    removeClass(popup, innerParams.showClass.popup);\n    addClass(popup, innerParams.hideClass.popup);\n    const backdrop = getContainer();\n    removeClass(backdrop, innerParams.showClass.backdrop);\n    addClass(backdrop, innerParams.hideClass.backdrop);\n    handlePopupAnimation(instance, popup, innerParams);\n    return true;\n  };\n\n  /**\n   * @param {any} error\n   */\n  function rejectPromise(error) {\n    const rejectPromise = privateMethods.swalPromiseReject.get(this);\n    handleAwaitingPromise(this);\n    if (rejectPromise) {\n      // Reject Swal promise\n      rejectPromise(error);\n    }\n  }\n\n  /**\n   * @param {SweetAlert} instance\n   */\n  const handleAwaitingPromise = instance => {\n    if (instance.isAwaitingPromise) {\n      delete instance.isAwaitingPromise;\n      // The instance might have been previously partly destroyed, we must resume the destroy process in this case #2335\n      if (!privateProps.innerParams.get(instance)) {\n        instance._destroy();\n      }\n    }\n  };\n\n  /**\n   * @param {any} resolveValue\n   * @returns {SweetAlertResult}\n   */\n  const prepareResolveValue = resolveValue => {\n    // When user calls Swal.close()\n    if (typeof resolveValue === 'undefined') {\n      return {\n        isConfirmed: false,\n        isDenied: false,\n        isDismissed: true\n      };\n    }\n    return Object.assign({\n      isConfirmed: false,\n      isDenied: false,\n      isDismissed: false\n    }, resolveValue);\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {HTMLElement} popup\n   * @param {SweetAlertOptions} innerParams\n   */\n  const handlePopupAnimation = (instance, popup, innerParams) => {\n    const container = getContainer();\n    // If animation is supported, animate\n    const animationIsSupported = animationEndEvent && hasCssAnimation(popup);\n    if (typeof innerParams.willClose === 'function') {\n      innerParams.willClose(popup);\n    }\n    if (animationIsSupported) {\n      animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose);\n    } else {\n      // Otherwise, remove immediately\n      removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {HTMLElement} popup\n   * @param {HTMLElement} container\n   * @param {boolean} returnFocus\n   * @param {Function} didClose\n   */\n  const animatePopup = (instance, popup, container, returnFocus, didClose) => {\n    globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose);\n    popup.addEventListener(animationEndEvent, function (e) {\n      if (e.target === popup) {\n        globalState.swalCloseEventFinishedCallback();\n        delete globalState.swalCloseEventFinishedCallback;\n      }\n    });\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {Function} didClose\n   */\n  const triggerDidCloseAndDispose = (instance, didClose) => {\n    setTimeout(() => {\n      if (typeof didClose === 'function') {\n        didClose.bind(instance.params)();\n      }\n      // instance might have been destroyed already\n      if (instance._destroy) {\n        instance._destroy();\n      }\n    });\n  };\n\n  /**\n   * Shows loader (spinner), this is useful with AJAX requests.\n   * By default the loader be shown instead of the \"Confirm\" button.\n   *\n   * @param {HTMLButtonElement} [buttonToReplace]\n   */\n  const showLoading = buttonToReplace => {\n    let popup = getPopup();\n    if (!popup) {\n      new Swal(); // eslint-disable-line no-new\n    }\n\n    popup = getPopup();\n    const loader = getLoader();\n    if (isToast()) {\n      hide(getIcon());\n    } else {\n      replaceButton(popup, buttonToReplace);\n    }\n    show(loader);\n    popup.setAttribute('data-loading', 'true');\n    popup.setAttribute('aria-busy', 'true');\n    popup.focus();\n  };\n\n  /**\n   * @param {HTMLElement} popup\n   * @param {HTMLButtonElement} [buttonToReplace]\n   */\n  const replaceButton = (popup, buttonToReplace) => {\n    const actions = getActions();\n    const loader = getLoader();\n    if (!buttonToReplace && isVisible$1(getConfirmButton())) {\n      buttonToReplace = getConfirmButton();\n    }\n    show(actions);\n    if (buttonToReplace) {\n      hide(buttonToReplace);\n      loader.setAttribute('data-button-to-replace', buttonToReplace.className);\n    }\n    loader.parentNode.insertBefore(loader, buttonToReplace);\n    addClass([popup, actions], swalClasses.loading);\n  };\n\n  /**\n   * @typedef { string | number | boolean } InputValue\n   */\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const handleInputOptionsAndValue = (instance, params) => {\n    if (params.input === 'select' || params.input === 'radio') {\n      handleInputOptions(instance, params);\n    } else if (['text', 'email', 'number', 'tel', 'textarea'].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) {\n      showLoading(getConfirmButton());\n      handleInputValue(instance, params);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} innerParams\n   * @returns {string | number | File | FileList | null}\n   */\n  const getInputValue = (instance, innerParams) => {\n    const input = instance.getInput();\n    if (!input) {\n      return null;\n    }\n    switch (innerParams.input) {\n      case 'checkbox':\n        return getCheckboxValue(input);\n      case 'radio':\n        return getRadioValue(input);\n      case 'file':\n        return getFileValue(input);\n      default:\n        return innerParams.inputAutoTrim ? input.value.trim() : input.value;\n    }\n  };\n\n  /**\n   * @param {HTMLInputElement} input\n   * @returns {number}\n   */\n  const getCheckboxValue = input => input.checked ? 1 : 0;\n\n  /**\n   * @param {HTMLInputElement} input\n   * @returns {string | null}\n   */\n  const getRadioValue = input => input.checked ? input.value : null;\n\n  /**\n   * @param {HTMLInputElement} input\n   * @returns {FileList | File | null}\n   */\n  const getFileValue = input => input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null;\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const handleInputOptions = (instance, params) => {\n    const popup = getPopup();\n    /**\n     * @param {Record<string, any>} inputOptions\n     */\n    const processInputOptions = inputOptions => {\n      populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params);\n    };\n    if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) {\n      showLoading(getConfirmButton());\n      asPromise(params.inputOptions).then(inputOptions => {\n        instance.hideLoading();\n        processInputOptions(inputOptions);\n      });\n    } else if (typeof params.inputOptions === 'object') {\n      processInputOptions(params.inputOptions);\n    } else {\n      error(`Unexpected type of inputOptions! Expected object, Map or Promise, got ${typeof params.inputOptions}`);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const handleInputValue = (instance, params) => {\n    const input = instance.getInput();\n    hide(input);\n    asPromise(params.inputValue).then(inputValue => {\n      input.value = params.input === 'number' ? `${parseFloat(inputValue) || 0}` : `${inputValue}`;\n      show(input);\n      input.focus();\n      instance.hideLoading();\n    }).catch(err => {\n      error(`Error in inputValue promise: ${err}`);\n      input.value = '';\n      show(input);\n      input.focus();\n      instance.hideLoading();\n    });\n  };\n  const populateInputOptions = {\n    /**\n     * @param {HTMLElement} popup\n     * @param {Record<string, any>} inputOptions\n     * @param {SweetAlertOptions} params\n     */\n    select: (popup, inputOptions, params) => {\n      const select = getDirectChildByClass(popup, swalClasses.select);\n      /**\n       * @param {HTMLElement} parent\n       * @param {string} optionLabel\n       * @param {string} optionValue\n       */\n      const renderOption = (parent, optionLabel, optionValue) => {\n        const option = document.createElement('option');\n        option.value = optionValue;\n        setInnerHtml(option, optionLabel);\n        option.selected = isSelected(optionValue, params.inputValue);\n        parent.appendChild(option);\n      };\n      inputOptions.forEach(inputOption => {\n        const optionValue = inputOption[0];\n        const optionLabel = inputOption[1];\n        // <optgroup> spec:\n        // https://www.w3.org/TR/html401/interact/forms.html#h-17.6\n        // \"...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)...\"\n        // check whether this is a <optgroup>\n        if (Array.isArray(optionLabel)) {\n          // if it is an array, then it is an <optgroup>\n          const optgroup = document.createElement('optgroup');\n          optgroup.label = optionValue;\n          optgroup.disabled = false; // not configurable for now\n          select.appendChild(optgroup);\n          optionLabel.forEach(o => renderOption(optgroup, o[1], o[0]));\n        } else {\n          // case of <option>\n          renderOption(select, optionLabel, optionValue);\n        }\n      });\n      select.focus();\n    },\n    /**\n     * @param {HTMLElement} popup\n     * @param {Record<string, any>} inputOptions\n     * @param {SweetAlertOptions} params\n     */\n    radio: (popup, inputOptions, params) => {\n      const radio = getDirectChildByClass(popup, swalClasses.radio);\n      inputOptions.forEach(inputOption => {\n        const radioValue = inputOption[0];\n        const radioLabel = inputOption[1];\n        const radioInput = document.createElement('input');\n        const radioLabelElement = document.createElement('label');\n        radioInput.type = 'radio';\n        radioInput.name = swalClasses.radio;\n        radioInput.value = radioValue;\n        if (isSelected(radioValue, params.inputValue)) {\n          radioInput.checked = true;\n        }\n        const label = document.createElement('span');\n        setInnerHtml(label, radioLabel);\n        label.className = swalClasses.label;\n        radioLabelElement.appendChild(radioInput);\n        radioLabelElement.appendChild(label);\n        radio.appendChild(radioLabelElement);\n      });\n      const radios = radio.querySelectorAll('input');\n      if (radios.length) {\n        radios[0].focus();\n      }\n    }\n  };\n\n  /**\n   * Converts `inputOptions` into an array of `[value, label]`s\n   *\n   * @param {Record<string, any>} inputOptions\n   * @returns {Array<Array<string>>}\n   */\n  const formatInputOptions = inputOptions => {\n    const result = [];\n    if (typeof Map !== 'undefined' && inputOptions instanceof Map) {\n      inputOptions.forEach((value, key) => {\n        let valueFormatted = value;\n        if (typeof valueFormatted === 'object') {\n          // case of <optgroup>\n          valueFormatted = formatInputOptions(valueFormatted);\n        }\n        result.push([key, valueFormatted]);\n      });\n    } else {\n      Object.keys(inputOptions).forEach(key => {\n        let valueFormatted = inputOptions[key];\n        if (typeof valueFormatted === 'object') {\n          // case of <optgroup>\n          valueFormatted = formatInputOptions(valueFormatted);\n        }\n        result.push([key, valueFormatted]);\n      });\n    }\n    return result;\n  };\n\n  /**\n   * @param {string} optionValue\n   * @param {InputValue | Promise<InputValue> | { toPromise: () => InputValue }} inputValue\n   * @returns {boolean}\n   */\n  const isSelected = (optionValue, inputValue) => {\n    return inputValue && inputValue.toString() === optionValue.toString();\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   */\n  const handleConfirmButtonClick = instance => {\n    const innerParams = privateProps.innerParams.get(instance);\n    instance.disableButtons();\n    if (innerParams.input) {\n      handleConfirmOrDenyWithInput(instance, 'confirm');\n    } else {\n      confirm(instance, true);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   */\n  const handleDenyButtonClick = instance => {\n    const innerParams = privateProps.innerParams.get(instance);\n    instance.disableButtons();\n    if (innerParams.returnInputValueOnDeny) {\n      handleConfirmOrDenyWithInput(instance, 'deny');\n    } else {\n      deny(instance, false);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {Function} dismissWith\n   */\n  const handleCancelButtonClick = (instance, dismissWith) => {\n    instance.disableButtons();\n    dismissWith(DismissReason.cancel);\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {'confirm' | 'deny'} type\n   */\n  const handleConfirmOrDenyWithInput = (instance, type) => {\n    const innerParams = privateProps.innerParams.get(instance);\n    if (!innerParams.input) {\n      error(`The \"input\" parameter is needed to be set when using returnInputValueOn${capitalizeFirstLetter(type)}`);\n      return;\n    }\n    const inputValue = getInputValue(instance, innerParams);\n    if (innerParams.inputValidator) {\n      handleInputValidator(instance, inputValue, type);\n    } else if (!instance.getInput().checkValidity()) {\n      instance.enableButtons();\n      instance.showValidationMessage(innerParams.validationMessage);\n    } else if (type === 'deny') {\n      deny(instance, inputValue);\n    } else {\n      confirm(instance, inputValue);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {string | number | File | FileList | null} inputValue\n   * @param {'confirm' | 'deny'} type\n   */\n  const handleInputValidator = (instance, inputValue, type) => {\n    const innerParams = privateProps.innerParams.get(instance);\n    instance.disableInput();\n    const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage)));\n    validationPromise.then(validationMessage => {\n      instance.enableButtons();\n      instance.enableInput();\n      if (validationMessage) {\n        instance.showValidationMessage(validationMessage);\n      } else if (type === 'deny') {\n        deny(instance, inputValue);\n      } else {\n        confirm(instance, inputValue);\n      }\n    });\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {any} value\n   */\n  const deny = (instance, value) => {\n    const innerParams = privateProps.innerParams.get(instance || undefined);\n    if (innerParams.showLoaderOnDeny) {\n      showLoading(getDenyButton());\n    }\n    if (innerParams.preDeny) {\n      instance.isAwaitingPromise = true; // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preDeny's promise is received\n      const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage)));\n      preDenyPromise.then(preDenyValue => {\n        if (preDenyValue === false) {\n          instance.hideLoading();\n          handleAwaitingPromise(instance);\n        } else {\n          instance.close({\n            isDenied: true,\n            value: typeof preDenyValue === 'undefined' ? value : preDenyValue\n          });\n        }\n      }).catch(error => rejectWith(instance || undefined, error));\n    } else {\n      instance.close({\n        isDenied: true,\n        value\n      });\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {any} value\n   */\n  const succeedWith = (instance, value) => {\n    instance.close({\n      isConfirmed: true,\n      value\n    });\n  };\n\n  /**\n   *\n   * @param {SweetAlert} instance\n   * @param {string} error\n   */\n  const rejectWith = (instance, error) => {\n    instance.rejectPromise(error);\n  };\n\n  /**\n   *\n   * @param {SweetAlert} instance\n   * @param {any} value\n   */\n  const confirm = (instance, value) => {\n    const innerParams = privateProps.innerParams.get(instance || undefined);\n    if (innerParams.showLoaderOnConfirm) {\n      showLoading();\n    }\n    if (innerParams.preConfirm) {\n      instance.resetValidationMessage();\n      instance.isAwaitingPromise = true; // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preConfirm's promise is received\n      const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage)));\n      preConfirmPromise.then(preConfirmValue => {\n        if (isVisible$1(getValidationMessage()) || preConfirmValue === false) {\n          instance.hideLoading();\n          handleAwaitingPromise(instance);\n        } else {\n          succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue);\n        }\n      }).catch(error => rejectWith(instance || undefined, error));\n    } else {\n      succeedWith(instance, value);\n    }\n  };\n\n  /**\n   * Hides loader and shows back the button which was hidden by .showLoading()\n   */\n  function hideLoading() {\n    // do nothing if popup is closed\n    const innerParams = privateProps.innerParams.get(this);\n    if (!innerParams) {\n      return;\n    }\n    const domCache = privateProps.domCache.get(this);\n    hide(domCache.loader);\n    if (isToast()) {\n      if (innerParams.icon) {\n        show(getIcon());\n      }\n    } else {\n      showRelatedButton(domCache);\n    }\n    removeClass([domCache.popup, domCache.actions], swalClasses.loading);\n    domCache.popup.removeAttribute('aria-busy');\n    domCache.popup.removeAttribute('data-loading');\n    domCache.confirmButton.disabled = false;\n    domCache.denyButton.disabled = false;\n    domCache.cancelButton.disabled = false;\n  }\n  const showRelatedButton = domCache => {\n    const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace'));\n    if (buttonToReplace.length) {\n      show(buttonToReplace[0], 'inline-block');\n    } else if (allButtonsAreHidden()) {\n      hide(domCache.actions);\n    }\n  };\n\n  /**\n   * Gets the input DOM node, this method works with input parameter.\n   *\n   * @returns {HTMLInputElement | null}\n   */\n  function getInput() {\n    const innerParams = privateProps.innerParams.get(this);\n    const domCache = privateProps.domCache.get(this);\n    if (!domCache) {\n      return null;\n    }\n    return getInput$1(domCache.popup, innerParams.input);\n  }\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {string[]} buttons\n   * @param {boolean} disabled\n   */\n  function setButtonsDisabled(instance, buttons, disabled) {\n    const domCache = privateProps.domCache.get(instance);\n    buttons.forEach(button => {\n      domCache[button].disabled = disabled;\n    });\n  }\n\n  /**\n   * @param {HTMLInputElement} input\n   * @param {boolean} disabled\n   */\n  function setInputDisabled(input, disabled) {\n    if (!input) {\n      return;\n    }\n    if (input.type === 'radio') {\n      const radiosContainer = input.parentNode.parentNode;\n      const radios = radiosContainer.querySelectorAll('input');\n      for (let i = 0; i < radios.length; i++) {\n        radios[i].disabled = disabled;\n      }\n    } else {\n      input.disabled = disabled;\n    }\n  }\n\n  /**\n   * Enable all the buttons\n   */\n  function enableButtons() {\n    setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false);\n  }\n\n  /**\n   * Disable all the buttons\n   */\n  function disableButtons() {\n    setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true);\n  }\n\n  /**\n   * Enable the input field\n   */\n  function enableInput() {\n    setInputDisabled(this.getInput(), false);\n  }\n\n  /**\n   * Disable the input field\n   */\n  function disableInput() {\n    setInputDisabled(this.getInput(), true);\n  }\n\n  /**\n   * Show block with validation message\n   *\n   * @param {string} error\n   */\n  function showValidationMessage(error) {\n    const domCache = privateProps.domCache.get(this);\n    const params = privateProps.innerParams.get(this);\n    setInnerHtml(domCache.validationMessage, error);\n    domCache.validationMessage.className = swalClasses['validation-message'];\n    if (params.customClass && params.customClass.validationMessage) {\n      addClass(domCache.validationMessage, params.customClass.validationMessage);\n    }\n    show(domCache.validationMessage);\n    const input = this.getInput();\n    if (input) {\n      input.setAttribute('aria-invalid', true);\n      input.setAttribute('aria-describedby', swalClasses['validation-message']);\n      focusInput(input);\n      addClass(input, swalClasses.inputerror);\n    }\n  }\n\n  /**\n   * Hide block with validation message\n   */\n  function resetValidationMessage() {\n    const domCache = privateProps.domCache.get(this);\n    if (domCache.validationMessage) {\n      hide(domCache.validationMessage);\n    }\n    const input = this.getInput();\n    if (input) {\n      input.removeAttribute('aria-invalid');\n      input.removeAttribute('aria-describedby');\n      removeClass(input, swalClasses.inputerror);\n    }\n  }\n\n  const defaultParams = {\n    title: '',\n    titleText: '',\n    text: '',\n    html: '',\n    footer: '',\n    icon: undefined,\n    iconColor: undefined,\n    iconHtml: undefined,\n    template: undefined,\n    toast: false,\n    showClass: {\n      popup: 'swal2-show',\n      backdrop: 'swal2-backdrop-show',\n      icon: 'swal2-icon-show'\n    },\n    hideClass: {\n      popup: 'swal2-hide',\n      backdrop: 'swal2-backdrop-hide',\n      icon: 'swal2-icon-hide'\n    },\n    customClass: {},\n    target: 'body',\n    color: undefined,\n    backdrop: true,\n    heightAuto: true,\n    allowOutsideClick: true,\n    allowEscapeKey: true,\n    allowEnterKey: true,\n    stopKeydownPropagation: true,\n    keydownListenerCapture: false,\n    showConfirmButton: true,\n    showDenyButton: false,\n    showCancelButton: false,\n    preConfirm: undefined,\n    preDeny: undefined,\n    confirmButtonText: 'OK',\n    confirmButtonAriaLabel: '',\n    confirmButtonColor: undefined,\n    denyButtonText: 'No',\n    denyButtonAriaLabel: '',\n    denyButtonColor: undefined,\n    cancelButtonText: 'Cancel',\n    cancelButtonAriaLabel: '',\n    cancelButtonColor: undefined,\n    buttonsStyling: true,\n    reverseButtons: false,\n    focusConfirm: true,\n    focusDeny: false,\n    focusCancel: false,\n    returnFocus: true,\n    showCloseButton: false,\n    closeButtonHtml: '&times;',\n    closeButtonAriaLabel: 'Close this dialog',\n    loaderHtml: '',\n    showLoaderOnConfirm: false,\n    showLoaderOnDeny: false,\n    imageUrl: undefined,\n    imageWidth: undefined,\n    imageHeight: undefined,\n    imageAlt: '',\n    timer: undefined,\n    timerProgressBar: false,\n    width: undefined,\n    padding: undefined,\n    background: undefined,\n    input: undefined,\n    inputPlaceholder: '',\n    inputLabel: '',\n    inputValue: '',\n    inputOptions: {},\n    inputAutoFocus: true,\n    inputAutoTrim: true,\n    inputAttributes: {},\n    inputValidator: undefined,\n    returnInputValueOnDeny: false,\n    validationMessage: undefined,\n    grow: false,\n    position: 'center',\n    progressSteps: [],\n    currentProgressStep: undefined,\n    progressStepsDistance: undefined,\n    willOpen: undefined,\n    didOpen: undefined,\n    didRender: undefined,\n    willClose: undefined,\n    didClose: undefined,\n    didDestroy: undefined,\n    scrollbarPadding: true\n  };\n  const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'color', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose'];\n\n  /** @type {Record<string, string>} */\n  const deprecatedParams = {};\n  const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture'];\n\n  /**\n   * Is valid parameter\n   *\n   * @param {string} paramName\n   * @returns {boolean}\n   */\n  const isValidParameter = paramName => {\n    return Object.prototype.hasOwnProperty.call(defaultParams, paramName);\n  };\n\n  /**\n   * Is valid parameter for Swal.update() method\n   *\n   * @param {string} paramName\n   * @returns {boolean}\n   */\n  const isUpdatableParameter = paramName => {\n    return updatableParams.indexOf(paramName) !== -1;\n  };\n\n  /**\n   * Is deprecated parameter\n   *\n   * @param {string} paramName\n   * @returns {string | undefined}\n   */\n  const isDeprecatedParameter = paramName => {\n    return deprecatedParams[paramName];\n  };\n\n  /**\n   * @param {string} param\n   */\n  const checkIfParamIsValid = param => {\n    if (!isValidParameter(param)) {\n      warn(`Unknown parameter \"${param}\"`);\n    }\n  };\n\n  /**\n   * @param {string} param\n   */\n  const checkIfToastParamIsValid = param => {\n    if (toastIncompatibleParams.includes(param)) {\n      warn(`The parameter \"${param}\" is incompatible with toasts`);\n    }\n  };\n\n  /**\n   * @param {string} param\n   */\n  const checkIfParamIsDeprecated = param => {\n    const isDeprecated = isDeprecatedParameter(param);\n    if (isDeprecated) {\n      warnAboutDeprecation(param, isDeprecated);\n    }\n  };\n\n  /**\n   * Show relevant warnings for given params\n   *\n   * @param {SweetAlertOptions} params\n   */\n  const showWarningsForParams = params => {\n    if (params.backdrop === false && params.allowOutsideClick) {\n      warn('\"allowOutsideClick\" parameter requires `backdrop` parameter to be set to `true`');\n    }\n    for (const param in params) {\n      checkIfParamIsValid(param);\n      if (params.toast) {\n        checkIfToastParamIsValid(param);\n      }\n      checkIfParamIsDeprecated(param);\n    }\n  };\n\n  /**\n   * Updates popup parameters.\n   *\n   * @param {SweetAlertOptions} params\n   */\n  function update(params) {\n    const popup = getPopup();\n    const innerParams = privateProps.innerParams.get(this);\n    if (!popup || hasClass(popup, innerParams.hideClass.popup)) {\n      warn(`You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.`);\n      return;\n    }\n    const validUpdatableParams = filterValidParams(params);\n    const updatedParams = Object.assign({}, innerParams, validUpdatableParams);\n    render(this, updatedParams);\n    privateProps.innerParams.set(this, updatedParams);\n    Object.defineProperties(this, {\n      params: {\n        value: Object.assign({}, this.params, params),\n        writable: false,\n        enumerable: true\n      }\n    });\n  }\n\n  /**\n   * @param {SweetAlertOptions} params\n   * @returns {SweetAlertOptions}\n   */\n  const filterValidParams = params => {\n    const validUpdatableParams = {};\n    Object.keys(params).forEach(param => {\n      if (isUpdatableParameter(param)) {\n        validUpdatableParams[param] = params[param];\n      } else {\n        warn(`Invalid parameter to update: ${param}`);\n      }\n    });\n    return validUpdatableParams;\n  };\n\n  /**\n   * Dispose the current SweetAlert2 instance\n   */\n  function _destroy() {\n    const domCache = privateProps.domCache.get(this);\n    const innerParams = privateProps.innerParams.get(this);\n    if (!innerParams) {\n      disposeWeakMaps(this); // The WeakMaps might have been partly destroyed, we must recall it to dispose any remaining WeakMaps #2335\n      return; // This instance has already been destroyed\n    }\n\n    // Check if there is another Swal closing\n    if (domCache.popup && globalState.swalCloseEventFinishedCallback) {\n      globalState.swalCloseEventFinishedCallback();\n      delete globalState.swalCloseEventFinishedCallback;\n    }\n    if (typeof innerParams.didDestroy === 'function') {\n      innerParams.didDestroy();\n    }\n    disposeSwal(this);\n  }\n\n  /**\n   * @param {SweetAlert} instance\n   */\n  const disposeSwal = instance => {\n    disposeWeakMaps(instance);\n    // Unset this.params so GC will dispose it (#1569)\n    delete instance.params;\n    // Unset globalState props so GC will dispose globalState (#1569)\n    delete globalState.keydownHandler;\n    delete globalState.keydownTarget;\n    // Unset currentInstance\n    delete globalState.currentInstance;\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   */\n  const disposeWeakMaps = instance => {\n    // If the current instance is awaiting a promise result, we keep the privateMethods to call them once the promise result is retrieved #2335\n    if (instance.isAwaitingPromise) {\n      unsetWeakMaps(privateProps, instance);\n      instance.isAwaitingPromise = true;\n    } else {\n      unsetWeakMaps(privateMethods, instance);\n      unsetWeakMaps(privateProps, instance);\n      delete instance.isAwaitingPromise;\n      // Unset instance methods\n      delete instance.disableButtons;\n      delete instance.enableButtons;\n      delete instance.getInput;\n      delete instance.disableInput;\n      delete instance.enableInput;\n      delete instance.hideLoading;\n      delete instance.disableLoading;\n      delete instance.showValidationMessage;\n      delete instance.resetValidationMessage;\n      delete instance.close;\n      delete instance.closePopup;\n      delete instance.closeModal;\n      delete instance.closeToast;\n      delete instance.rejectPromise;\n      delete instance.update;\n      delete instance._destroy;\n    }\n  };\n\n  /**\n   * @param {object} obj\n   * @param {SweetAlert} instance\n   */\n  const unsetWeakMaps = (obj, instance) => {\n    for (const i in obj) {\n      obj[i].delete(instance);\n    }\n  };\n\n  var instanceMethods = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    _destroy: _destroy,\n    close: close,\n    closeModal: close,\n    closePopup: close,\n    closeToast: close,\n    disableButtons: disableButtons,\n    disableInput: disableInput,\n    disableLoading: hideLoading,\n    enableButtons: enableButtons,\n    enableInput: enableInput,\n    getInput: getInput,\n    handleAwaitingPromise: handleAwaitingPromise,\n    hideLoading: hideLoading,\n    rejectPromise: rejectPromise,\n    resetValidationMessage: resetValidationMessage,\n    showValidationMessage: showValidationMessage,\n    update: update\n  });\n\n  const handlePopupClick = (instance, domCache, dismissWith) => {\n    const innerParams = privateProps.innerParams.get(instance);\n    if (innerParams.toast) {\n      handleToastClick(instance, domCache, dismissWith);\n    } else {\n      // Ignore click events that had mousedown on the popup but mouseup on the container\n      // This can happen when the user drags a slider\n      handleModalMousedown(domCache);\n\n      // Ignore click events that had mousedown on the container but mouseup on the popup\n      handleContainerMousedown(domCache);\n      handleModalClick(instance, domCache, dismissWith);\n    }\n  };\n  const handleToastClick = (instance, domCache, dismissWith) => {\n    // Closing toast by internal click\n    domCache.popup.onclick = () => {\n      const innerParams = privateProps.innerParams.get(instance);\n      if (innerParams && (isAnyButtonShown(innerParams) || innerParams.timer || innerParams.input)) {\n        return;\n      }\n      dismissWith(DismissReason.close);\n    };\n  };\n\n  /**\n   * @param {*} innerParams\n   * @returns {boolean}\n   */\n  const isAnyButtonShown = innerParams => {\n    return innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton;\n  };\n  let ignoreOutsideClick = false;\n  const handleModalMousedown = domCache => {\n    domCache.popup.onmousedown = () => {\n      domCache.container.onmouseup = function (e) {\n        domCache.container.onmouseup = undefined;\n        // We only check if the mouseup target is the container because usually it doesn't\n        // have any other direct children aside of the popup\n        if (e.target === domCache.container) {\n          ignoreOutsideClick = true;\n        }\n      };\n    };\n  };\n  const handleContainerMousedown = domCache => {\n    domCache.container.onmousedown = () => {\n      domCache.popup.onmouseup = function (e) {\n        domCache.popup.onmouseup = undefined;\n        // We also need to check if the mouseup target is a child of the popup\n        if (e.target === domCache.popup || domCache.popup.contains(e.target)) {\n          ignoreOutsideClick = true;\n        }\n      };\n    };\n  };\n  const handleModalClick = (instance, domCache, dismissWith) => {\n    domCache.container.onclick = e => {\n      const innerParams = privateProps.innerParams.get(instance);\n      if (ignoreOutsideClick) {\n        ignoreOutsideClick = false;\n        return;\n      }\n      if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) {\n        dismissWith(DismissReason.backdrop);\n      }\n    };\n  };\n\n  const isJqueryElement = elem => typeof elem === 'object' && elem.jquery;\n  const isElement = elem => elem instanceof Element || isJqueryElement(elem);\n  const argsToParams = args => {\n    const params = {};\n    if (typeof args[0] === 'object' && !isElement(args[0])) {\n      Object.assign(params, args[0]);\n    } else {\n      ['title', 'html', 'icon'].forEach((name, index) => {\n        const arg = args[index];\n        if (typeof arg === 'string' || isElement(arg)) {\n          params[name] = arg;\n        } else if (arg !== undefined) {\n          error(`Unexpected type of ${name}! Expected \"string\" or \"Element\", got ${typeof arg}`);\n        }\n      });\n    }\n    return params;\n  };\n\n  /**\n   * Main method to create a new SweetAlert2 popup\n   *\n   * @param  {...SweetAlertOptions} args\n   * @returns {Promise<SweetAlertResult>}\n   */\n  function fire() {\n    const Swal = this; // eslint-disable-line @typescript-eslint/no-this-alias\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return new Swal(...args);\n  }\n\n  /**\n   * Returns an extended version of `Swal` containing `params` as defaults.\n   * Useful for reusing Swal configuration.\n   *\n   * For example:\n   *\n   * Before:\n   * const textPromptOptions = { input: 'text', showCancelButton: true }\n   * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' })\n   * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' })\n   *\n   * After:\n   * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true })\n   * const {value: firstName} = await TextPrompt('What is your first name?')\n   * const {value: lastName} = await TextPrompt('What is your last name?')\n   *\n   * @param {SweetAlertOptions} mixinParams\n   * @returns {SweetAlert}\n   */\n  function mixin(mixinParams) {\n    class MixinSwal extends this {\n      _main(params, priorityMixinParams) {\n        return super._main(params, Object.assign({}, mixinParams, priorityMixinParams));\n      }\n    }\n    // @ts-ignore\n    return MixinSwal;\n  }\n\n  /**\n   * If `timer` parameter is set, returns number of milliseconds of timer remained.\n   * Otherwise, returns undefined.\n   *\n   * @returns {number | undefined}\n   */\n  const getTimerLeft = () => {\n    return globalState.timeout && globalState.timeout.getTimerLeft();\n  };\n\n  /**\n   * Stop timer. Returns number of milliseconds of timer remained.\n   * If `timer` parameter isn't set, returns undefined.\n   *\n   * @returns {number | undefined}\n   */\n  const stopTimer = () => {\n    if (globalState.timeout) {\n      stopTimerProgressBar();\n      return globalState.timeout.stop();\n    }\n  };\n\n  /**\n   * Resume timer. Returns number of milliseconds of timer remained.\n   * If `timer` parameter isn't set, returns undefined.\n   *\n   * @returns {number | undefined}\n   */\n  const resumeTimer = () => {\n    if (globalState.timeout) {\n      const remaining = globalState.timeout.start();\n      animateTimerProgressBar(remaining);\n      return remaining;\n    }\n  };\n\n  /**\n   * Resume timer. Returns number of milliseconds of timer remained.\n   * If `timer` parameter isn't set, returns undefined.\n   *\n   * @returns {number | undefined}\n   */\n  const toggleTimer = () => {\n    const timer = globalState.timeout;\n    return timer && (timer.running ? stopTimer() : resumeTimer());\n  };\n\n  /**\n   * Increase timer. Returns number of milliseconds of an updated timer.\n   * If `timer` parameter isn't set, returns undefined.\n   *\n   * @param {number} n\n   * @returns {number | undefined}\n   */\n  const increaseTimer = n => {\n    if (globalState.timeout) {\n      const remaining = globalState.timeout.increase(n);\n      animateTimerProgressBar(remaining, true);\n      return remaining;\n    }\n  };\n\n  /**\n   * Check if timer is running. Returns true if timer is running\n   * or false if timer is paused or stopped.\n   * If `timer` parameter isn't set, returns undefined\n   *\n   * @returns {boolean}\n   */\n  const isTimerRunning = () => {\n    return !!(globalState.timeout && globalState.timeout.isRunning());\n  };\n\n  let bodyClickListenerAdded = false;\n  const clickHandlers = {};\n\n  /**\n   * @param {string} attr\n   */\n  function bindClickHandler() {\n    let attr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'data-swal-template';\n    clickHandlers[attr] = this;\n    if (!bodyClickListenerAdded) {\n      document.body.addEventListener('click', bodyClickListener);\n      bodyClickListenerAdded = true;\n    }\n  }\n  const bodyClickListener = event => {\n    for (let el = event.target; el && el !== document; el = el.parentNode) {\n      for (const attr in clickHandlers) {\n        const template = el.getAttribute(attr);\n        if (template) {\n          clickHandlers[attr].fire({\n            template\n          });\n          return;\n        }\n      }\n    }\n  };\n\n  var staticMethods = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    argsToParams: argsToParams,\n    bindClickHandler: bindClickHandler,\n    clickCancel: clickCancel,\n    clickConfirm: clickConfirm,\n    clickDeny: clickDeny,\n    enableLoading: showLoading,\n    fire: fire,\n    getActions: getActions,\n    getCancelButton: getCancelButton,\n    getCloseButton: getCloseButton,\n    getConfirmButton: getConfirmButton,\n    getContainer: getContainer,\n    getDenyButton: getDenyButton,\n    getFocusableElements: getFocusableElements,\n    getFooter: getFooter,\n    getHtmlContainer: getHtmlContainer,\n    getIcon: getIcon,\n    getIconContent: getIconContent,\n    getImage: getImage,\n    getInputLabel: getInputLabel,\n    getLoader: getLoader,\n    getPopup: getPopup,\n    getProgressSteps: getProgressSteps,\n    getTimerLeft: getTimerLeft,\n    getTimerProgressBar: getTimerProgressBar,\n    getTitle: getTitle,\n    getValidationMessage: getValidationMessage,\n    increaseTimer: increaseTimer,\n    isDeprecatedParameter: isDeprecatedParameter,\n    isLoading: isLoading,\n    isTimerRunning: isTimerRunning,\n    isUpdatableParameter: isUpdatableParameter,\n    isValidParameter: isValidParameter,\n    isVisible: isVisible,\n    mixin: mixin,\n    resumeTimer: resumeTimer,\n    showLoading: showLoading,\n    stopTimer: stopTimer,\n    toggleTimer: toggleTimer\n  });\n\n  class Timer {\n    /**\n     * @param {Function} callback\n     * @param {number} delay\n     */\n    constructor(callback, delay) {\n      this.callback = callback;\n      this.remaining = delay;\n      this.running = false;\n      this.start();\n    }\n\n    /**\n     * @returns {number}\n     */\n    start() {\n      if (!this.running) {\n        this.running = true;\n        this.started = new Date();\n        this.id = setTimeout(this.callback, this.remaining);\n      }\n      return this.remaining;\n    }\n\n    /**\n     * @returns {number}\n     */\n    stop() {\n      if (this.started && this.running) {\n        this.running = false;\n        clearTimeout(this.id);\n        this.remaining -= new Date().getTime() - this.started.getTime();\n      }\n      return this.remaining;\n    }\n\n    /**\n     * @param {number} n\n     * @returns {number}\n     */\n    increase(n) {\n      const running = this.running;\n      if (running) {\n        this.stop();\n      }\n      this.remaining += n;\n      if (running) {\n        this.start();\n      }\n      return this.remaining;\n    }\n\n    /**\n     * @returns {number}\n     */\n    getTimerLeft() {\n      if (this.running) {\n        this.stop();\n        this.start();\n      }\n      return this.remaining;\n    }\n\n    /**\n     * @returns {boolean}\n     */\n    isRunning() {\n      return this.running;\n    }\n  }\n\n  const swalStringParams = ['swal-title', 'swal-html', 'swal-footer'];\n\n  /**\n   * @param {SweetAlertOptions} params\n   * @returns {SweetAlertOptions}\n   */\n  const getTemplateParams = params => {\n    /** @type {HTMLTemplateElement} */\n    const template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template;\n    if (!template) {\n      return {};\n    }\n    /** @type {DocumentFragment} */\n    const templateContent = template.content;\n    showWarningsForElements(templateContent);\n    const result = Object.assign(getSwalParams(templateContent), getSwalFunctionParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams));\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {SweetAlertOptions}\n   */\n  const getSwalParams = templateContent => {\n    const result = {};\n    /** @type {HTMLElement[]} */\n    const swalParams = Array.from(templateContent.querySelectorAll('swal-param'));\n    swalParams.forEach(param => {\n      showWarningsForAttributes(param, ['name', 'value']);\n      const paramName = param.getAttribute('name');\n      const value = param.getAttribute('value');\n      if (typeof defaultParams[paramName] === 'boolean') {\n        result[paramName] = value !== 'false';\n      } else if (typeof defaultParams[paramName] === 'object') {\n        result[paramName] = JSON.parse(value);\n      } else {\n        result[paramName] = value;\n      }\n    });\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {SweetAlertOptions}\n   */\n  const getSwalFunctionParams = templateContent => {\n    const result = {};\n    /** @type {HTMLElement[]} */\n    const swalFunctions = Array.from(templateContent.querySelectorAll('swal-function-param'));\n    swalFunctions.forEach(param => {\n      const paramName = param.getAttribute('name');\n      const value = param.getAttribute('value');\n      result[paramName] = new Function(`return ${value}`)();\n    });\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {SweetAlertOptions}\n   */\n  const getSwalButtons = templateContent => {\n    const result = {};\n    /** @type {HTMLElement[]} */\n    const swalButtons = Array.from(templateContent.querySelectorAll('swal-button'));\n    swalButtons.forEach(button => {\n      showWarningsForAttributes(button, ['type', 'color', 'aria-label']);\n      const type = button.getAttribute('type');\n      result[`${type}ButtonText`] = button.innerHTML;\n      result[`show${capitalizeFirstLetter(type)}Button`] = true;\n      if (button.hasAttribute('color')) {\n        result[`${type}ButtonColor`] = button.getAttribute('color');\n      }\n      if (button.hasAttribute('aria-label')) {\n        result[`${type}ButtonAriaLabel`] = button.getAttribute('aria-label');\n      }\n    });\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {SweetAlertOptions}\n   */\n  const getSwalImage = templateContent => {\n    const result = {};\n    /** @type {HTMLElement} */\n    const image = templateContent.querySelector('swal-image');\n    if (image) {\n      showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']);\n      if (image.hasAttribute('src')) {\n        result.imageUrl = image.getAttribute('src');\n      }\n      if (image.hasAttribute('width')) {\n        result.imageWidth = image.getAttribute('width');\n      }\n      if (image.hasAttribute('height')) {\n        result.imageHeight = image.getAttribute('height');\n      }\n      if (image.hasAttribute('alt')) {\n        result.imageAlt = image.getAttribute('alt');\n      }\n    }\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {SweetAlertOptions}\n   */\n  const getSwalIcon = templateContent => {\n    const result = {};\n    /** @type {HTMLElement} */\n    const icon = templateContent.querySelector('swal-icon');\n    if (icon) {\n      showWarningsForAttributes(icon, ['type', 'color']);\n      if (icon.hasAttribute('type')) {\n        /** @type {SweetAlertIcon} */\n        // @ts-ignore\n        result.icon = icon.getAttribute('type');\n      }\n      if (icon.hasAttribute('color')) {\n        result.iconColor = icon.getAttribute('color');\n      }\n      result.iconHtml = icon.innerHTML;\n    }\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {SweetAlertOptions}\n   */\n  const getSwalInput = templateContent => {\n    const result = {};\n    /** @type {HTMLElement} */\n    const input = templateContent.querySelector('swal-input');\n    if (input) {\n      showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']);\n      /** @type {SweetAlertInput} */\n      // @ts-ignore\n      result.input = input.getAttribute('type') || 'text';\n      if (input.hasAttribute('label')) {\n        result.inputLabel = input.getAttribute('label');\n      }\n      if (input.hasAttribute('placeholder')) {\n        result.inputPlaceholder = input.getAttribute('placeholder');\n      }\n      if (input.hasAttribute('value')) {\n        result.inputValue = input.getAttribute('value');\n      }\n    }\n    /** @type {HTMLElement[]} */\n    const inputOptions = Array.from(templateContent.querySelectorAll('swal-input-option'));\n    if (inputOptions.length) {\n      result.inputOptions = {};\n      inputOptions.forEach(option => {\n        showWarningsForAttributes(option, ['value']);\n        const optionValue = option.getAttribute('value');\n        const optionName = option.innerHTML;\n        result.inputOptions[optionValue] = optionName;\n      });\n    }\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @param {string[]} paramNames\n   * @returns {SweetAlertOptions}\n   */\n  const getSwalStringParams = (templateContent, paramNames) => {\n    const result = {};\n    for (const i in paramNames) {\n      const paramName = paramNames[i];\n      /** @type {HTMLElement} */\n      const tag = templateContent.querySelector(paramName);\n      if (tag) {\n        showWarningsForAttributes(tag, []);\n        result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim();\n      }\n    }\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   */\n  const showWarningsForElements = templateContent => {\n    const allowedElements = swalStringParams.concat(['swal-param', 'swal-function-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']);\n    Array.from(templateContent.children).forEach(el => {\n      const tagName = el.tagName.toLowerCase();\n      if (!allowedElements.includes(tagName)) {\n        warn(`Unrecognized element <${tagName}>`);\n      }\n    });\n  };\n\n  /**\n   * @param {HTMLElement} el\n   * @param {string[]} allowedAttributes\n   */\n  const showWarningsForAttributes = (el, allowedAttributes) => {\n    Array.from(el.attributes).forEach(attribute => {\n      if (allowedAttributes.indexOf(attribute.name) === -1) {\n        warn([`Unrecognized attribute \"${attribute.name}\" on <${el.tagName.toLowerCase()}>.`, `${allowedAttributes.length ? `Allowed attributes are: ${allowedAttributes.join(', ')}` : 'To set the value, use HTML within the element.'}`]);\n      }\n    });\n  };\n\n  const SHOW_CLASS_TIMEOUT = 10;\n\n  /**\n   * Open popup, add necessary classes and styles, fix scrollbar\n   *\n   * @param {SweetAlertOptions} params\n   */\n  const openPopup = params => {\n    const container = getContainer();\n    const popup = getPopup();\n    if (typeof params.willOpen === 'function') {\n      params.willOpen(popup);\n    }\n    const bodyStyles = window.getComputedStyle(document.body);\n    const initialBodyOverflow = bodyStyles.overflowY;\n    addClasses(container, popup, params);\n\n    // scrolling is 'hidden' until animation is done, after that 'auto'\n    setTimeout(() => {\n      setScrollingVisibility(container, popup);\n    }, SHOW_CLASS_TIMEOUT);\n    if (isModal()) {\n      fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow);\n      setAriaHidden();\n    }\n    if (!isToast() && !globalState.previousActiveElement) {\n      globalState.previousActiveElement = document.activeElement;\n    }\n    if (typeof params.didOpen === 'function') {\n      setTimeout(() => params.didOpen(popup));\n    }\n    removeClass(container, swalClasses['no-transition']);\n  };\n\n  /**\n   * @param {AnimationEvent} event\n   */\n  const swalOpenAnimationFinished = event => {\n    const popup = getPopup();\n    if (event.target !== popup) {\n      return;\n    }\n    const container = getContainer();\n    popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished);\n    container.style.overflowY = 'auto';\n  };\n\n  /**\n   * @param {HTMLElement} container\n   * @param {HTMLElement} popup\n   */\n  const setScrollingVisibility = (container, popup) => {\n    if (animationEndEvent && hasCssAnimation(popup)) {\n      container.style.overflowY = 'hidden';\n      popup.addEventListener(animationEndEvent, swalOpenAnimationFinished);\n    } else {\n      container.style.overflowY = 'auto';\n    }\n  };\n\n  /**\n   * @param {HTMLElement} container\n   * @param {boolean} scrollbarPadding\n   * @param {string} initialBodyOverflow\n   */\n  const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => {\n    iOSfix();\n    if (scrollbarPadding && initialBodyOverflow !== 'hidden') {\n      fixScrollbar();\n    }\n\n    // sweetalert2/issues/1247\n    setTimeout(() => {\n      container.scrollTop = 0;\n    });\n  };\n\n  /**\n   * @param {HTMLElement} container\n   * @param {HTMLElement} popup\n   * @param {SweetAlertOptions} params\n   */\n  const addClasses = (container, popup, params) => {\n    addClass(container, params.showClass.backdrop);\n    // this workaround with opacity is needed for https://github.com/sweetalert2/sweetalert2/issues/2059\n    popup.style.setProperty('opacity', '0', 'important');\n    show(popup, 'grid');\n    setTimeout(() => {\n      // Animate popup right after showing it\n      addClass(popup, params.showClass.popup);\n      // and remove the opacity workaround\n      popup.style.removeProperty('opacity');\n    }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062\n\n    addClass([document.documentElement, document.body], swalClasses.shown);\n    if (params.heightAuto && params.backdrop && !params.toast) {\n      addClass([document.documentElement, document.body], swalClasses['height-auto']);\n    }\n  };\n\n  var defaultInputValidators = {\n    /**\n     * @param {string} string\n     * @param {string} validationMessage\n     * @returns {Promise<void | string>}\n     */\n    email: (string, validationMessage) => {\n      return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address');\n    },\n    /**\n     * @param {string} string\n     * @param {string} validationMessage\n     * @returns {Promise<void | string>}\n     */\n    url: (string, validationMessage) => {\n      // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013\n      return /^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-z]{2,63}\\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL');\n    }\n  };\n\n  /**\n   * @param {SweetAlertOptions} params\n   */\n  function setDefaultInputValidators(params) {\n    // Use default `inputValidator` for supported input types if not provided\n    if (!params.inputValidator) {\n      Object.keys(defaultInputValidators).forEach(key => {\n        if (params.input === key) {\n          params.inputValidator = defaultInputValidators[key];\n        }\n      });\n    }\n  }\n\n  /**\n   * @param {SweetAlertOptions} params\n   */\n  function validateCustomTargetElement(params) {\n    // Determine if the custom target element is valid\n    if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) {\n      warn('Target parameter is not valid, defaulting to \"body\"');\n      params.target = 'body';\n    }\n  }\n\n  /**\n   * Set type, text and actions on popup\n   *\n   * @param {SweetAlertOptions} params\n   */\n  function setParameters(params) {\n    setDefaultInputValidators(params);\n\n    // showLoaderOnConfirm && preConfirm\n    if (params.showLoaderOnConfirm && !params.preConfirm) {\n      warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\\n' + 'https://sweetalert2.github.io/#ajax-request');\n    }\n    validateCustomTargetElement(params);\n\n    // Replace newlines with <br> in title\n    if (typeof params.title === 'string') {\n      params.title = params.title.split('\\n').join('<br />');\n    }\n    init(params);\n  }\n\n  /** @type {SweetAlert} */\n  let currentInstance;\n  class SweetAlert {\n    /**\n     * @param {...any} args\n     * @this {SweetAlert}\n     */\n    constructor() {\n      // Prevent run in Node env\n      if (typeof window === 'undefined') {\n        return;\n      }\n      currentInstance = this;\n\n      // @ts-ignore\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      const outerParams = Object.freeze(this.constructor.argsToParams(args));\n\n      /** @type {Readonly<SweetAlertOptions>} */\n      this.params = outerParams;\n\n      /** @type {boolean} */\n      this.isAwaitingPromise = false;\n      const promise = currentInstance._main(currentInstance.params);\n      privateProps.promise.set(this, promise);\n    }\n    _main(userParams) {\n      let mixinParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      showWarningsForParams(Object.assign({}, mixinParams, userParams));\n      if (globalState.currentInstance) {\n        globalState.currentInstance._destroy();\n        if (isModal()) {\n          unsetAriaHidden();\n        }\n      }\n      globalState.currentInstance = currentInstance;\n      const innerParams = prepareParams(userParams, mixinParams);\n      setParameters(innerParams);\n      Object.freeze(innerParams);\n\n      // clear the previous timer\n      if (globalState.timeout) {\n        globalState.timeout.stop();\n        delete globalState.timeout;\n      }\n\n      // clear the restore focus timeout\n      clearTimeout(globalState.restoreFocusTimeout);\n      const domCache = populateDomCache(currentInstance);\n      render(currentInstance, innerParams);\n      privateProps.innerParams.set(currentInstance, innerParams);\n      return swalPromise(currentInstance, domCache, innerParams);\n    }\n\n    // `catch` cannot be the name of a module export, so we define our thenable methods here instead\n    then(onFulfilled) {\n      const promise = privateProps.promise.get(this);\n      return promise.then(onFulfilled);\n    }\n    finally(onFinally) {\n      const promise = privateProps.promise.get(this);\n      return promise.finally(onFinally);\n    }\n  }\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {DomCache} domCache\n   * @param {SweetAlertOptions} innerParams\n   * @returns {Promise}\n   */\n  const swalPromise = (instance, domCache, innerParams) => {\n    return new Promise((resolve, reject) => {\n      // functions to handle all closings/dismissals\n      /**\n       * @param {DismissReason} dismiss\n       */\n      const dismissWith = dismiss => {\n        instance.close({\n          isDismissed: true,\n          dismiss\n        });\n      };\n      privateMethods.swalPromiseResolve.set(instance, resolve);\n      privateMethods.swalPromiseReject.set(instance, reject);\n      domCache.confirmButton.onclick = () => {\n        handleConfirmButtonClick(instance);\n      };\n      domCache.denyButton.onclick = () => {\n        handleDenyButtonClick(instance);\n      };\n      domCache.cancelButton.onclick = () => {\n        handleCancelButtonClick(instance, dismissWith);\n      };\n      domCache.closeButton.onclick = () => {\n        dismissWith(DismissReason.close);\n      };\n      handlePopupClick(instance, domCache, dismissWith);\n      addKeydownHandler(instance, globalState, innerParams, dismissWith);\n      handleInputOptionsAndValue(instance, innerParams);\n      openPopup(innerParams);\n      setupTimer(globalState, innerParams, dismissWith);\n      initFocus(domCache, innerParams);\n\n      // Scroll container to top on open (#1247, #1946)\n      setTimeout(() => {\n        domCache.container.scrollTop = 0;\n      });\n    });\n  };\n\n  /**\n   * @param {SweetAlertOptions} userParams\n   * @param {SweetAlertOptions} mixinParams\n   * @returns {SweetAlertOptions}\n   */\n  const prepareParams = (userParams, mixinParams) => {\n    const templateParams = getTemplateParams(userParams);\n    const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131\n    params.showClass = Object.assign({}, defaultParams.showClass, params.showClass);\n    params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass);\n    return params;\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @returns {DomCache}\n   */\n  const populateDomCache = instance => {\n    const domCache = {\n      popup: getPopup(),\n      container: getContainer(),\n      actions: getActions(),\n      confirmButton: getConfirmButton(),\n      denyButton: getDenyButton(),\n      cancelButton: getCancelButton(),\n      loader: getLoader(),\n      closeButton: getCloseButton(),\n      validationMessage: getValidationMessage(),\n      progressSteps: getProgressSteps()\n    };\n    privateProps.domCache.set(instance, domCache);\n    return domCache;\n  };\n\n  /**\n   * @param {GlobalState} globalState\n   * @param {SweetAlertOptions} innerParams\n   * @param {Function} dismissWith\n   */\n  const setupTimer = (globalState, innerParams, dismissWith) => {\n    const timerProgressBar = getTimerProgressBar();\n    hide(timerProgressBar);\n    if (innerParams.timer) {\n      globalState.timeout = new Timer(() => {\n        dismissWith('timer');\n        delete globalState.timeout;\n      }, innerParams.timer);\n      if (innerParams.timerProgressBar) {\n        show(timerProgressBar);\n        applyCustomClass(timerProgressBar, innerParams, 'timerProgressBar');\n        setTimeout(() => {\n          if (globalState.timeout && globalState.timeout.running) {\n            // timer can be already stopped or unset at this point\n            animateTimerProgressBar(innerParams.timer);\n          }\n        });\n      }\n    }\n  };\n\n  /**\n   * @param {DomCache} domCache\n   * @param {SweetAlertOptions} innerParams\n   */\n  const initFocus = (domCache, innerParams) => {\n    if (innerParams.toast) {\n      return;\n    }\n    if (!callIfFunction(innerParams.allowEnterKey)) {\n      blurActiveElement();\n      return;\n    }\n    if (!focusButton(domCache, innerParams)) {\n      setFocus(-1, 1);\n    }\n  };\n\n  /**\n   * @param {DomCache} domCache\n   * @param {SweetAlertOptions} innerParams\n   * @returns {boolean}\n   */\n  const focusButton = (domCache, innerParams) => {\n    if (innerParams.focusDeny && isVisible$1(domCache.denyButton)) {\n      domCache.denyButton.focus();\n      return true;\n    }\n    if (innerParams.focusCancel && isVisible$1(domCache.cancelButton)) {\n      domCache.cancelButton.focus();\n      return true;\n    }\n    if (innerParams.focusConfirm && isVisible$1(domCache.confirmButton)) {\n      domCache.confirmButton.focus();\n      return true;\n    }\n    return false;\n  };\n  const blurActiveElement = () => {\n    if (document.activeElement instanceof HTMLElement && typeof document.activeElement.blur === 'function') {\n      document.activeElement.blur();\n    }\n  };\n\n  // Dear russian users visiting russian sites. Let's have fun.\n  if (typeof window !== 'undefined' && /^ru\\b/.test(navigator.language) && location.host.match(/\\.(ru|su|by|xn--p1ai)$/)) {\n    const now = new Date();\n    const initiationDate = localStorage.getItem('swal-initiation');\n    if (!initiationDate) {\n      localStorage.setItem('swal-initiation', `${now}`);\n    } else if ((now.getTime() - Date.parse(initiationDate)) / (1000 * 60 * 60 * 24) > 3) {\n      setTimeout(() => {\n        document.body.style.pointerEvents = 'none';\n        const ukrainianAnthem = document.createElement('audio');\n        ukrainianAnthem.src = 'https://flag-gimn.ru/wp-content/uploads/2021/09/Ukraina.mp3';\n        ukrainianAnthem.loop = true;\n        document.body.appendChild(ukrainianAnthem);\n        setTimeout(() => {\n          ukrainianAnthem.play().catch(() => {\n            // ignore\n          });\n        }, 2500);\n      }, 500);\n    }\n  }\n\n  // Assign instance methods from src/instanceMethods/*.js to prototype\n  SweetAlert.prototype.disableButtons = disableButtons;\n  SweetAlert.prototype.enableButtons = enableButtons;\n  SweetAlert.prototype.getInput = getInput;\n  SweetAlert.prototype.disableInput = disableInput;\n  SweetAlert.prototype.enableInput = enableInput;\n  SweetAlert.prototype.hideLoading = hideLoading;\n  SweetAlert.prototype.disableLoading = hideLoading;\n  SweetAlert.prototype.showValidationMessage = showValidationMessage;\n  SweetAlert.prototype.resetValidationMessage = resetValidationMessage;\n  SweetAlert.prototype.close = close;\n  SweetAlert.prototype.closePopup = close;\n  SweetAlert.prototype.closeModal = close;\n  SweetAlert.prototype.closeToast = close;\n  SweetAlert.prototype.rejectPromise = rejectPromise;\n  SweetAlert.prototype.update = update;\n  SweetAlert.prototype._destroy = _destroy;\n\n  // Assign static methods from src/staticMethods/*.js to constructor\n  Object.assign(SweetAlert, staticMethods);\n\n  // Proxy to instance methods to constructor, for now, for backwards compatibility\n  Object.keys(instanceMethods).forEach(key => {\n    /**\n     * @param {...any} args\n     * @returns {any | undefined}\n     */\n    SweetAlert[key] = function () {\n      if (currentInstance && currentInstance[key]) {\n        return currentInstance[key](...arguments);\n      }\n      return null;\n    };\n  });\n  SweetAlert.DismissReason = DismissReason;\n  SweetAlert.version = '11.7.12';\n\n  const Swal = SweetAlert;\n  // @ts-ignore\n  Swal.default = Swal;\n\n  return Swal;\n\n}));\nif (typeof this !== 'undefined' && this.Sweetalert2){this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2}\n\"undefined\"!=typeof document&&function(e,t){var n=e.createElement(\"style\");if(e.getElementsByTagName(\"head\")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,\".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4 !important;grid-row:1/4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 1px rgba(0,0,0,.075),0 1px 2px rgba(0,0,0,.075),1px 2px 4px rgba(0,0,0,.075),1px 3px 8px rgba(0,0,0,.075),2px 4px 16px rgba(0,0,0,.075);pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{animation:swal2-toast-hide .1s forwards}div:where(.swal2-container){display:grid;position:fixed;z-index:1060;inset:0;box-sizing:border-box;grid-template-areas:\\\"top-start     top            top-end\\\" \\\"center-start  center         center-end\\\" \\\"bottom-start  bottom-center  bottom-end\\\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:rgba(0,0,0,.4)}div:where(.swal2-container).swal2-backdrop-hide{background:rgba(0,0,0,0) !important}div:where(.swal2-container).swal2-top-start,div:where(.swal2-container).swal2-center-start,div:where(.swal2-container).swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}div:where(.swal2-container).swal2-top,div:where(.swal2-container).swal2-center,div:where(.swal2-container).swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}div:where(.swal2-container).swal2-top-end,div:where(.swal2-container).swal2-center-end,div:where(.swal2-container).swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}div:where(.swal2-container).swal2-top-start>.swal2-popup{align-self:start}div:where(.swal2-container).swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}div:where(.swal2-container).swal2-top-end>.swal2-popup,div:where(.swal2-container).swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}div:where(.swal2-container).swal2-center-start>.swal2-popup,div:where(.swal2-container).swal2-center-left>.swal2-popup{grid-row:2;align-self:center}div:where(.swal2-container).swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}div:where(.swal2-container).swal2-center-end>.swal2-popup,div:where(.swal2-container).swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}div:where(.swal2-container).swal2-bottom-start>.swal2-popup,div:where(.swal2-container).swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}div:where(.swal2-container).swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}div:where(.swal2-container).swal2-bottom-end>.swal2-popup,div:where(.swal2-container).swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}div:where(.swal2-container).swal2-grow-row>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-column:1/4;width:100%}div:where(.swal2-container).swal2-grow-column>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}div:where(.swal2-container).swal2-no-transition{transition:none !important}div:where(.swal2-container) div:where(.swal2-popup){display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}div:where(.swal2-container) div:where(.swal2-popup):focus{outline:none}div:where(.swal2-container) div:where(.swal2-popup).swal2-loading{overflow-y:hidden}div:where(.swal2-container) h2:where(.swal2-title){position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}div:where(.swal2-container) div:where(.swal2-actions){display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}div:where(.swal2-container) div:where(.swal2-actions):not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}div:where(.swal2-container) div:where(.swal2-actions):not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1))}div:where(.swal2-container) div:where(.swal2-actions):not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2))}div:where(.swal2-container) div:where(.swal2-loader){display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}div:where(.swal2-container) button:where(.swal2-styled){margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}div:where(.swal2-container) button:where(.swal2-styled):not([disabled]){cursor:pointer}div:where(.swal2-container) button:where(.swal2-styled).swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7066e0;color:#fff;font-size:1em}div:where(.swal2-container) button:where(.swal2-styled).swal2-confirm:focus{box-shadow:0 0 0 3px rgba(112,102,224,.5)}div:where(.swal2-container) button:where(.swal2-styled).swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#dc3741;color:#fff;font-size:1em}div:where(.swal2-container) button:where(.swal2-styled).swal2-deny:focus{box-shadow:0 0 0 3px rgba(220,55,65,.5)}div:where(.swal2-container) button:where(.swal2-styled).swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7881;color:#fff;font-size:1em}div:where(.swal2-container) button:where(.swal2-styled).swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,120,129,.5)}div:where(.swal2-container) button:where(.swal2-styled).swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}div:where(.swal2-container) button:where(.swal2-styled):focus{outline:none}div:where(.swal2-container) button:where(.swal2-styled)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-footer){justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:inherit;font-size:1em}div:where(.swal2-container) .swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}div:where(.swal2-container) div:where(.swal2-timer-progress-bar){width:100%;height:.25em;background:rgba(0,0,0,.2)}div:where(.swal2-container) img:where(.swal2-image){max-width:100%;margin:2em auto 1em}div:where(.swal2-container) button:where(.swal2-close){z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:rgba(0,0,0,0);color:#ccc;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}div:where(.swal2-container) button:where(.swal2-close):hover{transform:none;background:rgba(0,0,0,0);color:#f27474}div:where(.swal2-container) button:where(.swal2-close):focus{outline:none;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}div:where(.swal2-container) button:where(.swal2-close)::-moz-focus-inner{border:0}div:where(.swal2-container) .swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea),div:where(.swal2-container) select:where(.swal2-select),div:where(.swal2-container) div:where(.swal2-radio),div:where(.swal2-container) label:where(.swal2-checkbox){margin:1em 2em 3px}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea){box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:rgba(0,0,0,0);box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(0,0,0,0);color:inherit;font-size:1.125em}div:where(.swal2-container) input:where(.swal2-input).swal2-inputerror,div:where(.swal2-container) input:where(.swal2-file).swal2-inputerror,div:where(.swal2-container) textarea:where(.swal2-textarea).swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}div:where(.swal2-container) input:where(.swal2-input):focus,div:where(.swal2-container) input:where(.swal2-file):focus,div:where(.swal2-container) textarea:where(.swal2-textarea):focus{border:1px solid #b4dbed;outline:none;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}div:where(.swal2-container) input:where(.swal2-input)::placeholder,div:where(.swal2-container) input:where(.swal2-file)::placeholder,div:where(.swal2-container) textarea:where(.swal2-textarea)::placeholder{color:#ccc}div:where(.swal2-container) .swal2-range{margin:1em 2em 3px;background:#fff}div:where(.swal2-container) .swal2-range input{width:80%}div:where(.swal2-container) .swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}div:where(.swal2-container) .swal2-range input,div:where(.swal2-container) .swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}div:where(.swal2-container) .swal2-input{height:2.625em;padding:0 .75em}div:where(.swal2-container) .swal2-file{width:75%;margin-right:auto;margin-left:auto;background:rgba(0,0,0,0);font-size:1.125em}div:where(.swal2-container) .swal2-textarea{height:6.75em;padding:.75em}div:where(.swal2-container) .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:rgba(0,0,0,0);color:inherit;font-size:1.125em}div:where(.swal2-container) .swal2-radio,div:where(.swal2-container) .swal2-checkbox{align-items:center;justify-content:center;background:#fff;color:inherit}div:where(.swal2-container) .swal2-radio label,div:where(.swal2-container) .swal2-checkbox label{margin:0 .6em;font-size:1.125em}div:where(.swal2-container) .swal2-radio input,div:where(.swal2-container) .swal2-checkbox input{flex-shrink:0;margin:0 .4em}div:where(.swal2-container) label:where(.swal2-input-label){display:flex;justify-content:center;margin:1em auto 0}div:where(.swal2-container) div:where(.swal2-validation-message){align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}div:where(.swal2-container) div:where(.swal2-validation-message)::before{content:\\\"!\\\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}div:where(.swal2-container) .swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}div:where(.swal2-container) .swal2-progress-steps li{display:inline-block;position:relative}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}div:where(.swal2-icon){position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:0.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}div:where(.swal2-icon) .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}div:where(.swal2-icon).swal2-error{border-color:#f27474;color:#f27474}div:where(.swal2-icon).swal2-error .swal2-x-mark{position:relative;flex-grow:1}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}div:where(.swal2-icon).swal2-warning{border-color:#facea8;color:#f8bb86}div:where(.swal2-icon).swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}div:where(.swal2-icon).swal2-info{border-color:#9de0f6;color:#3fc3ee}div:where(.swal2-icon).swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}div:where(.swal2-icon).swal2-question{border-color:#c9dae1;color:#87adbd}div:where(.swal2-icon).swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}div:where(.swal2-icon).swal2-success{border-color:#a5dc86;color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}div:where(.swal2-icon).swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}div:where(.swal2-icon).swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:swal2-show .3s}.swal2-hide{animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-show{0%{transform:scale(0.7)}45%{transform:scale(1.05)}80%{transform:scale(0.95)}100%{transform:scale(1)}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(0.5);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static !important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{inset:0 auto auto 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{inset:0 0 auto auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{inset:0 auto auto 0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{inset:50% auto auto 0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{inset:50% auto auto 50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{inset:50% 0 auto auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{inset:auto auto 0 0}body.swal2-toast-shown .swal2-container.swal2-bottom{inset:auto auto 0 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{inset:auto 0 0 auto}\");", "/*!\nTurbo 8.0.0-beta.2\nCopyright \u00A9 2023 37signals LLC\n */\n/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Javan Makhmali\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function (prototype) {\n  if (typeof prototype.requestSubmit == \"function\") return\n\n  prototype.requestSubmit = function (submitter) {\n    if (submitter) {\n      validateSubmitter(submitter, this);\n      submitter.click();\n    } else {\n      submitter = document.createElement(\"input\");\n      submitter.type = \"submit\";\n      submitter.hidden = true;\n      this.appendChild(submitter);\n      submitter.click();\n      this.removeChild(submitter);\n    }\n  };\n\n  function validateSubmitter(submitter, form) {\n    submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n    submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n    submitter.form == form ||\n      raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n  }\n\n  function raise(errorConstructor, message, name) {\n    throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n  }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\n\nfunction findSubmitterFromClickTarget(target) {\n  const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n  const candidate = element ? element.closest(\"input, button\") : null;\n  return candidate?.type == \"submit\" ? candidate : null\n}\n\nfunction clickCaptured(event) {\n  const submitter = findSubmitterFromClickTarget(event.target);\n\n  if (submitter && submitter.form) {\n    submittersByForm.set(submitter.form, submitter);\n  }\n}\n\n(function () {\n  if (\"submitter\" in Event.prototype) return\n\n  let prototype = window.Event.prototype;\n  // Certain versions of Safari 15 have a bug where they won't\n  // populate the submitter. This hurts TurboDrive's enable/disable detection.\n  // See https://bugs.webkit.org/show_bug.cgi?id=229660\n  if (\"SubmitEvent\" in window) {\n    const prototypeOfSubmitEvent = window.SubmitEvent.prototype;\n\n    if (/Apple Computer/.test(navigator.vendor) && !(\"submitter\" in prototypeOfSubmitEvent)) {\n      prototype = prototypeOfSubmitEvent;\n    } else {\n      return // polyfill not needed\n    }\n  }\n\n  addEventListener(\"click\", clickCaptured, true);\n\n  Object.defineProperty(prototype, \"submitter\", {\n    get() {\n      if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n        return submittersByForm.get(this.target)\n      }\n    }\n  });\n})();\n\nconst FrameLoadingStyle = {\n  eager: \"eager\",\n  lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n *   <turbo-frame id=\"messages\">\n *     <a href=\"/messages/expanded\">\n *       Show all expanded messages in this frame.\n *     </a>\n *\n *     <form action=\"/messages\">\n *       Show response from this form within this frame.\n *     </form>\n *   </turbo-frame>\n */\nclass FrameElement extends HTMLElement {\n  static delegateConstructor = undefined\n\n  loaded = Promise.resolve()\n\n  static get observedAttributes() {\n    return [\"disabled\", \"complete\", \"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 == \"complete\") {\n      this.delegate.completeChanged();\n    } else if (name == \"src\") {\n      this.delegate.sourceURLChanged();\n    } else {\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  /**\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\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 isHTML(url) {\n  return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/)\n}\n\nfunction isPrefixedBy(baseURL, url) {\n  const prefix = getPrefix(url);\n  return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n  return isPrefixedBy(location, rootLocation) && isHTML(location)\n}\n\nfunction getRequestURL(url) {\n  const anchor = getAnchor(url);\n  return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n  return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n  return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n  return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n  return getPathComponents(url).slice(-1)[0]\n}\n\nfunction getPrefix(url) {\n  return addTrailingSlash(url.origin + url.pathname)\n}\n\nfunction addTrailingSlash(value) {\n  return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n  constructor(response) {\n    this.response = response;\n  }\n\n  get succeeded() {\n    return this.response.ok\n  }\n\n  get failed() {\n    return !this.succeeded\n  }\n\n  get clientError() {\n    return this.statusCode >= 400 && this.statusCode <= 499\n  }\n\n  get serverError() {\n    return this.statusCode >= 500 && this.statusCode <= 599\n  }\n\n  get redirected() {\n    return this.response.redirected\n  }\n\n  get location() {\n    return expandURL(this.response.url)\n  }\n\n  get isHTML() {\n    return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n  }\n\n  get statusCode() {\n    return this.response.status\n  }\n\n  get contentType() {\n    return this.header(\"Content-Type\")\n  }\n\n  get responseText() {\n    return this.response.clone().text()\n  }\n\n  get responseHTML() {\n    if (this.isHTML) {\n      return this.response.clone().text()\n    } else {\n      return Promise.resolve(undefined)\n    }\n  }\n\n  header(name) {\n    return this.response.headers.get(name)\n  }\n}\n\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 = getMetaContent(\"csp-nonce\");\n    if (cspNonce) {\n      createdScriptElement.nonce = cspNonce;\n    }\n    createdScriptElement.textContent = element.textContent;\n    createdScriptElement.async = false;\n    copyElementAttributes(createdScriptElement, element);\n    return createdScriptElement\n  }\n}\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 nextRepaint() {\n  if (document.visibilityState === \"hidden\") {\n    return nextEventLoopTick()\n  } else {\n    return nextAnimationFrame()\n  }\n}\n\nfunction nextAnimationFrame() {\n  return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n  return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction nextMicrotask() {\n  return Promise.resolve()\n}\n\nfunction parseHTMLDocument(html = \"\") {\n  return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nfunction unindent(strings, ...values) {\n  const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n  const match = lines[0].match(/^\\s+/);\n  const indent = match ? match[0].length : 0;\n  return lines.map((line) => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings, values) {\n  return strings.reduce((result, string, i) => {\n    const value = values[i] == undefined ? \"\" : values[i];\n    return result + string + value\n  }, \"\")\n}\n\nfunction uuid() {\n  return Array.from({ length: 36 })\n    .map((_, i) => {\n      if (i == 8 || i == 13 || i == 18 || i == 23) {\n        return \"-\"\n      } else if (i == 14) {\n        return \"4\"\n      } else if (i == 19) {\n        return (Math.floor(Math.random() * 4) + 8).toString(16)\n      } else {\n        return Math.floor(Math.random() * 15).toString(16)\n      }\n    })\n    .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n  for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n    if (typeof value == \"string\") return value\n  }\n\n  return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n  return elements.some((element) => element && element.hasAttribute(attributeName))\n}\n\nfunction markAsBusy(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.setAttribute(\"busy\", \"\");\n    }\n    element.setAttribute(\"aria-busy\", \"true\");\n  }\n}\n\nfunction clearBusyState(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.removeAttribute(\"busy\");\n    }\n\n    element.removeAttribute(\"aria-busy\");\n  }\n}\n\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n  return new Promise((resolve) => {\n    const onComplete = () => {\n      element.removeEventListener(\"error\", onComplete);\n      element.removeEventListener(\"load\", onComplete);\n      resolve();\n    };\n\n    element.addEventListener(\"load\", onComplete, { once: true });\n    element.addEventListener(\"error\", onComplete, { once: true });\n    setTimeout(resolve, timeoutInMilliseconds);\n  })\n}\n\nfunction getHistoryMethodForAction(action) {\n  switch (action) {\n    case \"replace\":\n      return history.replaceState\n    case \"advance\":\n    case \"restore\":\n      return history.pushState\n  }\n}\n\nfunction isAction(action) {\n  return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n  const action = getAttribute(\"data-turbo-action\", ...elements);\n\n  return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n  return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n  const element = getMetaElement(name);\n  return element && element.content\n}\n\nfunction 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\nclass LimitedSet extends Set {\n  constructor(maxSize) {\n    super();\n    this.maxSize = maxSize;\n  }\n\n  add(value) {\n    if (this.size >= this.maxSize) {\n      const iterator = this.values();\n      const oldestValue = iterator.next().value;\n      this.delete(oldestValue);\n    }\n    super.add(value);\n  }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nconst nativeFetch = window.fetch;\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n  const modifiedHeaders = new Headers(options.headers || {});\n  const requestUID = uuid();\n  recentRequests.add(requestUID);\n  modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n  return nativeFetch(url, {\n    ...options,\n    headers: modifiedHeaders\n  })\n}\n\nfunction fetchMethodFromString(method) {\n  switch (method.toLowerCase()) {\n    case \"get\":\n      return FetchMethod.get\n    case \"post\":\n      return FetchMethod.post\n    case \"put\":\n      return FetchMethod.put\n    case \"patch\":\n      return FetchMethod.patch\n    case \"delete\":\n      return FetchMethod.delete\n  }\n}\n\nconst FetchMethod = {\n  get: \"get\",\n  post: \"post\",\n  put: \"put\",\n  patch: \"patch\",\n  delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n  switch (encoding.toLowerCase()) {\n    case FetchEnctype.multipart:\n      return FetchEnctype.multipart\n    case FetchEnctype.plain:\n      return FetchEnctype.plain\n    default:\n      return FetchEnctype.urlEncoded\n  }\n}\n\nconst FetchEnctype = {\n  urlEncoded: \"application/x-www-form-urlencoded\",\n  multipart: \"multipart/form-data\",\n  plain: \"text/plain\"\n};\n\nclass FetchRequest {\n  abortController = new AbortController()\n  #resolveRequestPromise = (_value) => {}\n\n  constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n    const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n    this.delegate = delegate;\n    this.url = url;\n    this.target = target;\n    this.fetchOptions = {\n      credentials: \"same-origin\",\n      redirect: \"follow\",\n      method: method,\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;\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    await this.#allowRequestToBeIntercepted(fetchOptions);\n    try {\n      this.delegate.requestStarted(this);\n      const response = await fetchWithTurboHeaders(this.url.href, fetchOptions);\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\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 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, _element, _submitter) {\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 answer = await FormSubmission.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    this.submitter?.setAttribute(\"disabled\", \"\");\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    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    } else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n      const error = new Error(\"Form responses must redirect to another location\");\n      this.delegate.formSubmissionErrored(this, error);\n    } 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    this.submitter?.removeAttribute(\"disabled\");\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  if (submitter?.hasAttribute(\"formtarget\") || form.hasAttribute(\"target\")) {\n    const target = submitter?.getAttribute(\"formtarget\") || form.target;\n\n    for (const element of document.getElementsByName(target)) {\n      if (element instanceof HTMLIFrameElement) return false\n    }\n\n    return true\n  } else {\n    return true\n  }\n}\n\nclass View {\n  #resolveRenderPromise = (_value) => {}\n  #resolveInterceptionPromise = (_value) => {}\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  // Scrolling\n\n  scrollToAnchor(anchor) {\n    const element = this.snapshot.getElementForAnchor(anchor);\n    if (element) {\n      this.scrollToElement(element);\n      this.focusElement(element);\n    } else {\n      this.scrollToPosition({ x: 0, y: 0 });\n    }\n  }\n\n  scrollToAnchorFromLocation(location) {\n    this.scrollToAnchor(getAnchor(location));\n  }\n\n  scrollToElement(element) {\n    element.scrollIntoView();\n  }\n\n  focusElement(element) {\n    if (element instanceof HTMLElement) {\n      if (element.hasAttribute(\"tabindex\")) {\n        element.focus();\n      } else {\n        element.setAttribute(\"tabindex\", \"-1\");\n        element.focus();\n        element.removeAttribute(\"tabindex\");\n      }\n    }\n  }\n\n  scrollToPosition({ x, y }) {\n    this.scrollRoot.scrollTo(x, y);\n  }\n\n  scrollToTop() {\n    this.scrollToPosition({ x: 0, y: 0 });\n  }\n\n  get scrollRoot() {\n    return window\n  }\n\n  // Rendering\n\n  async render(renderer) {\n    const { isPreview, shouldRender, newSnapshot: snapshot } = renderer;\n    if (shouldRender) {\n      try {\n        this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n        this.renderer = renderer;\n        await this.prepareToRenderSnapshot(renderer);\n\n        const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n        const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement };\n        const immediateRender = this.delegate.allowsImmediateRender(snapshot, isPreview, 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 {\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.respondsToEventTarget(event.target)) {\n      this.clickEvent = event;\n    } else {\n      delete this.clickEvent;\n    }\n  }\n\n  linkClicked = (event) => {\n    if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n      if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n        this.clickEvent.preventDefault();\n        event.preventDefault();\n        this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n      }\n    }\n    delete this.clickEvent;\n  }\n\n  willVisit = (_event) => {\n    delete this.clickEvent;\n  }\n\n  respondsToEventTarget(target) {\n    const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n    return element && element.closest(\"turbo-frame, html\") == this.element\n  }\n}\n\nclass LinkClickObserver {\n  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 = this.findLinkFromClickTarget(target);\n      if (link && doesNotTargetIFrame(link)) {\n        const location = this.getLocationForLink(link);\n        if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n          event.preventDefault();\n          this.delegate.followedLinkToLocation(link, location);\n        }\n      }\n    }\n  }\n\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  findLinkFromClickTarget(target) {\n    return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\")\n  }\n\n  getLocationForLink(link) {\n    return expandURL(link.getAttribute(\"href\") || \"\")\n  }\n}\n\nfunction doesNotTargetIFrame(anchor) {\n  if (anchor.hasAttribute(\"target\")) {\n    for (const element of document.getElementsByName(anchor.target)) {\n      if (element instanceof HTMLIFrameElement) return false\n    }\n\n    return true\n  } else {\n    return true\n  }\n}\n\nclass FormLinkClickObserver {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.linkInterceptor = new LinkClickObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\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  constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n    this.currentSnapshot = currentSnapshot;\n    this.newSnapshot = newSnapshot;\n    this.isPreview = isPreview;\n    this.willRender = willRender;\n    this.renderElement = renderElement;\n    this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n  }\n\n  get shouldRender() {\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    const element = this.connectedSnapshot.firstAutofocusableElement;\n    if (element) {\n      element.focus();\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\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    if (this.cspNonce) {\n      element.nonce = this.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  get cspNonce() {\n    return getMetaContent(\"csp-nonce\")\n  }\n}\n\nclass HeadSnapshot extends Snapshot {\n  detailsByOuterHTML = this.children\n    .filter((element) => !elementIsNoscript(element))\n    .map((element) => elementWithoutNonce(element))\n    .reduce((result, element) => {\n      const { outerHTML } = element;\n      const details =\n        outerHTML in result\n          ? result[outerHTML]\n          : {\n              type: elementType(element),\n              tracked: elementIsTracked(element),\n              elements: []\n            };\n      return {\n        ...result,\n        [outerHTML]: {\n          ...details,\n          elements: [...details.elements, element]\n        }\n      }\n    }, {})\n\n  get trackedElementSignature() {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n      .join(\"\")\n  }\n\n  getScriptElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n  }\n\n  getStylesheetElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n  }\n\n  getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n      .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n      .filter(({ type }) => type == matchedType)\n      .map(({ elements: [element] }) => element)\n  }\n\n  get provisionalElements() {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n      if (type == null && !tracked) {\n        return [...result, ...elements]\n      } else if (elements.length > 1) {\n        return [...result, ...elements.slice(1)]\n      } else {\n        return result\n      }\n    }, [])\n  }\n\n  getMetaValue(name) {\n    const element = this.findMetaElementByName(name);\n    return element ? element.getAttribute(\"content\") : null\n  }\n\n  findMetaElementByName(name) {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const {\n        elements: [element]\n      } = this.detailsByOuterHTML[outerHTML];\n      return elementIsMetaElementWithName(element, name) ? element : result\n    }, undefined | undefined)\n  }\n}\n\nfunction elementType(element) {\n  if (elementIsScript(element)) {\n    return \"script\"\n  } else if (elementIsStylesheet(element)) {\n    return \"stylesheet\"\n  }\n}\n\nfunction elementIsTracked(element) {\n  return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n  const tagName = element.localName;\n  return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n  const tagName = element.localName;\n  return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n  const tagName = element.localName;\n  return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n  const tagName = element.localName;\n  return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n  if (element.hasAttribute(\"nonce\")) {\n    element.setAttribute(\"nonce\", \"\");\n  }\n\n  return element\n}\n\nclass PageSnapshot extends Snapshot {\n  static fromHTMLString(html = \"\") {\n    return this.fromDocument(parseHTMLDocument(html))\n  }\n\n  static fromElement(element) {\n    return this.fromDocument(element.ownerDocument)\n  }\n\n  static fromDocument({ documentElement, body, head }) {\n    return new this(documentElement, body, new HeadSnapshot(head))\n  }\n\n  constructor(documentElement, body, headSnapshot) {\n    super(body);\n    this.documentElement = documentElement;\n    this.headSnapshot = headSnapshot;\n  }\n\n  clone() {\n    const clonedElement = this.element.cloneNode(true);\n\n    const selectElements = this.element.querySelectorAll(\"select\");\n    const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n    for (const [index, source] of selectElements.entries()) {\n      const clone = clonedSelectElements[index];\n      for (const option of clone.selectedOptions) option.selected = false;\n      for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n    }\n\n    for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n      clonedPasswordInput.value = \"\";\n    }\n\n    return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n  }\n\n  get lang() {\n    return this.documentElement.getAttribute(\"lang\")\n  }\n\n  get headElement() {\n    return this.headSnapshot.element\n  }\n\n  get rootLocation() {\n    const root = this.getSetting(\"root\") ?? \"/\";\n    return expandURL(root)\n  }\n\n  get cacheControlValue() {\n    return this.getSetting(\"cache-control\")\n  }\n\n  get isPreviewable() {\n    return this.cacheControlValue != \"no-preview\"\n  }\n\n  get isCacheable() {\n    return this.cacheControlValue != \"no-cache\"\n  }\n\n  get isVisitable() {\n    return this.getSetting(\"visit-control\") != \"reload\"\n  }\n\n  get prefersViewTransitions() {\n    return this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\"\n  }\n\n  get shouldMorphPage() {\n    return this.getSetting(\"refresh-method\") === \"morph\"\n  }\n\n  get shouldPreserveScrollPosition() {\n    return this.getSetting(\"refresh-scroll\") === \"preserve\"\n  }\n\n  // Private\n\n  getSetting(name) {\n    return this.headSnapshot.getMetaValue(`turbo-${name}`)\n  }\n}\n\nclass ViewTransitioner {\n  #viewTransitionStarted = false\n  #lastOperation = Promise.resolve()\n\n  renderChange(useViewTransition, render) {\n    if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n      this.#viewTransitionStarted = true;\n      this.#lastOperation = this.#lastOperation.then(async () => {\n        await document.startViewTransition(render).finished;\n      });\n    } else {\n      this.#lastOperation = this.#lastOperation.then(render);\n    }\n\n    return this.#lastOperation\n  }\n\n  get viewTransitionsAvailable() {\n    return document.startViewTransition\n  }\n}\n\nconst defaultOptions = {\n  action: \"advance\",\n  historyChanged: false,\n  visitCachedSnapshot: () => {},\n  willRender: true,\n  updateHistory: true,\n  shouldCacheSnapshot: true,\n  acceptsStreamResponse: false\n};\n\nconst TimingMetric = {\n  visitStart: \"visitStart\",\n  requestStart: \"requestStart\",\n  requestEnd: \"requestEnd\",\n  visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n  initialized: \"initialized\",\n  started: \"started\",\n  canceled: \"canceled\",\n  failed: \"failed\",\n  completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n  networkFailure: 0,\n  timeoutFailure: -1,\n  contentTypeMismatch: -2\n};\n\nconst Direction = {\n  advance: \"forward\",\n  restore: \"back\",\n  replace: \"none\"\n};\n\nclass Visit {\n  identifier = uuid() // Required by turbo-ios\n  timingMetrics = {}\n\n  followedRedirect = false\n  historyChanged = false\n  scrolled = false\n  shouldCacheSnapshot = true\n  acceptsStreamResponse = false\n  snapshotCached = false\n  state = VisitState.initialized\n  viewTransitioner = new ViewTransitioner()\n\n  constructor(delegate, location, restorationIdentifier, options = {}) {\n    this.delegate = delegate;\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier || uuid();\n\n    const {\n      action,\n      historyChanged,\n      referrer,\n      snapshot,\n      snapshotHTML,\n      response,\n      visitCachedSnapshot,\n      willRender,\n      updateHistory,\n      shouldCacheSnapshot,\n      acceptsStreamResponse,\n      direction\n    } = {\n      ...defaultOptions,\n      ...options\n    };\n    this.action = action;\n    this.historyChanged = historyChanged;\n    this.referrer = referrer;\n    this.snapshot = snapshot;\n    this.snapshotHTML = snapshotHTML;\n    this.response = response;\n    this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n    this.visitCachedSnapshot = visitCachedSnapshot;\n    this.willRender = willRender;\n    this.updateHistory = updateHistory;\n    this.scrolled = !willRender;\n    this.shouldCacheSnapshot = shouldCacheSnapshot;\n    this.acceptsStreamResponse = acceptsStreamResponse;\n    this.direction = direction || Direction[action];\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  get restorationData() {\n    return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n  }\n\n  get silent() {\n    return this.isSamePage\n  }\n\n  start() {\n    if (this.state == VisitState.initialized) {\n      this.recordTimingMetric(TimingMetric.visitStart);\n      this.state = VisitState.started;\n      this.adapter.visitStarted(this);\n      this.delegate.visitStarted(this);\n    }\n  }\n\n  cancel() {\n    if (this.state == VisitState.started) {\n      if (this.request) {\n        this.request.cancel();\n      }\n      this.cancelRender();\n      this.state = VisitState.canceled;\n    }\n  }\n\n  complete() {\n    if (this.state == VisitState.started) {\n      this.recordTimingMetric(TimingMetric.visitEnd);\n      this.state = VisitState.completed;\n      this.followRedirect();\n\n      if (!this.followedRedirect) {\n        this.adapter.visitCompleted(this);\n        this.delegate.visitCompleted(this);\n      }\n    }\n  }\n\n  fail() {\n    if (this.state == VisitState.started) {\n      this.state = VisitState.failed;\n      this.adapter.visitFailed(this);\n      this.delegate.visitCompleted(this);\n    }\n  }\n\n  changeHistory() {\n    if (!this.historyChanged && this.updateHistory) {\n      const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action;\n      const method = getHistoryMethodForAction(actionForHistory);\n      this.history.update(method, this.location, this.restorationIdentifier);\n      this.historyChanged = true;\n    }\n  }\n\n  issueRequest() {\n    if (this.hasPreloadedResponse()) {\n      this.simulateRequest();\n    } else if (this.shouldIssueRequest() && !this.request) {\n      this.request = new FetchRequest(this, FetchMethod.get, this.location);\n      this.request.perform();\n    }\n  }\n\n  simulateRequest() {\n    if (this.response) {\n      this.startRequest();\n      this.recordResponse();\n      this.finishRequest();\n    }\n  }\n\n  startRequest() {\n    this.recordTimingMetric(TimingMetric.requestStart);\n    this.adapter.visitRequestStarted(this);\n  }\n\n  recordResponse(response = this.response) {\n    this.response = response;\n    if (response) {\n      const { statusCode } = response;\n      if (isSuccessful(statusCode)) {\n        this.adapter.visitRequestCompleted(this);\n      } else {\n        this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n      }\n    }\n  }\n\n  finishRequest() {\n    this.recordTimingMetric(TimingMetric.requestEnd);\n    this.adapter.visitRequestFinished(this);\n  }\n\n  loadResponse() {\n    if (this.response) {\n      const { statusCode, responseHTML } = this.response;\n      this.render(async () => {\n        if (this.shouldCacheSnapshot) this.cacheSnapshot();\n        if (this.view.renderPromise) await this.view.renderPromise;\n\n        if (isSuccessful(statusCode) && responseHTML != null) {\n          const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n          await this.renderPageSnapshot(snapshot, false);\n\n          this.adapter.visitRendered(this);\n          this.complete();\n        } else {\n          await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n          this.adapter.visitRendered(this);\n          this.fail();\n        }\n      });\n    }\n  }\n\n  getCachedSnapshot() {\n    const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n    if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n      if (this.action == \"restore\" || snapshot.isPreviewable) {\n        return snapshot\n      }\n    }\n  }\n\n  getPreloadedSnapshot() {\n    if (this.snapshotHTML) {\n      return PageSnapshot.fromHTMLString(this.snapshotHTML)\n    }\n  }\n\n  hasCachedSnapshot() {\n    return this.getCachedSnapshot() != null\n  }\n\n  loadCachedSnapshot() {\n    const snapshot = this.getCachedSnapshot();\n    if (snapshot) {\n      const isPreview = this.shouldIssueRequest();\n      this.render(async () => {\n        this.cacheSnapshot();\n        if (this.isSamePage) {\n          this.adapter.visitRendered(this);\n        } else {\n          if (this.view.renderPromise) await this.view.renderPromise;\n\n          await this.renderPageSnapshot(snapshot, isPreview);\n\n          this.adapter.visitRendered(this);\n          if (!isPreview) {\n            this.complete();\n          }\n        }\n      });\n    }\n  }\n\n  followRedirect() {\n    if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) {\n      this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n        action: \"replace\",\n        response: this.response,\n        shouldCacheSnapshot: false,\n        willRender: false\n      });\n      this.followedRedirect = true;\n    }\n  }\n\n  goToSamePageAnchor() {\n    if (this.isSamePage) {\n      this.render(async () => {\n        this.cacheSnapshot();\n        this.performScroll();\n        this.changeHistory();\n        this.adapter.visitRendered(this);\n      });\n    }\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (this.acceptsStreamResponse) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted() {\n    this.startRequest();\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {}\n\n  async requestSucceededWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.redirectedToLocation = response.redirected ? response.location : undefined;\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  async requestFailedWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  requestErrored(_request, _error) {\n    this.recordResponse({\n      statusCode: SystemStatusCode.networkFailure,\n      redirected: false\n    });\n  }\n\n  requestFinished() {\n    this.finishRequest();\n  }\n\n  // Scrolling\n\n  performScroll() {\n    if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n      if (this.action == \"restore\") {\n        this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n      } else {\n        this.scrollToAnchor() || this.view.scrollToTop();\n      }\n      if (this.isSamePage) {\n        this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n      }\n\n      this.scrolled = true;\n    }\n  }\n\n  scrollToRestoredPosition() {\n    const { scrollPosition } = this.restorationData;\n    if (scrollPosition) {\n      this.view.scrollToPosition(scrollPosition);\n      return true\n    }\n  }\n\n  scrollToAnchor() {\n    const anchor = getAnchor(this.location);\n    if (anchor != null) {\n      this.view.scrollToAnchor(anchor);\n      return true\n    }\n  }\n\n  // Instrumentation\n\n  recordTimingMetric(metric) {\n    this.timingMetrics[metric] = new Date().getTime();\n  }\n\n  getTimingMetrics() {\n    return { ...this.timingMetrics }\n  }\n\n  // Private\n\n  getHistoryMethodForAction(action) {\n    switch (action) {\n      case \"replace\":\n        return history.replaceState\n      case \"advance\":\n      case \"restore\":\n        return history.pushState\n    }\n  }\n\n  hasPreloadedResponse() {\n    return typeof this.response == \"object\"\n  }\n\n  shouldIssueRequest() {\n    if (this.isSamePage) {\n      return false\n    } else if (this.action == \"restore\") {\n      return !this.hasCachedSnapshot()\n    } else {\n      return this.willRender\n    }\n  }\n\n  cacheSnapshot() {\n    if (!this.snapshotCached) {\n      this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n      this.snapshotCached = true;\n    }\n  }\n\n  async render(callback) {\n    this.cancelRender();\n    this.frame = await nextRepaint();\n    await callback();\n    delete this.frame;\n  }\n\n  async renderPageSnapshot(snapshot, isPreview) {\n    await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n      await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n      this.performScroll();\n    });\n  }\n\n  cancelRender() {\n    if (this.frame) {\n      cancelAnimationFrame(this.frame);\n      delete this.frame;\n    }\n  }\n}\n\nfunction isSuccessful(statusCode) {\n  return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n  progressBar = new ProgressBar()\n\n  constructor(session) {\n    this.session = session;\n  }\n\n  visitProposedToLocation(location, options) {\n    if (locationIsVisitable(location, this.navigator.rootLocation)) {\n      this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n    } else {\n      window.location.href = location.toString();\n    }\n  }\n\n  visitStarted(visit) {\n    this.location = visit.location;\n    visit.loadCachedSnapshot();\n    visit.issueRequest();\n    visit.goToSamePageAnchor();\n  }\n\n  visitRequestStarted(visit) {\n    this.progressBar.setValue(0);\n    if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n      this.showVisitProgressBarAfterDelay();\n    } else {\n      this.showProgressBar();\n    }\n  }\n\n  visitRequestCompleted(visit) {\n    visit.loadResponse();\n  }\n\n  visitRequestFailedWithStatusCode(visit, statusCode) {\n    switch (statusCode) {\n      case SystemStatusCode.networkFailure:\n      case SystemStatusCode.timeoutFailure:\n      case SystemStatusCode.contentTypeMismatch:\n        return this.reload({\n          reason: \"request_failed\",\n          context: {\n            statusCode\n          }\n        })\n      default:\n        return visit.loadResponse()\n    }\n  }\n\n  visitRequestFinished(_visit) {}\n\n  visitCompleted(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  pageInvalidated(reason) {\n    this.reload(reason);\n  }\n\n  visitFailed(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  visitRendered(_visit) {}\n\n  // Form Submission Delegate\n\n  formSubmissionStarted(_formSubmission) {\n    this.progressBar.setValue(0);\n    this.showFormProgressBarAfterDelay();\n  }\n\n  formSubmissionFinished(_formSubmission) {\n    this.progressBar.setValue(1);\n    this.hideFormProgressBar();\n  }\n\n  // Private\n\n  showVisitProgressBarAfterDelay() {\n    this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n  }\n\n  hideVisitProgressBar() {\n    this.progressBar.hide();\n    if (this.visitProgressBarTimeout != null) {\n      window.clearTimeout(this.visitProgressBarTimeout);\n      delete this.visitProgressBarTimeout;\n    }\n  }\n\n  showFormProgressBarAfterDelay() {\n    if (this.formProgressBarTimeout == null) {\n      this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\n  }\n\n  hideFormProgressBar() {\n    this.progressBar.hide();\n    if (this.formProgressBarTimeout != null) {\n      window.clearTimeout(this.formProgressBarTimeout);\n      delete this.formProgressBarTimeout;\n    }\n  }\n\n  showProgressBar = () => {\n    this.progressBar.show();\n  }\n\n  reload(reason) {\n    dispatch(\"turbo:reload\", { detail: reason });\n\n    window.location.href = this.location?.toString() || window.location.href;\n  }\n\n  get navigator() {\n    return this.session.navigator\n  }\n}\n\nclass CacheObserver {\n  selector = \"[data-turbo-temporary]\"\n  deprecatedSelector = \"[data-turbo-cache=false]\"\n\n  started = false\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  removeTemporaryElements = (_event) => {\n    for (const element of this.temporaryElements) {\n      element.remove();\n    }\n  }\n\n  get temporaryElements() {\n    return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation]\n  }\n\n  get temporaryElementsWithDeprecation() {\n    const elements = document.querySelectorAll(this.deprecatedSelector);\n\n    if (elements.length) {\n      console.warn(\n        `The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`\n      );\n    }\n\n    return [...elements]\n  }\n}\n\nclass FrameRedirector {\n  constructor(session, element) {\n    this.session = session;\n    this.element = element;\n    this.linkInterceptor = new LinkInterceptor(this, element);\n    this.formSubmitObserver = new FormSubmitObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n    this.formSubmitObserver.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n    this.formSubmitObserver.stop();\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldRedirect(element)\n  }\n\n  linkClickIntercepted(element, url, event) {\n    const frame = this.#findFrameElement(element);\n    if (frame) {\n      frame.delegate.linkClickIntercepted(element, url, event);\n    }\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return (\n      element.closest(\"turbo-frame\") == null &&\n      this.#shouldSubmit(element, submitter) &&\n      this.#shouldRedirect(element, submitter)\n    )\n  }\n\n  formSubmitted(element, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n    if (frame) {\n      frame.delegate.formSubmitted(element, submitter);\n    }\n  }\n\n  #shouldSubmit(form, submitter) {\n    const action = getAction$1(form, submitter);\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const rootLocation = expandURL(meta?.content ?? \"/\");\n\n    return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n  }\n\n  #shouldRedirect(element, submitter) {\n    const isNavigatable =\n      element instanceof HTMLFormElement\n        ? this.session.submissionIsNavigatable(element, submitter)\n        : this.session.elementIsNavigatable(element);\n\n    if (isNavigatable) {\n      const frame = this.#findFrameElement(element, submitter);\n      return frame ? frame != element.closest(\"turbo-frame\") : false\n    } else {\n      return false\n    }\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = submitter?.getAttribute(\"data-turbo-frame\") || element.getAttribute(\"data-turbo-frame\");\n    if (id && id != \"_top\") {\n      const frame = this.element.querySelector(`#${id}:not([disabled])`);\n      if (frame instanceof FrameElement) {\n        return frame\n      }\n    }\n  }\n}\n\nclass History {\n  location\n  restorationIdentifier = uuid()\n  restorationData = {}\n  started = false\n  pageLoaded = false\n  currentIndex = 0\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"popstate\", this.onPopState, false);\n      addEventListener(\"load\", this.onPageLoad, false);\n      this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n      this.started = true;\n      this.replace(new URL(window.location.href));\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"popstate\", this.onPopState, false);\n      removeEventListener(\"load\", this.onPageLoad, false);\n      this.started = false;\n    }\n  }\n\n  push(location, restorationIdentifier) {\n    this.update(history.pushState, location, restorationIdentifier);\n  }\n\n  replace(location, restorationIdentifier) {\n    this.update(history.replaceState, location, restorationIdentifier);\n  }\n\n  update(method, location, restorationIdentifier = uuid()) {\n    if (method === history.pushState) ++this.currentIndex;\n\n    const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n    method.call(history, state, \"\", location.href);\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier;\n  }\n\n  // Restoration data\n\n  getRestorationDataForIdentifier(restorationIdentifier) {\n    return this.restorationData[restorationIdentifier] || {}\n  }\n\n  updateRestorationData(additionalData) {\n    const { restorationIdentifier } = this;\n    const restorationData = this.restorationData[restorationIdentifier];\n    this.restorationData[restorationIdentifier] = {\n      ...restorationData,\n      ...additionalData\n    };\n  }\n\n  // Scroll restoration\n\n  assumeControlOfScrollRestoration() {\n    if (!this.previousScrollRestoration) {\n      this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n      history.scrollRestoration = \"manual\";\n    }\n  }\n\n  relinquishControlOfScrollRestoration() {\n    if (this.previousScrollRestoration) {\n      history.scrollRestoration = this.previousScrollRestoration;\n      delete this.previousScrollRestoration;\n    }\n  }\n\n  // Event handlers\n\n  onPopState = (event) => {\n    if (this.shouldHandlePopState()) {\n      const { turbo } = event.state || {};\n      if (turbo) {\n        this.location = new URL(window.location.href);\n        const { restorationIdentifier, restorationIndex } = turbo;\n        this.restorationIdentifier = restorationIdentifier;\n        const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n        this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n        this.currentIndex = restorationIndex;\n      }\n    }\n  }\n\n  onPageLoad = async (_event) => {\n    await nextMicrotask();\n    this.pageLoaded = true;\n  }\n\n  // Private\n\n  shouldHandlePopState() {\n    // Safari dispatches a popstate event after window's load event, ignore it\n    return this.pageIsLoaded()\n  }\n\n  pageIsLoaded() {\n    return this.pageLoaded || document.readyState == \"complete\"\n  }\n}\n\nclass Navigator {\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  proposeVisit(location, options = {}) {\n    if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n      this.delegate.visitProposedToLocation(location, options);\n    }\n  }\n\n  startVisit(locatable, restorationIdentifier, options = {}) {\n    this.stop();\n    this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n      referrer: this.location,\n      ...options\n    });\n    this.currentVisit.start();\n  }\n\n  submitForm(form, submitter) {\n    this.stop();\n    this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n    this.formSubmission.start();\n  }\n\n  stop() {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n      delete this.formSubmission;\n    }\n\n    if (this.currentVisit) {\n      this.currentVisit.cancel();\n      delete this.currentVisit;\n    }\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get rootLocation() {\n    return this.view.snapshot.rootLocation\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted(formSubmission) {\n    // Not all adapters implement formSubmissionStarted\n    if (typeof this.adapter.formSubmissionStarted === \"function\") {\n      this.adapter.formSubmissionStarted(formSubmission);\n    }\n  }\n\n  async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n    if (formSubmission == this.formSubmission) {\n      const responseHTML = await fetchResponse.responseHTML;\n      if (responseHTML) {\n        const shouldCacheSnapshot = formSubmission.isSafe;\n        if (!shouldCacheSnapshot) {\n          this.view.clearSnapshotCache();\n        }\n\n        const { statusCode, redirected } = fetchResponse;\n        const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n        const visitOptions = {\n          action,\n          shouldCacheSnapshot,\n          response: { statusCode, responseHTML, redirected }\n        };\n        this.proposeVisit(fetchResponse.location, visitOptions);\n      }\n    }\n  }\n\n  async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    const responseHTML = await fetchResponse.responseHTML;\n\n    if (responseHTML) {\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n      if (fetchResponse.serverError) {\n        await this.view.renderError(snapshot, this.currentVisit);\n      } else {\n        await this.view.renderPage(snapshot, false, true, this.currentVisit);\n      }\n      if(!snapshot.shouldPreserveScrollPosition) {\n        this.view.scrollToTop();\n      }\n      this.view.clearSnapshotCache();\n    }\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished(formSubmission) {\n    // Not all adapters implement formSubmissionFinished\n    if (typeof this.adapter.formSubmissionFinished === \"function\") {\n      this.adapter.formSubmissionFinished(formSubmission);\n    }\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    this.delegate.visitStarted(visit);\n  }\n\n  visitCompleted(visit) {\n    this.delegate.visitCompleted(visit);\n  }\n\n  locationWithActionIsSamePage(location, action) {\n    const anchor = getAnchor(location);\n    const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n    const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n\n    return (\n      action !== \"replace\" &&\n      getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n      (isRestorationToTop || (anchor != null && anchor !== currentAnchor))\n    )\n  }\n\n  visitScrolledToSamePageLocation(oldURL, newURL) {\n    this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n  }\n\n  // Visits\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  #getActionForFormSubmission(formSubmission, fetchResponse) {\n    const { submitter, formElement } = formSubmission;\n    return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n  }\n\n  #getDefaultAction(fetchResponse) {\n    const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n    return sameLocationRedirect ? \"replace\" : \"advance\"\n  }\n}\n\nconst PageStage = {\n  initial: 0,\n  loading: 1,\n  interactive: 2,\n  complete: 3\n};\n\nclass PageObserver {\n  stage = PageStage.initial\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      if (this.stage == PageStage.initial) {\n        this.stage = PageStage.loading;\n      }\n      document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n      addEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n      removeEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = false;\n    }\n  }\n\n  interpretReadyState = () => {\n    const { readyState } = this;\n    if (readyState == \"interactive\") {\n      this.pageIsInteractive();\n    } else if (readyState == \"complete\") {\n      this.pageIsComplete();\n    }\n  }\n\n  pageIsInteractive() {\n    if (this.stage == PageStage.loading) {\n      this.stage = PageStage.interactive;\n      this.delegate.pageBecameInteractive();\n    }\n  }\n\n  pageIsComplete() {\n    this.pageIsInteractive();\n    if (this.stage == PageStage.interactive) {\n      this.stage = PageStage.complete;\n      this.delegate.pageLoaded();\n    }\n  }\n\n  pageWillUnload = () => {\n    this.delegate.pageWillUnload();\n  }\n\n  get readyState() {\n    return document.readyState\n  }\n}\n\nclass ScrollObserver {\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"scroll\", this.onScroll, false);\n      this.onScroll();\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"scroll\", this.onScroll, false);\n      this.started = false;\n    }\n  }\n\n  onScroll = () => {\n    this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n  }\n\n  // Private\n\n  updatePosition(position) {\n    this.delegate.scrollPositionChanged(position);\n  }\n}\n\nclass StreamMessageRenderer {\n  render({ fragment }) {\n    Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n      withAutofocusFromFragment(fragment, () => {\n        withPreservedFocus(() => {\n          document.documentElement.appendChild(fragment);\n        });\n      });\n    });\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement, newPermanentElement) {\n    newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n  }\n\n  leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n  const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n  const permanentElementMap = {};\n  for (const permanentElementInDocument of permanentElementsInDocument) {\n    const { id } = permanentElementInDocument;\n\n    for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n      const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n      if (elementInStream) {\n        permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n      }\n    }\n  }\n\n  return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n  const generatedID = `turbo-stream-autofocus-${uuid()}`;\n  const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n  const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n  let willAutofocusId = null;\n\n  if (elementWithAutofocus) {\n    if (elementWithAutofocus.id) {\n      willAutofocusId = elementWithAutofocus.id;\n    } else {\n      willAutofocusId = generatedID;\n    }\n\n    elementWithAutofocus.id = willAutofocusId;\n  }\n\n  callback();\n  await nextRepaint();\n\n  const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n  if (hasNoActiveElement && willAutofocusId) {\n    const elementToAutofocus = document.getElementById(willAutofocusId);\n\n    if (elementIsFocusable(elementToAutofocus)) {\n      elementToAutofocus.focus();\n    }\n    if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n      elementToAutofocus.removeAttribute(\"id\");\n    }\n  }\n}\n\nasync function withPreservedFocus(callback) {\n  const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n  const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n  if (restoreFocusTo) {\n    const elementToFocus = document.getElementById(restoreFocusTo);\n\n    if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n      elementToFocus.focus();\n    }\n  }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n  for (const streamElement of nodeListOfStreamElements) {\n    const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n    if (elementWithAutofocus) return elementWithAutofocus\n  }\n\n  return null\n}\n\nclass StreamObserver {\n  sources = new Set()\n  #started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.#started) {\n      this.#started = true;\n      addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  stop() {\n    if (this.#started) {\n      this.#started = false;\n      removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  connectStreamSource(source) {\n    if (!this.streamSourceIsConnected(source)) {\n      this.sources.add(source);\n      source.addEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  disconnectStreamSource(source) {\n    if (this.streamSourceIsConnected(source)) {\n      this.sources.delete(source);\n      source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  streamSourceIsConnected(source) {\n    return this.sources.has(source)\n  }\n\n  inspectFetchResponse = (event) => {\n    const response = fetchResponseFromEvent(event);\n    if (response && fetchResponseIsStream(response)) {\n      event.preventDefault();\n      this.receiveMessageResponse(response);\n    }\n  }\n\n  receiveMessageEvent = (event) => {\n    if (this.#started && typeof event.data == \"string\") {\n      this.receiveMessageHTML(event.data);\n    }\n  }\n\n  async receiveMessageResponse(response) {\n    const html = await response.responseHTML;\n    if (html) {\n      this.receiveMessageHTML(html);\n    }\n  }\n\n  receiveMessageHTML(html) {\n    this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n  }\n}\n\nfunction fetchResponseFromEvent(event) {\n  const fetchResponse = event.detail?.fetchResponse;\n  if (fetchResponse instanceof FetchResponse) {\n    return fetchResponse\n  }\n}\n\nfunction fetchResponseIsStream(response) {\n  const contentType = response.contentType ?? \"\";\n  return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const { documentElement, body } = document;\n\n    documentElement.replaceChild(newElement, body);\n  }\n\n  async render() {\n    this.replaceHeadAndBody();\n    this.activateScriptElements();\n  }\n\n  replaceHeadAndBody() {\n    const { documentElement, head } = document;\n    documentElement.replaceChild(this.newHead, head);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n\n  activateScriptElements() {\n    for (const replaceableElement of this.scriptElements) {\n      const parentNode = replaceableElement.parentNode;\n      if (parentNode) {\n        const element = activateScriptElement(replaceableElement);\n        parentNode.replaceChild(element, replaceableElement);\n      }\n    }\n  }\n\n  get newHead() {\n    return this.newSnapshot.headSnapshot.element\n  }\n\n  get scriptElements() {\n    return document.documentElement.querySelectorAll(\"script\")\n  }\n}\n\nlet EMPTY_SET = new Set();\n\n//=============================================================================\n// Core Morphing Algorithm - morph, morphNormalizedContent, morphOldNodeTo, morphChildren\n//=============================================================================\nfunction morph(oldNode, newContent, config = {}) {\n\n    if (oldNode instanceof Document) {\n        oldNode = oldNode.documentElement;\n    }\n\n    if (typeof newContent === 'string') {\n        newContent = parseContent(newContent);\n    }\n\n    let normalizedContent = normalizeContent(newContent);\n\n    let ctx = createMorphContext(oldNode, normalizedContent, config);\n\n    return morphNormalizedContent(oldNode, normalizedContent, ctx);\n}\n\nfunction morphNormalizedContent(oldNode, normalizedNewContent, ctx) {\n    if (ctx.head.block) {\n        let oldHead = oldNode.querySelector('head');\n        let newHead = normalizedNewContent.querySelector('head');\n        if (oldHead && newHead) {\n            let promises = handleHeadElement(newHead, oldHead, ctx);\n            // when head promises resolve, call morph again, ignoring the head tag\n            Promise.all(promises).then(function () {\n                morphNormalizedContent(oldNode, normalizedNewContent, Object.assign(ctx, {\n                    head: {\n                        block: false,\n                        ignore: true\n                    }\n                }));\n            });\n            return;\n        }\n    }\n\n    if (ctx.morphStyle === \"innerHTML\") {\n\n        // innerHTML, so we are only updating the children\n        morphChildren(normalizedNewContent, oldNode, ctx);\n        return oldNode.children;\n\n    } else if (ctx.morphStyle === \"outerHTML\" || ctx.morphStyle == null) {\n        // otherwise find the best element match in the new content, morph that, and merge its siblings\n        // into either side of the best match\n        let bestMatch = findBestNodeMatch(normalizedNewContent, oldNode, ctx);\n\n        // stash the siblings that will need to be inserted on either side of the best match\n        let previousSibling = bestMatch?.previousSibling;\n        let nextSibling = bestMatch?.nextSibling;\n\n        // morph it\n        let morphedNode = morphOldNodeTo(oldNode, bestMatch, ctx);\n\n        if (bestMatch) {\n            // if there was a best match, merge the siblings in too and return the\n            // whole bunch\n            return insertSiblings(previousSibling, morphedNode, nextSibling);\n        } else {\n            // otherwise nothing was added to the DOM\n            return []\n        }\n    } else {\n        throw \"Do not understand how to morph style \" + ctx.morphStyle;\n    }\n}\n\n\n\n/**\n * @param oldNode root node to merge content into\n * @param newContent new content to merge\n * @param ctx the merge context\n * @returns {Element} the element that ended up in the DOM\n */\nfunction morphOldNodeTo(oldNode, newContent, ctx) {\n    if (ctx.ignoreActive && oldNode === document.activeElement) ; else if (newContent == null) {\n        if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return;\n\n        oldNode.remove();\n        ctx.callbacks.afterNodeRemoved(oldNode);\n        return null;\n    } else if (!isSoftMatch(oldNode, newContent)) {\n        if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return;\n        if (ctx.callbacks.beforeNodeAdded(newContent) === false) return;\n\n        oldNode.parentElement.replaceChild(newContent, oldNode);\n        ctx.callbacks.afterNodeAdded(newContent);\n        ctx.callbacks.afterNodeRemoved(oldNode);\n        return newContent;\n    } else {\n        if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) return;\n\n        if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (oldNode instanceof HTMLHeadElement && ctx.head.style !== \"morph\") {\n            handleHeadElement(newContent, oldNode, ctx);\n        } else {\n            syncNodeFrom(newContent, oldNode);\n            morphChildren(newContent, oldNode, ctx);\n        }\n        ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n        return oldNode;\n    }\n}\n\n/**\n * This is the core algorithm for matching up children.  The idea is to use id sets to try to match up\n * nodes as faithfully as possible.  We greedily match, which allows us to keep the algorithm fast, but\n * by using id sets, we are able to better match up with content deeper in the DOM.\n *\n * Basic algorithm is, for each node in the new content:\n *\n * - if we have reached the end of the old parent, append the new content\n * - if the new content has an id set match with the current insertion point, morph\n * - search for an id set match\n * - if id set match found, morph\n * - otherwise search for a \"soft\" match\n * - if a soft match is found, morph\n * - otherwise, prepend the new node before the current insertion point\n *\n * The two search algorithms terminate if competing node matches appear to outweigh what can be achieved\n * with the current node.  See findIdSetMatch() and findSoftMatch() for details.\n *\n * @param {Element} newParent the parent element of the new content\n * @param {Element } oldParent the old content that we are merging the new content into\n * @param ctx the merge context\n */\nfunction morphChildren(newParent, oldParent, ctx) {\n\n    let nextNewChild = newParent.firstChild;\n    let insertionPoint = oldParent.firstChild;\n    let newChild;\n\n    // run through all the new content\n    while (nextNewChild) {\n\n        newChild = nextNewChild;\n        nextNewChild = newChild.nextSibling;\n\n        // if we are at the end of the exiting parent's children, just append\n        if (insertionPoint == null) {\n            if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n            oldParent.appendChild(newChild);\n            ctx.callbacks.afterNodeAdded(newChild);\n            removeIdsFromConsideration(ctx, newChild);\n            continue;\n        }\n\n        // if the current node has an id set match then morph\n        if (isIdSetMatch(newChild, insertionPoint, ctx)) {\n            morphOldNodeTo(insertionPoint, newChild, ctx);\n            insertionPoint = insertionPoint.nextSibling;\n            removeIdsFromConsideration(ctx, newChild);\n            continue;\n        }\n\n        // otherwise search forward in the existing old children for an id set match\n        let idSetMatch = findIdSetMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n        // if we found a potential match, remove the nodes until that point and morph\n        if (idSetMatch) {\n            insertionPoint = removeNodesBetween(insertionPoint, idSetMatch, ctx);\n            morphOldNodeTo(idSetMatch, newChild, ctx);\n            removeIdsFromConsideration(ctx, newChild);\n            continue;\n        }\n\n        // no id set match found, so scan forward for a soft match for the current node\n        let softMatch = findSoftMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n        // if we found a soft match for the current node, morph\n        if (softMatch) {\n            insertionPoint = removeNodesBetween(insertionPoint, softMatch, ctx);\n            morphOldNodeTo(softMatch, newChild, ctx);\n            removeIdsFromConsideration(ctx, newChild);\n            continue;\n        }\n\n        // abandon all hope of morphing, just insert the new child before the insertion point\n        // and move on\n        if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n        oldParent.insertBefore(newChild, insertionPoint);\n        ctx.callbacks.afterNodeAdded(newChild);\n        removeIdsFromConsideration(ctx, newChild);\n    }\n\n    // remove any remaining old nodes that didn't match up with new content\n    while (insertionPoint !== null) {\n\n        let tempNode = insertionPoint;\n        insertionPoint = insertionPoint.nextSibling;\n        removeNode(tempNode, ctx);\n    }\n}\n\n//=============================================================================\n// Attribute Syncing Code\n//=============================================================================\n\n/**\n * syncs a given node with another node, copying over all attributes and\n * inner element state from the 'from' node to the 'to' node\n *\n * @param {Element} from the element to copy attributes & state from\n * @param {Element} to the element to copy attributes & state to\n */\nfunction syncNodeFrom(from, to) {\n    let type = from.nodeType;\n\n    // if is an element type, sync the attributes from the\n    // new node into the new node\n    if (type === 1 /* element type */) {\n        const fromAttributes = from.attributes;\n        const toAttributes = to.attributes;\n        for (const fromAttribute of fromAttributes) {\n            if (to.getAttribute(fromAttribute.name) !== fromAttribute.value) {\n                to.setAttribute(fromAttribute.name, fromAttribute.value);\n            }\n        }\n        for (const toAttribute of toAttributes) {\n            if (!from.hasAttribute(toAttribute.name)) {\n                to.removeAttribute(toAttribute.name);\n            }\n        }\n    }\n\n    // sync text nodes\n    if (type === 8 /* comment */ || type === 3 /* text */) {\n        if (to.nodeValue !== from.nodeValue) {\n            to.nodeValue = from.nodeValue;\n        }\n    }\n\n    // 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    // sync input value\n    if (from instanceof HTMLInputElement &&\n        to instanceof HTMLInputElement &&\n        from.type !== 'file') {\n\n        to.value = from.value || '';\n        syncAttribute(from, to, 'value');\n\n        // sync boolean attributes\n        syncAttribute(from, to, 'checked');\n        syncAttribute(from, to, 'disabled');\n    } else if (from instanceof HTMLOptionElement) {\n        syncAttribute(from, to, 'selected');\n    } else if (from instanceof HTMLTextAreaElement && to instanceof HTMLTextAreaElement) {\n        let fromValue = from.value;\n        let toValue = to.value;\n        if (fromValue !== toValue) {\n            to.value = fromValue;\n        }\n        if (to.firstChild && to.firstChild.nodeValue !== fromValue) {\n            to.firstChild.nodeValue = fromValue;\n        }\n    }\n}\n\nfunction syncAttribute(from, to, attributeName) {\n    if (from[attributeName] !== to[attributeName]) {\n        if (from[attributeName]) {\n            to.setAttribute(attributeName, from[attributeName]);\n        } else {\n            to.removeAttribute(attributeName);\n        }\n    }\n}\n\n//=============================================================================\n// the HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n//=============================================================================\nfunction handleHeadElement(newHeadTag, currentHead, ctx) {\n\n    let added = [];\n    let removed = [];\n    let preserved = [];\n    let nodesToAppend = [];\n\n    let headMergeStyle = ctx.head.style;\n\n    // put all new head elements into a Map, by their outerHTML\n    let srcToNewHeadNodes = new Map();\n    for (const newHeadChild of newHeadTag.children) {\n        srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n    }\n\n    // for each elt in the current head\n    for (const currentHeadElt of currentHead.children) {\n\n        // If the current head element is in the map\n        let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n        let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n        let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n        if (inNewContent || isPreserved) {\n            if (isReAppended) {\n                // remove the current version and let the new version replace it and re-execute\n                removed.push(currentHeadElt);\n            } else {\n                // this element already exists and should not be re-appended, so remove it from\n                // the new content map, preserving it in the DOM\n                srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n                preserved.push(currentHeadElt);\n            }\n        } else {\n            if (headMergeStyle === \"append\") {\n                // we are appending and this existing element is not new content\n                // so if and only if it is marked for re-append do we do anything\n                if (isReAppended) {\n                    removed.push(currentHeadElt);\n                    nodesToAppend.push(currentHeadElt);\n                }\n            } else {\n                // if this is a merge, we remove this content since it is not in the new head\n                if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n                    removed.push(currentHeadElt);\n                }\n            }\n        }\n    }\n\n    // Push the remaining new head elements in the Map into the\n    // nodes to append to the head tag\n    nodesToAppend.push(...srcToNewHeadNodes.values());\n\n    let promises = [];\n    for (const newNode of nodesToAppend) {\n        let newElt = document.createRange().createContextualFragment(newNode.outerHTML).firstChild;\n        if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n            if (newElt.href || newElt.src) {\n                let resolve = null;\n                let promise = new Promise(function (_resolve) {\n                    resolve = _resolve;\n                });\n                newElt.addEventListener('load',function() {\n                    resolve();\n                });\n                promises.push(promise);\n            }\n            currentHead.appendChild(newElt);\n            ctx.callbacks.afterNodeAdded(newElt);\n            added.push(newElt);\n        }\n    }\n\n    // remove all removed elements, after we have appended the new elements to avoid\n    // additional network requests for things like style sheets\n    for (const removedElement of removed) {\n        if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n            currentHead.removeChild(removedElement);\n            ctx.callbacks.afterNodeRemoved(removedElement);\n        }\n    }\n\n    ctx.head.afterHeadMorphed(currentHead, {added: added, kept: preserved, removed: removed});\n    return promises;\n}\n\nfunction noOp() {}\n\nfunction createMorphContext(oldNode, newContent, config) {\n    return {\n        target:oldNode,\n        newContent: newContent,\n        config: config,\n        morphStyle : config.morphStyle,\n        ignoreActive : config.ignoreActive,\n        idMap: createIdMap(oldNode, newContent),\n        deadIds: new Set(),\n        callbacks: Object.assign({\n            beforeNodeAdded: noOp,\n            afterNodeAdded : noOp,\n            beforeNodeMorphed: noOp,\n            afterNodeMorphed : noOp,\n            beforeNodeRemoved: noOp,\n            afterNodeRemoved : noOp,\n\n        }, config.callbacks),\n        head: Object.assign({\n            style: 'merge',\n            shouldPreserve : function(elt) {\n                return elt.getAttribute(\"im-preserve\") === \"true\";\n            },\n            shouldReAppend : function(elt) {\n                return elt.getAttribute(\"im-re-append\") === \"true\";\n            },\n            shouldRemove : noOp,\n            afterHeadMorphed : noOp,\n        }, config.head),\n    }\n}\n\nfunction isIdSetMatch(node1, node2, ctx) {\n    if (node1 == null || node2 == null) {\n        return false;\n    }\n    if (node1.nodeType === node2.nodeType && node1.tagName === node2.tagName) {\n        if (node1.id !== \"\" && node1.id === node2.id) {\n            return true;\n        } else {\n            return getIdIntersectionCount(ctx, node1, node2) > 0;\n        }\n    }\n    return false;\n}\n\nfunction isSoftMatch(node1, node2) {\n    if (node1 == null || node2 == null) {\n        return false;\n    }\n    return node1.nodeType === node2.nodeType && node1.tagName === node2.tagName\n}\n\nfunction removeNodesBetween(startInclusive, endExclusive, ctx) {\n    while (startInclusive !== endExclusive) {\n        let tempNode = startInclusive;\n        startInclusive = startInclusive.nextSibling;\n        removeNode(tempNode, ctx);\n    }\n    removeIdsFromConsideration(ctx, endExclusive);\n    return endExclusive.nextSibling;\n}\n\n//=============================================================================\n// Scans forward from the insertionPoint in the old parent looking for a potential id match\n// for the newChild.  We stop if we find a potential id match for the new child OR\n// if the number of potential id matches we are discarding is greater than the\n// potential id matches for the new child\n//=============================================================================\nfunction findIdSetMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n    // max id matches we are willing to discard in our search\n    let newChildPotentialIdCount = getIdIntersectionCount(ctx, newChild, oldParent);\n\n    let potentialMatch = null;\n\n    // only search forward if there is a possibility of an id match\n    if (newChildPotentialIdCount > 0) {\n        let potentialMatch = insertionPoint;\n        // if there is a possibility of an id match, scan forward\n        // keep track of the potential id match count we are discarding (the\n        // newChildPotentialIdCount must be greater than this to make it likely\n        // worth it)\n        let otherMatchCount = 0;\n        while (potentialMatch != null) {\n\n            // If we have an id match, return the current potential match\n            if (isIdSetMatch(newChild, potentialMatch, ctx)) {\n                return potentialMatch;\n            }\n\n            // computer the other potential matches of this new content\n            otherMatchCount += getIdIntersectionCount(ctx, potentialMatch, newContent);\n            if (otherMatchCount > newChildPotentialIdCount) {\n                // if we have more potential id matches in _other_ content, we\n                // do not have a good candidate for an id match, so return null\n                return null;\n            }\n\n            // advanced to the next old content child\n            potentialMatch = potentialMatch.nextSibling;\n        }\n    }\n    return potentialMatch;\n}\n\n//=============================================================================\n// Scans forward from the insertionPoint in the old parent looking for a potential soft match\n// for the newChild.  We stop if we find a potential soft match for the new child OR\n// if we find a potential id match in the old parents children OR if we find two\n// potential soft matches for the next two pieces of new content\n//=============================================================================\nfunction findSoftMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n    let potentialSoftMatch = insertionPoint;\n    let nextSibling = newChild.nextSibling;\n    let siblingSoftMatchCount = 0;\n\n    while (potentialSoftMatch != null) {\n\n        if (getIdIntersectionCount(ctx, potentialSoftMatch, newContent) > 0) {\n            // the current potential soft match has a potential id set match with the remaining new\n            // content so bail out of looking\n            return null;\n        }\n\n        // if we have a soft match with the current node, return it\n        if (isSoftMatch(newChild, potentialSoftMatch)) {\n            return potentialSoftMatch;\n        }\n\n        if (isSoftMatch(nextSibling, potentialSoftMatch)) {\n            // the next new node has a soft match with this node, so\n            // increment the count of future soft matches\n            siblingSoftMatchCount++;\n            nextSibling = nextSibling.nextSibling;\n\n            // If there are two future soft matches, bail to allow the siblings to soft match\n            // so that we don't consume future soft matches for the sake of the current node\n            if (siblingSoftMatchCount >= 2) {\n                return null;\n            }\n        }\n\n        // advanced to the next old content child\n        potentialSoftMatch = potentialSoftMatch.nextSibling;\n    }\n\n    return potentialSoftMatch;\n}\n\nfunction parseContent(newContent) {\n    let parser = new DOMParser();\n\n    // remove svgs to avoid false-positive matches on head, etc.\n    let contentWithSvgsRemoved = newContent.replace(/<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim, '');\n\n    // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n    if (contentWithSvgsRemoved.match(/<\\/html>/) || contentWithSvgsRemoved.match(/<\\/head>/) || contentWithSvgsRemoved.match(/<\\/body>/)) {\n        let content = parser.parseFromString(newContent, \"text/html\");\n        // if it is a full HTML document, return the document itself as the parent container\n        if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n            content.generatedByIdiomorph = true;\n            return content;\n        } else {\n            // otherwise return the html element as the parent container\n            let htmlElement = content.firstChild;\n            if (htmlElement) {\n                htmlElement.generatedByIdiomorph = true;\n                return htmlElement;\n            } else {\n                return null;\n            }\n        }\n    } else {\n        // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n        // deal with touchy tags like tr, tbody, etc.\n        let responseDoc = parser.parseFromString(\"<body><template>\" + newContent + \"</template></body>\", \"text/html\");\n        let content = responseDoc.body.querySelector('template').content;\n        content.generatedByIdiomorph = true;\n        return content\n    }\n}\n\nfunction normalizeContent(newContent) {\n    if (newContent == null) {\n        // noinspection UnnecessaryLocalVariableJS\n        const dummyParent = document.createElement('div');\n        return dummyParent;\n    } else if (newContent.generatedByIdiomorph) {\n        // the template tag created by idiomorph parsing can serve as a dummy parent\n        return newContent;\n    } else if (newContent instanceof Node) {\n        // a single node is added as a child to a dummy parent\n        const dummyParent = document.createElement('div');\n        dummyParent.append(newContent);\n        return dummyParent;\n    } else {\n        // all nodes in the array or HTMLElement collection are consolidated under\n        // a single dummy parent element\n        const dummyParent = document.createElement('div');\n        for (const elt of [...newContent]) {\n            dummyParent.append(elt);\n        }\n        return dummyParent;\n    }\n}\n\nfunction insertSiblings(previousSibling, morphedNode, nextSibling) {\n    let stack = [];\n    let added = [];\n    while (previousSibling != null) {\n        stack.push(previousSibling);\n        previousSibling = previousSibling.previousSibling;\n    }\n    while (stack.length > 0) {\n        let node = stack.pop();\n        added.push(node); // push added preceding siblings on in order and insert\n        morphedNode.parentElement.insertBefore(node, morphedNode);\n    }\n    added.push(morphedNode);\n    while (nextSibling != null) {\n        stack.push(nextSibling);\n        added.push(nextSibling); // here we are going in order, so push on as we scan, rather than add\n        nextSibling = nextSibling.nextSibling;\n    }\n    while (stack.length > 0) {\n        morphedNode.parentElement.insertBefore(stack.pop(), morphedNode.nextSibling);\n    }\n    return added;\n}\n\nfunction findBestNodeMatch(newContent, oldNode, ctx) {\n    let currentElement;\n    currentElement = newContent.firstChild;\n    let bestElement = currentElement;\n    let score = 0;\n    while (currentElement) {\n        let newScore = scoreElement(currentElement, oldNode, ctx);\n        if (newScore > score) {\n            bestElement = currentElement;\n            score = newScore;\n        }\n        currentElement = currentElement.nextSibling;\n    }\n    return bestElement;\n}\n\nfunction scoreElement(node1, node2, ctx) {\n    if (isSoftMatch(node1, node2)) {\n        return .5 + getIdIntersectionCount(ctx, node1, node2);\n    }\n    return 0;\n}\n\nfunction removeNode(tempNode, ctx) {\n    removeIdsFromConsideration(ctx, tempNode);\n    if (ctx.callbacks.beforeNodeRemoved(tempNode) === false) return;\n\n    tempNode.remove();\n    ctx.callbacks.afterNodeRemoved(tempNode);\n}\n\n//=============================================================================\n// ID Set Functions\n//=============================================================================\n\nfunction isIdInConsideration(ctx, id) {\n    return !ctx.deadIds.has(id);\n}\n\nfunction idIsWithinNode(ctx, id, targetNode) {\n    let idSet = ctx.idMap.get(targetNode) || EMPTY_SET;\n    return idSet.has(id);\n}\n\nfunction removeIdsFromConsideration(ctx, node) {\n    let idSet = ctx.idMap.get(node) || EMPTY_SET;\n    for (const id of idSet) {\n        ctx.deadIds.add(id);\n    }\n}\n\nfunction getIdIntersectionCount(ctx, node1, node2) {\n    let sourceSet = ctx.idMap.get(node1) || EMPTY_SET;\n    let matchCount = 0;\n    for (const id of sourceSet) {\n        // a potential match is an id in the source and potentialIdsSet, but\n        // that has not already been merged into the DOM\n        if (isIdInConsideration(ctx, id) && idIsWithinNode(ctx, id, node2)) {\n            ++matchCount;\n        }\n    }\n    return matchCount;\n}\n\n/**\n * A bottom up algorithm that finds all elements with ids inside of the node\n * argument and populates id sets for those nodes and all their parents, generating\n * a set of ids contained within all nodes for the entire hierarchy in the DOM\n *\n * @param node {Element}\n * @param {Map<Node, Set<String>>} idMap\n */\nfunction populateIdMapForNode(node, idMap) {\n    let nodeParent = node.parentElement;\n    // find all elements with an id property\n    let idElements = node.querySelectorAll('[id]');\n    for (const elt of idElements) {\n        let current = elt;\n        // walk up the parent hierarchy of that element, adding the id\n        // of element to the parent's id set\n        while (current !== nodeParent && current != null) {\n            let idSet = idMap.get(current);\n            // if the id set doesn't exist, create it and insert it in the  map\n            if (idSet == null) {\n                idSet = new Set();\n                idMap.set(current, idSet);\n            }\n            idSet.add(elt.id);\n            current = current.parentElement;\n        }\n    }\n}\n\n/**\n * This function computes a map of nodes to all ids contained within that node (inclusive of the\n * node).  This map can be used to ask if two nodes have intersecting sets of ids, which allows\n * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n * to contribute to a parent nodes matching.\n *\n * @param {Element} oldContent  the old content that will be morphed\n * @param {Element} newContent  the new content to morph to\n * @returns {Map<Node, Set<String>>} a map of nodes to id sets for the\n */\nfunction createIdMap(oldContent, newContent) {\n    let idMap = new Map();\n    populateIdMapForNode(oldContent, idMap);\n    populateIdMapForNode(newContent, idMap);\n    return idMap;\n}\n\n//=============================================================================\n// This is what ends up becoming the Idiomorph export\n//=============================================================================\nvar idiomorph = { morph };\n\nclass MorphRenderer extends Renderer {\n  async render() {\n    if (this.willRender) await this.#morphBody();\n  }\n\n  get renderMethod() {\n    return \"morph\"\n  }\n\n  // Private\n\n  async #morphBody() {\n    this.#morphElements(this.currentElement, this.newElement);\n    this.#reloadRemoteFrames();\n\n    dispatch(\"turbo:morph\", {\n      detail: {\n        currentElement: this.currentElement,\n        newElement: this.newElement\n      }\n    });\n  }\n\n  #morphElements(currentElement, newElement, morphStyle = \"outerHTML\") {\n    this.isMorphingTurboFrame = this.#isFrameReloadedWithMorph(currentElement);\n\n    idiomorph.morph(currentElement, newElement, {\n      morphStyle: morphStyle,\n      callbacks: {\n        beforeNodeAdded: this.#shouldAddElement,\n        beforeNodeMorphed: this.#shouldMorphElement,\n        beforeNodeRemoved: this.#shouldRemoveElement\n      }\n    });\n  }\n\n  #shouldAddElement = (node) => {\n    return !(node.id && node.hasAttribute(\"data-turbo-permanent\") && document.getElementById(node.id))\n  }\n\n  #shouldMorphElement = (oldNode, newNode) => {\n    if (oldNode instanceof HTMLElement) {\n      return !oldNode.hasAttribute(\"data-turbo-permanent\") && (this.isMorphingTurboFrame || !this.#isFrameReloadedWithMorph(oldNode))\n    } else {\n      return true\n    }\n  }\n\n  #shouldRemoveElement = (node) => {\n    return this.#shouldMorphElement(node)\n  }\n\n  #reloadRemoteFrames() {\n    this.#remoteFrames().forEach((frame) => {\n      if (this.#isFrameReloadedWithMorph(frame)) {\n        this.#renderFrameWithMorph(frame);\n        frame.reload();\n      }\n    });\n  }\n\n  #renderFrameWithMorph(frame) {\n    frame.addEventListener(\"turbo:before-frame-render\", (event) => {\n      event.detail.render = this.#morphFrameUpdate;\n    }, { once: true });\n  }\n\n  #morphFrameUpdate = (currentElement, newElement) => {\n    dispatch(\"turbo:before-frame-morph\", {\n      target: currentElement,\n      detail: { currentElement, newElement }\n    });\n    this.#morphElements(currentElement, newElement.children, \"innerHTML\");\n  }\n\n  #isFrameReloadedWithMorph(element) {\n    return element.src && element.refresh === \"morph\"\n  }\n\n  #remoteFrames() {\n    return Array.from(document.querySelectorAll('turbo-frame[src]')).filter(frame => {\n      return !frame.closest('[data-turbo-permanent]')\n    })\n  }\n}\n\nclass PageRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    if (document.body && newElement instanceof HTMLBodyElement) {\n      document.body.replaceWith(newElement);\n    } else {\n      document.documentElement.appendChild(newElement);\n    }\n  }\n\n  get shouldRender() {\n    return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n  }\n\n  get reloadReason() {\n    if (!this.newSnapshot.isVisitable) {\n      return {\n        reason: \"turbo_visit_control_is_reload\"\n      }\n    }\n\n    if (!this.trackedElementsAreIdentical) {\n      return {\n        reason: \"tracked_element_mismatch\"\n      }\n    }\n  }\n\n  async prepareToRender() {\n    this.#setLanguage();\n    await this.mergeHead();\n  }\n\n  async render() {\n    if (this.willRender) {\n      await this.replaceBody();\n    }\n  }\n\n  finishRendering() {\n    super.finishRendering();\n    if (!this.isPreview) {\n      this.focusFirstAutofocusableElement();\n    }\n  }\n\n  get currentHeadSnapshot() {\n    return this.currentSnapshot.headSnapshot\n  }\n\n  get newHeadSnapshot() {\n    return this.newSnapshot.headSnapshot\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  #setLanguage() {\n    const { documentElement } = this.currentSnapshot;\n    const { lang } = this.newSnapshot;\n\n    if (lang) {\n      documentElement.setAttribute(\"lang\", lang);\n    } else {\n      documentElement.removeAttribute(\"lang\");\n    }\n  }\n\n  async mergeHead() {\n    const mergedHeadElements = this.mergeProvisionalElements();\n    const newStylesheetElements = this.copyNewHeadStylesheetElements();\n    this.copyNewHeadScriptElements();\n    await mergedHeadElements;\n    await newStylesheetElements;\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  async mergeProvisionalElements() {\n    const newHeadElements = [...this.newHeadProvisionalElements];\n\n    for (const element of this.currentHeadProvisionalElements) {\n      if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n        document.head.removeChild(element);\n      }\n    }\n\n    for (const element of newHeadElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  isCurrentElementInElementList(element, elementList) {\n    for (const [index, newElement] of elementList.entries()) {\n      // if title element...\n      if (element.tagName == \"TITLE\") {\n        if (newElement.tagName != \"TITLE\") {\n          continue\n        }\n        if (element.innerHTML == newElement.innerHTML) {\n          elementList.splice(index, 1);\n          return true\n        }\n      }\n\n      // if any other element...\n      if (newElement.isEqualNode(element)) {\n        elementList.splice(index, 1);\n        return true\n      }\n    }\n\n    return false\n  }\n\n  removeCurrentHeadProvisionalElements() {\n    for (const element of this.currentHeadProvisionalElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  copyNewHeadProvisionalElements() {\n    for (const element of this.newHeadProvisionalElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  activateNewBody() {\n    document.adoptNode(this.newElement);\n    this.activateNewBodyScriptElements();\n  }\n\n  activateNewBodyScriptElements() {\n    for (const inertScriptElement of this.newBodyScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  async assignNewBody() {\n    await this.renderElement(this.currentElement, this.newElement);\n  }\n\n  get 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 SnapshotCache {\n  keys = []\n  snapshots = {}\n\n  constructor(size) {\n    this.size = size;\n  }\n\n  has(location) {\n    return toCacheKey(location) in this.snapshots\n  }\n\n  get(location) {\n    if (this.has(location)) {\n      const snapshot = this.read(location);\n      this.touch(location);\n      return snapshot\n    }\n  }\n\n  put(location, snapshot) {\n    this.write(location, snapshot);\n    this.touch(location);\n    return snapshot\n  }\n\n  clear() {\n    this.snapshots = {};\n  }\n\n  // Private\n\n  read(location) {\n    return this.snapshots[toCacheKey(location)]\n  }\n\n  write(location, snapshot) {\n    this.snapshots[toCacheKey(location)] = snapshot;\n  }\n\n  touch(location) {\n    const key = toCacheKey(location);\n    const index = this.keys.indexOf(key);\n    if (index > -1) this.keys.splice(index, 1);\n    this.keys.unshift(key);\n    this.trim();\n  }\n\n  trim() {\n    for (const key of this.keys.splice(this.size)) {\n      delete this.snapshots[key];\n    }\n  }\n}\n\nclass PageView extends View {\n  snapshotCache = new SnapshotCache(10)\n  lastRenderedLocation = new URL(location.href)\n  forceReloaded = false\n\n  shouldTransitionTo(newSnapshot) {\n    return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions\n  }\n\n  renderPage(snapshot, isPreview = false, willRender = true, visit) {\n    const shouldMorphPage = this.isPageRefresh(visit) && this.snapshot.shouldMorphPage;\n    const rendererClass = shouldMorphPage ? MorphRenderer : PageRenderer;\n\n    const renderer = new rendererClass(this.snapshot, snapshot, PageRenderer.renderElement, 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, ErrorRenderer.renderElement, false);\n    return this.render(renderer)\n  }\n\n  clearSnapshotCache() {\n    this.snapshotCache.clear();\n  }\n\n  async cacheSnapshot(snapshot = this.snapshot) {\n    if (snapshot.isCacheable) {\n      this.delegate.viewWillCacheSnapshot();\n      const { lastRenderedLocation: location } = this;\n      await nextEventLoopTick();\n      const cachedSnapshot = snapshot.clone();\n      this.snapshotCache.put(location, cachedSnapshot);\n      return cachedSnapshot\n    }\n  }\n\n  getCachedSnapshotForLocation(location) {\n    return this.snapshotCache.get(location)\n  }\n\n  isPageRefresh(visit) {\n    return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === \"replace\")\n  }\n\n  shouldPreserveScrollPosition(visit) {\n    return this.isPageRefresh(visit) && this.snapshot.shouldPreserveScrollPosition\n  }\n\n  get snapshot() {\n    return PageSnapshot.fromElement(this.element)\n  }\n}\n\nclass Preloader {\n  selector = \"a[data-turbo-preload]\"\n\n  constructor(delegate, snapshotCache) {\n    this.delegate = delegate;\n    this.snapshotCache = snapshotCache;\n  }\n\n  start() {\n    if (document.readyState === \"loading\") {\n      document.addEventListener(\"DOMContentLoaded\", this.#preloadAll);\n    } else {\n      this.preloadOnLoadLinksForView(document.body);\n    }\n  }\n\n  stop() {\n    document.removeEventListener(\"DOMContentLoaded\", this.#preloadAll);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    for (const link of element.querySelectorAll(this.selector)) {\n      if (this.delegate.shouldPreloadLink(link)) {\n        this.preloadURL(link);\n      }\n    }\n  }\n\n  async preloadURL(link) {\n    const location = new URL(link.href);\n\n    if (this.snapshotCache.has(location)) {\n      return\n    }\n\n    const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams(), link);\n    await fetchRequest.perform();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(fetchRequest) {\n    fetchRequest.headers[\"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  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  drive = true\n  enabled = true\n  progressBarDelay = 500\n  started = false\n  formMode = \"on\"\n\n  constructor(recentRequests) {\n    this.recentRequests = recentRequests;\n    this.preloader = new Preloader(this, this.view.snapshotCache);\n  }\n\n  start() {\n    if (!this.started) {\n      this.pageObserver.start();\n      this.cacheObserver.start();\n      this.formLinkClickObserver.start();\n      this.linkClickObserver.start();\n      this.formSubmitObserver.start();\n      this.scrollObserver.start();\n      this.streamObserver.start();\n      this.frameRedirector.start();\n      this.history.start();\n      this.preloader.start();\n      this.started = true;\n      this.enabled = true;\n    }\n  }\n\n  disable() {\n    this.enabled = false;\n  }\n\n  stop() {\n    if (this.started) {\n      this.pageObserver.stop();\n      this.cacheObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkClickObserver.stop();\n      this.formSubmitObserver.stop();\n      this.scrollObserver.stop();\n      this.streamObserver.stop();\n      this.frameRedirector.stop();\n      this.history.stop();\n      this.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      frameElement.src = location.toString();\n      frameElement.loaded;\n    } else {\n      this.navigator.proposeVisit(expandURL(location), options);\n    }\n  }\n\n  refresh(url, requestId) {\n    const isRecentRequest = requestId && this.recentRequests.has(requestId);\n    if (!isRecentRequest) {\n      this.cache.exemptPageFromPreview();\n      this.visit(url, { action: \"replace\" });\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    this.progressBarDelay = delay;\n  }\n\n  setFormMode(mode) {\n    this.formMode = mode;\n  }\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  // Preloader delegate\n\n  shouldPreloadLink(element) {\n    const isUnsafe = element.hasAttribute(\"data-turbo-method\");\n    const isStream = element.hasAttribute(\"data-turbo-stream\");\n    const frameTarget = element.getAttribute(\"data-turbo-frame\");\n    const frame = frameTarget == \"_top\" ?\n      null :\n      document.getElementById(frameTarget) || findClosestRecursively(element, \"turbo-frame:not([disabled])\");\n\n    if (isUnsafe || isStream || frame instanceof FrameElement) {\n      return false\n    } else {\n      const location = new URL(element.href);\n\n      return this.elementIsNavigatable(element) && locationIsVisitable(location, this.snapshot.rootLocation)\n    }\n  }\n\n  // History delegate\n\n  historyPoppedToLocationWithRestorationIdentifierAndDirection(location, restorationIdentifier, direction) {\n    if (this.enabled) {\n      this.navigator.startVisit(location, restorationIdentifier, {\n        action: \"restore\",\n        historyChanged: true,\n        direction\n      });\n    } else {\n      this.adapter.pageInvalidated({\n        reason: \"turbo_disabled\"\n      });\n    }\n  }\n\n  // Scroll observer delegate\n\n  scrollPositionChanged(position) {\n    this.history.updateRestorationData({ scrollPosition: position });\n  }\n\n  // Form click observer delegate\n\n  willSubmitFormLinkToLocation(link, location) {\n    return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation)\n  }\n\n  submittedFormLinkToLocation() {}\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, event) {\n    return (\n      this.elementIsNavigatable(link) &&\n      locationIsVisitable(location, this.snapshot.rootLocation) &&\n      this.applicationAllowsFollowingLinkToLocation(link, location, event)\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const action = this.getActionForLink(link);\n    const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n\n    this.visit(location.href, { action, acceptsStreamResponse });\n  }\n\n  // Navigator delegate\n\n  allowsVisitingLocationWithAction(location, action) {\n    return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location)\n  }\n\n  visitProposedToLocation(location, options) {\n    extendURLWithDeprecatedProperties(location);\n    this.adapter.visitProposedToLocation(location, options);\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    if (!visit.acceptsStreamResponse) {\n      markAsBusy(document.documentElement);\n      this.view.markVisitDirection(visit.direction);\n    }\n    extendURLWithDeprecatedProperties(visit.location);\n    if (!visit.silent) {\n      this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n    }\n  }\n\n  visitCompleted(visit) {\n    this.view.unmarkVisitDirection();\n    clearBusyState(document.documentElement);\n    this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n  }\n\n  locationWithActionIsSamePage(location, action) {\n    return this.navigator.locationWithActionIsSamePage(location, action)\n  }\n\n  visitScrolledToSamePageLocation(oldURL, newURL) {\n    this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return (\n      this.submissionIsNavigatable(form, submitter) &&\n      locationIsVisitable(expandURL(action), this.snapshot.rootLocation)\n    )\n  }\n\n  formSubmitted(form, submitter) {\n    this.navigator.submitForm(form, submitter);\n  }\n\n  // Page observer delegate\n\n  pageBecameInteractive() {\n    this.view.lastRenderedLocation = this.location;\n    this.notifyApplicationAfterPageLoad();\n  }\n\n  pageLoaded() {\n    this.history.assumeControlOfScrollRestoration();\n  }\n\n  pageWillUnload() {\n    this.history.relinquishControlOfScrollRestoration();\n  }\n\n  // Stream observer delegate\n\n  receivedMessageFromStream(message) {\n    this.renderStreamMessage(message);\n  }\n\n  // Page view delegate\n\n  viewWillCacheSnapshot() {\n    if (!this.navigator.currentVisit?.silent) {\n      this.notifyApplicationBeforeCachingSnapshot();\n    }\n  }\n\n  allowsImmediateRender({ element }, isPreview, options) {\n    const event = this.notifyApplicationBeforeRender(element, isPreview, 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(isPreview, 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, isPreview, options) {\n    return dispatch(\"turbo:before-render\", {\n      detail: { newBody, isPreview, ...options },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterRender(isPreview, renderMethod) {\n    return dispatch(\"turbo:render\", { detail: { isPreview, renderMethod } })\n  }\n\n  notifyApplicationAfterPageLoad(timing = {}) {\n    return dispatch(\"turbo:load\", {\n      detail: { url: this.location.href, timing }\n    })\n  }\n\n  notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n    dispatchEvent(\n      new HashChangeEvent(\"hashchange\", {\n        oldURL: oldURL.toString(),\n        newURL: newURL.toString()\n      })\n    );\n  }\n\n  notifyApplicationAfterFrameLoad(frame) {\n    return dispatch(\"turbo:frame-load\", { target: frame })\n  }\n\n  notifyApplicationAfterFrameRender(fetchResponse, frame) {\n    return dispatch(\"turbo:frame-render\", {\n      detail: { fetchResponse },\n      target: frame,\n      cancelable: true\n    })\n  }\n\n  // Helpers\n\n  submissionIsNavigatable(form, submitter) {\n    if (this.formMode == \"off\") {\n      return false\n    } else {\n      const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n      if (this.formMode == \"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 (this.drive || withinFrame) {\n      // Element is navigatable by default, unless `data-turbo=\"false\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") != \"false\"\n      } else {\n        return true\n      }\n    } else {\n      // Element isn't navigatable by default, unless `data-turbo=\"true\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") == \"true\"\n      } else {\n        return false\n      }\n    }\n  }\n\n  // Private\n\n  getActionForLink(link) {\n    return getVisitAction(link) || \"advance\"\n  }\n\n  get snapshot() {\n    return this.view.snapshot\n  }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url) {\n  Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n  absoluteURL: {\n    get() {\n      return this.toString()\n    }\n  }\n};\n\nconst session = new Session(recentRequests);\nconst { cache, navigator: navigator$1 } = session;\n\n/**\n * Starts the main session.\n * This initialises any necessary observers such as those to monitor\n * link interactions.\n */\nfunction start() {\n  session.start();\n}\n\n/**\n * Registers an adapter for the main session.\n *\n * @param adapter Adapter to register\n */\nfunction registerAdapter(adapter) {\n  session.registerAdapter(adapter);\n}\n\n/**\n * Performs an application visit to the given location.\n *\n * @param location Location to visit (a URL or path)\n * @param options Options to apply\n * @param options.action Type of history navigation to apply (\"restore\",\n * \"replace\" or \"advance\")\n * @param options.historyChanged Specifies whether the browser history has\n * already been changed for this visit or not\n * @param options.referrer Specifies the referrer of this visit such that\n * navigations to the same page will not result in a new history entry.\n * @param options.snapshotHTML Cached snapshot to render\n * @param options.response Response of the specified location\n */\nfunction visit(location, options) {\n  session.visit(location, options);\n}\n\n/**\n * Connects a stream source to the main session.\n *\n * @param source Stream source to connect\n */\nfunction connectStreamSource(source) {\n  session.connectStreamSource(source);\n}\n\n/**\n * Disconnects a stream source from the main session.\n *\n * @param source Stream source to disconnect\n */\nfunction disconnectStreamSource(source) {\n  session.disconnectStreamSource(source);\n}\n\n/**\n * Renders a stream message to the main session by appending it to the\n * current document.\n *\n * @param message Message to render\n */\nfunction renderStreamMessage(message) {\n  session.renderStreamMessage(message);\n}\n\n/**\n * Removes all entries from the Turbo Drive page cache.\n * Call this when state has changed on the server that may affect cached pages.\n *\n * @deprecated since version 7.2.0 in favor of `Turbo.cache.clear()`\n */\nfunction clearCache() {\n  console.warn(\n    \"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  session.clearCache();\n}\n\n/**\n * Sets the delay after which the progress bar will appear during navigation.\n *\n * The progress bar appears after 500ms by default.\n *\n * Note that this method has no effect when used with the iOS or Android\n * adapters.\n *\n * @param delay Time to delay in milliseconds\n */\nfunction setProgressBarDelay(delay) {\n  session.setProgressBarDelay(delay);\n}\n\nfunction setConfirmMethod(confirmMethod) {\n  FormSubmission.confirmMethod = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n  session.setFormMode(mode);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  navigator: navigator$1,\n  session: session,\n  cache: cache,\n  PageRenderer: PageRenderer,\n  PageSnapshot: PageSnapshot,\n  FrameRenderer: FrameRenderer,\n  fetch: fetchWithTurboHeaders,\n  start: start,\n  registerAdapter: registerAdapter,\n  visit: visit,\n  connectStreamSource: connectStreamSource,\n  disconnectStreamSource: disconnectStreamSource,\n  renderStreamMessage: renderStreamMessage,\n  clearCache: clearCache,\n  setProgressBarDelay: setProgressBarDelay,\n  setConfirmMethod: setConfirmMethod,\n  setFormMode: setFormMode\n});\n\nclass TurboFrameMissingError extends Error {}\n\nclass FrameController {\n  fetchResponseLoaded = (_fetchResponse) => Promise.resolve()\n  #currentFetchRequest = null\n  #resolveVisitPromise = () => {}\n  #connected = false\n  #hasBeenLoaded = false\n  #ignoredAttributes = new Set()\n  action = null\n\n  constructor(element) {\n    this.element = element;\n    this.view = new FrameView(this, this.element);\n    this.appearanceObserver = new AppearanceObserver(this, this.element);\n    this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n    this.linkInterceptor = new LinkInterceptor(this, this.element);\n    this.restorationIdentifier = uuid();\n    this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n  }\n\n  // Frame delegate\n\n  connect() {\n    if (!this.#connected) {\n      this.#connected = true;\n      if (this.loadingStyle == FrameLoadingStyle.lazy) {\n        this.appearanceObserver.start();\n      } else {\n        this.#loadSourceURL();\n      }\n      this.formLinkClickObserver.start();\n      this.linkInterceptor.start();\n      this.formSubmitObserver.start();\n    }\n  }\n\n  disconnect() {\n    if (this.#connected) {\n      this.#connected = false;\n      this.appearanceObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkInterceptor.stop();\n      this.formSubmitObserver.stop();\n    }\n  }\n\n  disabledChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.eager) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLChanged() {\n    if (this.#isIgnoringChangesTo(\"src\")) return\n\n    if (this.element.isConnected) {\n      this.complete = false;\n    }\n\n    if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLReloaded() {\n    const { src } = this.element;\n    this.#ignoringChangesToAttribute(\"complete\", () => {\n      this.element.removeAttribute(\"complete\");\n    });\n    this.element.src = null;\n    this.element.src = src;\n    return this.element.loaded\n  }\n\n  completeChanged() {\n    if (this.#isIgnoringChangesTo(\"complete\")) return\n\n    this.#loadSourceURL();\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.fetchResponseLoaded = () => Promise.resolve();\n    }\n  }\n\n  // Appearance observer delegate\n\n  elementAppearedInViewport(element) {\n    this.proposeVisitIfNavigatedWithAction(element, element);\n    this.#loadSourceURL();\n  }\n\n  // Form link click observer delegate\n\n  willSubmitFormLinkToLocation(link) {\n    return this.#shouldInterceptNavigation(link)\n  }\n\n  submittedFormLinkToLocation(link, _location, form) {\n    const frame = this.#findFrameElement(link);\n    if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldInterceptNavigation(element)\n  }\n\n  linkClickIntercepted(element, location) {\n    this.#navigateFrame(element, location);\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return element.closest(\"turbo-frame\") == this.element && this.#shouldInterceptNavigation(element, submitter)\n  }\n\n  formSubmitted(element, submitter) {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n    }\n\n    this.formSubmission = new FormSubmission(this, element, submitter);\n    const { fetchRequest } = this.formSubmission;\n    this.prepareRequest(fetchRequest);\n    this.formSubmission.start();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    request.headers[\"Turbo-Frame\"] = this.id;\n\n    if (this.currentNavigationElement?.hasAttribute(\"data-turbo-stream\")) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    markAsBusy(this.element);\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {\n    this.#resolveVisitPromise();\n  }\n\n  async requestSucceededWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  async requestFailedWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  requestErrored(request, error) {\n    console.error(error);\n    this.#resolveVisitPromise();\n  }\n\n  requestFinished(_request) {\n    clearBusyState(this.element);\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted({ formElement }) {\n    markAsBusy(formElement, this.#findFrameElement(formElement));\n  }\n\n  formSubmissionSucceededWithResponse(formSubmission, response) {\n    const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\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 }, _isPreview, options) {\n    const event = dispatch(\"turbo:before-frame-render\", {\n      target: this.element,\n      detail: { newFrame, ...options },\n      cancelable: true\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\n    if (newFrameElement) {\n      const snapshot = new Snapshot(newFrameElement);\n      const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n      if (this.view.renderPromise) 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, element, submitter);\n\n    this.#withCurrentNavigationElement(element, () => {\n      frame.src = url;\n    });\n  }\n\n  proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n    this.action = getVisitAction(submitter, element, frame);\n\n    if (this.action) {\n      const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n      const { visitCachedSnapshot } = frame.delegate;\n\n      frame.delegate.fetchResponseLoaded = async (fetchResponse) => {\n        if (frame.src) {\n          const { statusCode, redirected } = fetchResponse;\n          const responseHTML = await fetchResponse.responseHTML;\n          const response = { statusCode, redirected, responseHTML };\n          const options = {\n            response,\n            visitCachedSnapshot,\n            willRender: false,\n            updateHistory: false,\n            restorationIdentifier: this.restorationIdentifier,\n            snapshot: pageSnapshot\n          };\n\n          if (this.action) options.action = this.action;\n\n          session.visit(frame.src, options);\n        }\n      };\n    }\n  }\n\n  changeHistory() {\n    if (this.action) {\n      const method = getHistoryMethodForAction(this.action);\n      session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n    }\n  }\n\n  async #handleUnvisitableFrameResponse(fetchResponse) {\n    console.warn(\n      `The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`\n    );\n\n    await this.#visitResponse(fetchResponse.response);\n  }\n\n  #willHandleFrameMissingFromResponse(fetchResponse) {\n    this.element.setAttribute(\"complete\", \"\");\n\n    const response = fetchResponse.response;\n    const visit = async (url, options) => {\n      if (url instanceof Response) {\n        this.#visitResponse(url);\n      } else {\n        session.visit(url, options);\n      }\n    };\n\n    const event = dispatch(\"turbo:frame-missing\", {\n      target: this.element,\n      detail: { response, visit },\n      cancelable: true\n    });\n\n    return !event.defaultPrevented\n  }\n\n  #handleFrameMissingFromResponse(fetchResponse) {\n    this.view.missing();\n    this.#throwFrameMissingError(fetchResponse);\n  }\n\n  #throwFrameMissingError(fetchResponse) {\n    const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n    throw new TurboFrameMissingError(message)\n  }\n\n  async #visitResponse(response) {\n    const wrapped = new FetchResponse(response);\n    const responseHTML = await wrapped.responseHTML;\n    const { location, redirected, statusCode } = wrapped;\n\n    return session.visit(location, { response: { redirected, statusCode, responseHTML } })\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n    return getFrameElementById(id) ?? this.element\n  }\n\n  async extractForeignFrameElement(container) {\n    let element;\n    const id = CSS.escape(this.id);\n\n    try {\n      element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n      if (element) {\n        return element\n      }\n\n      element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n      if (element) {\n        await element.loaded;\n        return await this.extractForeignFrameElement(element)\n      }\n    } catch (error) {\n      console.error(error);\n      return new FrameElement()\n    }\n\n    return null\n  }\n\n  #formActionIsVisitable(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return locationIsVisitable(expandURL(action), this.rootLocation)\n  }\n\n  #shouldInterceptNavigation(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n    if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter)) {\n      return false\n    }\n\n    if (!this.enabled || id == \"_top\") {\n      return false\n    }\n\n    if (id) {\n      const frameElement = getFrameElementById(id);\n      if (frameElement) {\n        return !frameElement.disabled\n      }\n    }\n\n    if (!session.elementIsNavigatable(element)) {\n      return false\n    }\n\n    if (submitter && !session.elementIsNavigatable(submitter)) {\n      return false\n    }\n\n    return true\n  }\n\n  // Computed properties\n\n  get id() {\n    return this.element.id\n  }\n\n  get enabled() {\n    return !this.element.disabled\n  }\n\n  get sourceURL() {\n    if (this.element.src) {\n      return this.element.src\n    }\n  }\n\n  set sourceURL(sourceURL) {\n    this.#ignoringChangesToAttribute(\"src\", () => {\n      this.element.src = sourceURL ?? null;\n    });\n  }\n\n  get loadingStyle() {\n    return this.element.loading\n  }\n\n  get isLoading() {\n    return this.formSubmission !== undefined || this.#resolveVisitPromise() !== undefined\n  }\n\n  get complete() {\n    return this.element.hasAttribute(\"complete\")\n  }\n\n  set complete(value) {\n    this.#ignoringChangesToAttribute(\"complete\", () => {\n      if (value) {\n        this.element.setAttribute(\"complete\", \"\");\n      } else {\n        this.element.removeAttribute(\"complete\");\n      }\n    });\n  }\n\n  get isActive() {\n    return this.element.isActive && this.#connected\n  }\n\n  get rootLocation() {\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const root = meta?.content ?? \"/\";\n    return expandURL(root)\n  }\n\n  #isIgnoringChangesTo(attributeName) {\n    return this.#ignoredAttributes.has(attributeName)\n  }\n\n  #ignoringChangesToAttribute(attributeName, callback) {\n    this.#ignoredAttributes.add(attributeName);\n    callback();\n    this.#ignoredAttributes.delete(attributeName);\n  }\n\n  #withCurrentNavigationElement(element, callback) {\n    this.currentNavigationElement = element;\n    callback();\n    delete this.currentNavigationElement;\n  }\n}\n\nfunction getFrameElementById(id) {\n  if (id != null) {\n    const element = document.getElementById(id);\n    if (element instanceof FrameElement) {\n      return element\n    }\n  }\n}\n\nfunction activateElement(element, currentURL) {\n  if (element) {\n    const src = element.getAttribute(\"src\");\n    if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n      throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`)\n    }\n    if (element.ownerDocument !== document) {\n      element = document.importNode(element, true);\n    }\n\n    if (element instanceof FrameElement) {\n      element.connectedCallback();\n      element.disconnectedCallback();\n      return element\n    }\n  }\n}\n\nconst StreamActions = {\n  after() {\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e.nextSibling));\n  },\n\n  append() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.append(this.templateContent));\n  },\n\n  before() {\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e));\n  },\n\n  prepend() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.prepend(this.templateContent));\n  },\n\n  remove() {\n    this.targetElements.forEach((e) => e.remove());\n  },\n\n  replace() {\n    this.targetElements.forEach((e) => e.replaceWith(this.templateContent));\n  },\n\n  update() {\n    this.targetElements.forEach((targetElement) => {\n      targetElement.innerHTML = \"\";\n      targetElement.append(this.templateContent);\n    });\n  },\n\n  refresh() {\n    session.refresh(this.baseURI, this.requestId);\n  }\n};\n\n// <turbo-stream action=replace target=id><template>...\n\n/**\n * Renders updates to the page from a stream of messages.\n *\n * Using the `action` attribute, this can be configured one of four ways:\n *\n * - `append` - appends the result to the container\n * - `prepend` - prepends the result to the container\n * - `replace` - replaces the contents of the container\n * - `remove` - removes the container\n * - `before` - inserts the result before the target\n * - `after` - inserts the result after the target\n *\n * @customElement turbo-stream\n * @example\n *   <turbo-stream action=\"append\" target=\"dom_id\">\n *     <template>\n *       Content to append to container designated with the dom_id.\n *     </template>\n *   </turbo-stream>\n */\nclass StreamElement extends HTMLElement {\n  static async renderElement(newElement) {\n    await newElement.performAction();\n  }\n\n  async connectedCallback() {\n    try {\n      await this.render();\n    } catch (error) {\n      console.error(error);\n    } finally {\n      this.disconnect();\n    }\n  }\n\n  async render() {\n    return (this.renderPromise ??= (async () => {\n      const event = this.beforeRenderEvent;\n\n      if (this.dispatchEvent(event)) {\n        await nextRepaint();\n        await event.detail.render(this);\n      }\n    })())\n  }\n\n  disconnect() {\n    try {\n      this.remove();\n      // eslint-disable-next-line no-empty\n    } catch {}\n  }\n\n  /**\n   * Removes duplicate children (by ID)\n   */\n  removeDuplicateTargetChildren() {\n    this.duplicateChildren.forEach((c) => c.remove());\n  }\n\n  /**\n   * Gets the list of duplicate children (i.e. those with the same ID)\n   */\n  get duplicateChildren() {\n    const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n    const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.id).map((c) => c.id);\n\n    return existingChildren.filter((c) => newChildrenIds.includes(c.id))\n  }\n\n  /**\n   * Gets the action function to be performed.\n   */\n  get performAction() {\n    if (this.action) {\n      const actionFunction = StreamActions[this.action];\n      if (actionFunction) {\n        return actionFunction\n      }\n      this.#raise(\"unknown action\");\n    }\n    this.#raise(\"action attribute is missing\");\n  }\n\n  /**\n   * Gets the target elements which the template will be rendered to.\n   */\n  get targetElements() {\n    if (this.target) {\n      return this.targetElementsById\n    } else if (this.targets) {\n      return this.targetElementsByQuery\n    } else {\n      this.#raise(\"target or targets attribute is missing\");\n    }\n  }\n\n  /**\n   * Gets the contents of the main `<template>`.\n   */\n  get templateContent() {\n    return this.templateElement.content.cloneNode(true)\n  }\n\n  /**\n   * Gets the main `<template>` used for rendering\n   */\n  get templateElement() {\n    if (this.firstElementChild === null) {\n      const template = this.ownerDocument.createElement(\"template\");\n      this.appendChild(template);\n      return template\n    } else if (this.firstElementChild instanceof HTMLTemplateElement) {\n      return this.firstElementChild\n    }\n    this.#raise(\"first child element must be a <template> element\");\n  }\n\n  /**\n   * Gets the current action.\n   */\n  get action() {\n    return this.getAttribute(\"action\")\n  }\n\n  /**\n   * Gets the current target (an element ID) to which the result will\n   * be rendered.\n   */\n  get target() {\n    return this.getAttribute(\"target\")\n  }\n\n  /**\n   * Gets the current \"targets\" selector (a CSS selector)\n   */\n  get targets() {\n    return this.getAttribute(\"targets\")\n  }\n\n  /**\n   * Reads the request-id attribute\n   */\n  get requestId() {\n    return this.getAttribute(\"request-id\")\n  }\n\n  #raise(message) {\n    throw new Error(`${this.description}: ${message}`)\n  }\n\n  get description() {\n    return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? \"<turbo-stream>\"\n  }\n\n  get beforeRenderEvent() {\n    return new CustomEvent(\"turbo:before-stream-render\", {\n      bubbles: true,\n      cancelable: true,\n      detail: { newStream: this, render: StreamElement.renderElement }\n    })\n  }\n\n  get targetElementsById() {\n    const element = this.ownerDocument?.getElementById(this.target);\n\n    if (element !== null) {\n      return [element]\n    } else {\n      return []\n    }\n  }\n\n  get targetElementsByQuery() {\n    const elements = this.ownerDocument?.querySelectorAll(this.targets);\n\n    if (elements.length !== 0) {\n      return Array.prototype.slice.call(elements)\n    } else {\n      return []\n    }\n  }\n}\n\nclass StreamSourceElement extends HTMLElement {\n  streamSource = null\n\n  connectedCallback() {\n    this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n\n    connectStreamSource(this.streamSource);\n  }\n\n  disconnectedCallback() {\n    if (this.streamSource) {\n      this.streamSource.close();\n\n      disconnectStreamSource(this.streamSource);\n    }\n  }\n\n  get src() {\n    return this.getAttribute(\"src\") || \"\"\n  }\n}\n\nFrameElement.delegateConstructor = FrameController;\n\nif (customElements.get(\"turbo-frame\") === undefined) {\n  customElements.define(\"turbo-frame\", FrameElement);\n}\n\nif (customElements.get(\"turbo-stream\") === undefined) {\n  customElements.define(\"turbo-stream\", StreamElement);\n}\n\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n  customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n  let element = document.currentScript;\n  if (!element) return\n  if (element.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n  element = element.parentElement;\n  while (element) {\n    if (element == document.body) {\n      return console.warn(\n        unindent`\n        You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n        Load your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n        For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n        \u2014\u2014\n        Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n      `,\n        element.outerHTML\n      )\n    }\n\n    element = element.parentElement;\n  }\n})();\n\nwindow.Turbo = { ...Turbo, StreamActions };\nstart();\n\nexport { FetchEnctype, FetchMethod, FetchRequest, FetchResponse, FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, connectStreamSource, disconnectStreamSource, fetchWithTurboHeaders as fetch, fetchEnctypeFromString, fetchMethodFromString, isSafe, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n", "let consumer\n\nexport async function getConsumer() {\n  return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n  return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n  const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n  return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n  const { subscriptions } = await getConsumer()\n  return subscriptions.create(channel, mixin)\n}\n", "// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n    if (!obj || typeof obj !== 'object') return obj;\n    if (obj instanceof Date || obj instanceof RegExp) return obj;\n    if (Array.isArray(obj)) return obj.map(walk);\n    return Object.keys(obj).reduce(function (acc, key) {\n        var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n            return '_' + x.toLowerCase();\n        });\n        acc[camel] = walk(obj[key]);\n        return acc;\n    }, {});\n};", "import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n  async connectedCallback() {\n    connectStreamSource(this)\n    this.subscription = await subscribeTo(this.channel, {\n      received: this.dispatchMessageEvent.bind(this),\n      connected: this.subscriptionConnected.bind(this),\n      disconnected: this.subscriptionDisconnected.bind(this)\n    })\n  }\n\n  disconnectedCallback() {\n    disconnectStreamSource(this)\n    if (this.subscription) this.subscription.unsubscribe()\n  }\n\n  dispatchMessageEvent(data) {\n    const event = new MessageEvent(\"message\", { data })\n    return this.dispatchEvent(event)\n  }\n\n  subscriptionConnected() {\n    this.setAttribute(\"connected\", \"\")\n  }\n\n  subscriptionDisconnected() {\n    this.removeAttribute(\"connected\")\n  }\n\n  get channel() {\n    const channel = this.getAttribute(\"channel\")\n    const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n    return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n  }\n}\n\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n  customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n}\n", "export function encodeMethodIntoRequestBody(event) {\n  if (event.target instanceof HTMLFormElement) {\n    const { target: form, detail: { fetchOptions } } = event\n\n    form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n      const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n      const method = determineFetchMethod(submitter, body, form)\n\n      if (!/get/i.test(method)) {\n        if (/post/i.test(method)) {\n          body.delete(\"_method\")\n        } else {\n          body.set(\"_method\", method)\n        }\n\n        fetchOptions.method = \"post\"\n      }\n    }, { once: true })\n  }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n  const formMethod = determineFormMethod(submitter)\n  const overrideMethod = body.get(\"_method\")\n  const method = form.getAttribute(\"method\") || \"get\"\n\n  if (typeof formMethod == \"string\") {\n    return formMethod\n  } else if (typeof overrideMethod == \"string\") {\n    return overrideMethod\n  } else {\n    return method\n  }\n}\n\nfunction determineFormMethod(submitter) {\n  if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n    // 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", "var sparkMd5 = {\n  exports: {}\n};\n\n(function(module, exports) {\n  (function(factory) {\n    {\n      module.exports = factory();\n    }\n  })((function(undefined$1) {\n    var hex_chr = [ \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\" ];\n    function md5cycle(x, k) {\n      var a = x[0], b = x[1], c = x[2], d = x[3];\n      a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[10] - 42063 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b ^ c ^ d) + k[5] - 378558 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      x[0] = a + x[0] | 0;\n      x[1] = b + x[1] | 0;\n      x[2] = c + x[2] | 0;\n      x[3] = d + x[3] | 0;\n    }\n    function md5blk(s) {\n      var md5blks = [], i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n      }\n      return md5blks;\n    }\n    function md5blk_array(a) {\n      var md5blks = [], i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n      }\n      return md5blks;\n    }\n    function md51(s) {\n      var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk(s.substring(i - 64, i)));\n      }\n      s = s.substring(i - 64);\n      length = s.length;\n      tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function md51_array(a) {\n      var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n      }\n      a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n      length = a.length;\n      tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= a[i] << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function rhex(n) {\n      var s = \"\", j;\n      for (j = 0; j < 4; j += 1) {\n        s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n      }\n      return s;\n    }\n    function hex(x) {\n      var i;\n      for (i = 0; i < x.length; i += 1) {\n        x[i] = rhex(x[i]);\n      }\n      return x.join(\"\");\n    }\n    if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n    if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n      (function() {\n        function clamp(val, length) {\n          val = val | 0 || 0;\n          if (val < 0) {\n            return Math.max(val + length, 0);\n          }\n          return Math.min(val, length);\n        }\n        ArrayBuffer.prototype.slice = function(from, to) {\n          var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n          if (to !== undefined$1) {\n            end = clamp(to, length);\n          }\n          if (begin > end) {\n            return new ArrayBuffer(0);\n          }\n          num = end - begin;\n          target = new ArrayBuffer(num);\n          targetArray = new Uint8Array(target);\n          sourceArray = new Uint8Array(this, begin, num);\n          targetArray.set(sourceArray);\n          return target;\n        };\n      })();\n    }\n    function toUtf8(str) {\n      if (/[\\u0080-\\uFFFF]/.test(str)) {\n        str = unescape(encodeURIComponent(str));\n      }\n      return str;\n    }\n    function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n      var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n      for (i = 0; i < length; i += 1) {\n        arr[i] = str.charCodeAt(i);\n      }\n      return returnUInt8Array ? arr : buff;\n    }\n    function arrayBuffer2Utf8Str(buff) {\n      return String.fromCharCode.apply(null, new Uint8Array(buff));\n    }\n    function concatenateArrayBuffers(first, second, returnUInt8Array) {\n      var result = new Uint8Array(first.byteLength + second.byteLength);\n      result.set(new Uint8Array(first));\n      result.set(new Uint8Array(second), first.byteLength);\n      return returnUInt8Array ? result : result.buffer;\n    }\n    function hexToBinaryString(hex) {\n      var bytes = [], length = hex.length, x;\n      for (x = 0; x < length - 1; x += 2) {\n        bytes.push(parseInt(hex.substr(x, 2), 16));\n      }\n      return String.fromCharCode.apply(String, bytes);\n    }\n    function SparkMD5() {\n      this.reset();\n    }\n    SparkMD5.prototype.append = function(str) {\n      this.appendBinary(toUtf8(str));\n      return this;\n    };\n    SparkMD5.prototype.appendBinary = function(contents) {\n      this._buff += contents;\n      this._length += contents.length;\n      var length = this._buff.length, i;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n      }\n      this._buff = this._buff.substring(i - 64);\n      return this;\n    };\n    SparkMD5.prototype.end = function(raw) {\n      var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD5.prototype.reset = function() {\n      this._buff = \"\";\n      this._length = 0;\n      this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n      return this;\n    };\n    SparkMD5.prototype.getState = function() {\n      return {\n        buff: this._buff,\n        length: this._length,\n        hash: this._hash.slice()\n      };\n    };\n    SparkMD5.prototype.setState = function(state) {\n      this._buff = state.buff;\n      this._length = state.length;\n      this._hash = state.hash;\n      return this;\n    };\n    SparkMD5.prototype.destroy = function() {\n      delete this._hash;\n      delete this._buff;\n      delete this._length;\n    };\n    SparkMD5.prototype._finish = function(tail, length) {\n      var i = length, tmp, lo, hi;\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(this._hash, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = this._length * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(this._hash, tail);\n    };\n    SparkMD5.hash = function(str, raw) {\n      return SparkMD5.hashBinary(toUtf8(str), raw);\n    };\n    SparkMD5.hashBinary = function(content, raw) {\n      var hash = md51(content), ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    SparkMD5.ArrayBuffer = function() {\n      this.reset();\n    };\n    SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n      var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n      this._length += arr.byteLength;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n      }\n      this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n      return this;\n    };\n    SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n      var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff[i] << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD5.ArrayBuffer.prototype.reset = function() {\n      this._buff = new Uint8Array(0);\n      this._length = 0;\n      this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n      return this;\n    };\n    SparkMD5.ArrayBuffer.prototype.getState = function() {\n      var state = SparkMD5.prototype.getState.call(this);\n      state.buff = arrayBuffer2Utf8Str(state.buff);\n      return state;\n    };\n    SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n      state.buff = utf8Str2ArrayBuffer(state.buff, true);\n      return SparkMD5.prototype.setState.call(this, state);\n    };\n    SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n    SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n    SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n      var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    return SparkMD5;\n  }));\n})(sparkMd5);\n\nvar SparkMD5 = sparkMd5.exports;\n\nconst fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\nclass FileChecksum {\n  static create(file, callback) {\n    const instance = new FileChecksum(file);\n    instance.create(callback);\n  }\n  constructor(file) {\n    this.file = file;\n    this.chunkSize = 2097152;\n    this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n    this.chunkIndex = 0;\n  }\n  create(callback) {\n    this.callback = callback;\n    this.md5Buffer = new SparkMD5.ArrayBuffer;\n    this.fileReader = new FileReader;\n    this.fileReader.addEventListener(\"load\", (event => this.fileReaderDidLoad(event)));\n    this.fileReader.addEventListener(\"error\", (event => this.fileReaderDidError(event)));\n    this.readNextChunk();\n  }\n  fileReaderDidLoad(event) {\n    this.md5Buffer.append(event.target.result);\n    if (!this.readNextChunk()) {\n      const binaryDigest = this.md5Buffer.end(true);\n      const base64digest = btoa(binaryDigest);\n      this.callback(null, base64digest);\n    }\n  }\n  fileReaderDidError(event) {\n    this.callback(`Error reading ${this.file.name}`);\n  }\n  readNextChunk() {\n    if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n      const start = this.chunkIndex * this.chunkSize;\n      const end = Math.min(start + this.chunkSize, this.file.size);\n      const bytes = fileSlice.call(this.file, start, end);\n      this.fileReader.readAsArrayBuffer(bytes);\n      this.chunkIndex++;\n      return true;\n    } else {\n      return false;\n    }\n  }\n}\n\nfunction getMetaValue(name) {\n  const element = findElement(document.head, `meta[name=\"${name}\"]`);\n  if (element) {\n    return element.getAttribute(\"content\");\n  }\n}\n\nfunction findElements(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  const elements = root.querySelectorAll(selector);\n  return toArray(elements);\n}\n\nfunction findElement(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  return root.querySelector(selector);\n}\n\nfunction dispatchEvent(element, type, eventInit = {}) {\n  const {disabled: disabled} = element;\n  const {bubbles: bubbles, cancelable: cancelable, detail: detail} = eventInit;\n  const event = document.createEvent(\"Event\");\n  event.initEvent(type, bubbles || true, cancelable || true);\n  event.detail = detail || {};\n  try {\n    element.disabled = false;\n    element.dispatchEvent(event);\n  } finally {\n    element.disabled = disabled;\n  }\n  return event;\n}\n\nfunction toArray(value) {\n  if (Array.isArray(value)) {\n    return value;\n  } else if (Array.from) {\n    return Array.from(value);\n  } else {\n    return [].slice.call(value);\n  }\n}\n\nclass BlobRecord {\n  constructor(file, checksum, url, customHeaders = {}) {\n    this.file = file;\n    this.attributes = {\n      filename: file.name,\n      content_type: file.type || \"application/octet-stream\",\n      byte_size: file.size,\n      checksum: checksum\n    };\n    this.xhr = new XMLHttpRequest;\n    this.xhr.open(\"POST\", url, true);\n    this.xhr.responseType = \"json\";\n    this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n    this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n    this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n    Object.keys(customHeaders).forEach((headerKey => {\n      this.xhr.setRequestHeader(headerKey, customHeaders[headerKey]);\n    }));\n    const csrfToken = getMetaValue(\"csrf-token\");\n    if (csrfToken != undefined) {\n      this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n    }\n    this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n    this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n  }\n  get status() {\n    return this.xhr.status;\n  }\n  get response() {\n    const {responseType: responseType, response: response} = this.xhr;\n    if (responseType == \"json\") {\n      return response;\n    } else {\n      return JSON.parse(response);\n    }\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(JSON.stringify({\n      blob: this.attributes\n    }));\n  }\n  requestDidLoad(event) {\n    if (this.status >= 200 && this.status < 300) {\n      const {response: response} = this;\n      const {direct_upload: direct_upload} = response;\n      delete response.direct_upload;\n      this.attributes = response;\n      this.directUploadData = direct_upload;\n      this.callback(null, this.toJSON());\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error creating Blob for \"${this.file.name}\". Status: ${this.status}`);\n  }\n  toJSON() {\n    const result = {};\n    for (const key in this.attributes) {\n      result[key] = this.attributes[key];\n    }\n    return result;\n  }\n}\n\nclass BlobUpload {\n  constructor(blob) {\n    this.blob = blob;\n    this.file = blob.file;\n    const {url: url, headers: headers} = blob.directUploadData;\n    this.xhr = new XMLHttpRequest;\n    this.xhr.open(\"PUT\", url, true);\n    this.xhr.responseType = \"text\";\n    for (const key in headers) {\n      this.xhr.setRequestHeader(key, headers[key]);\n    }\n    this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n    this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(this.file.slice());\n  }\n  requestDidLoad(event) {\n    const {status: status, response: response} = this.xhr;\n    if (status >= 200 && status < 300) {\n      this.callback(null, response);\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error storing \"${this.file.name}\". Status: ${this.xhr.status}`);\n  }\n}\n\nlet id = 0;\n\nclass DirectUpload {\n  constructor(file, url, delegate, customHeaders = {}) {\n    this.id = ++id;\n    this.file = file;\n    this.url = url;\n    this.delegate = delegate;\n    this.customHeaders = customHeaders;\n  }\n  create(callback) {\n    FileChecksum.create(this.file, ((error, checksum) => {\n      if (error) {\n        callback(error);\n        return;\n      }\n      const blob = new BlobRecord(this.file, checksum, this.url, this.customHeaders);\n      notify(this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n      blob.create((error => {\n        if (error) {\n          callback(error);\n        } else {\n          const upload = new BlobUpload(blob);\n          notify(this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n          upload.create((error => {\n            if (error) {\n              callback(error);\n            } else {\n              callback(null, blob.toJSON());\n            }\n          }));\n        }\n      }));\n    }));\n  }\n}\n\nfunction notify(object, methodName, ...messages) {\n  if (object && typeof object[methodName] == \"function\") {\n    return object[methodName](...messages);\n  }\n}\n\nclass DirectUploadController {\n  constructor(input, file) {\n    this.input = input;\n    this.file = file;\n    this.directUpload = new DirectUpload(this.file, this.url, this);\n    this.dispatch(\"initialize\");\n  }\n  start(callback) {\n    const hiddenInput = document.createElement(\"input\");\n    hiddenInput.type = \"hidden\";\n    hiddenInput.name = this.input.name;\n    this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n    this.dispatch(\"start\");\n    this.directUpload.create(((error, attributes) => {\n      if (error) {\n        hiddenInput.parentNode.removeChild(hiddenInput);\n        this.dispatchError(error);\n      } else {\n        hiddenInput.value = attributes.signed_id;\n      }\n      this.dispatch(\"end\");\n      callback(error);\n    }));\n  }\n  uploadRequestDidProgress(event) {\n    const progress = event.loaded / event.total * 100;\n    if (progress) {\n      this.dispatch(\"progress\", {\n        progress: progress\n      });\n    }\n  }\n  get url() {\n    return this.input.getAttribute(\"data-direct-upload-url\");\n  }\n  dispatch(name, detail = {}) {\n    detail.file = this.file;\n    detail.id = this.directUpload.id;\n    return dispatchEvent(this.input, `direct-upload:${name}`, {\n      detail: detail\n    });\n  }\n  dispatchError(error) {\n    const event = this.dispatch(\"error\", {\n      error: error\n    });\n    if (!event.defaultPrevented) {\n      alert(error);\n    }\n  }\n  directUploadWillCreateBlobWithXHR(xhr) {\n    this.dispatch(\"before-blob-request\", {\n      xhr: xhr\n    });\n  }\n  directUploadWillStoreFileWithXHR(xhr) {\n    this.dispatch(\"before-storage-request\", {\n      xhr: xhr\n    });\n    xhr.upload.addEventListener(\"progress\", (event => this.uploadRequestDidProgress(event)));\n  }\n}\n\nconst inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n\nclass DirectUploadsController {\n  constructor(form) {\n    this.form = form;\n    this.inputs = findElements(form, inputSelector).filter((input => input.files.length));\n  }\n  start(callback) {\n    const controllers = this.createDirectUploadControllers();\n    const startNextController = () => {\n      const controller = controllers.shift();\n      if (controller) {\n        controller.start((error => {\n          if (error) {\n            callback(error);\n            this.dispatch(\"end\");\n          } else {\n            startNextController();\n          }\n        }));\n      } else {\n        callback();\n        this.dispatch(\"end\");\n      }\n    };\n    this.dispatch(\"start\");\n    startNextController();\n  }\n  createDirectUploadControllers() {\n    const controllers = [];\n    this.inputs.forEach((input => {\n      toArray(input.files).forEach((file => {\n        const controller = new DirectUploadController(input, file);\n        controllers.push(controller);\n      }));\n    }));\n    return controllers;\n  }\n  dispatch(name, detail = {}) {\n    return dispatchEvent(this.form, `direct-uploads:${name}`, {\n      detail: detail\n    });\n  }\n}\n\nconst processingAttribute = \"data-direct-uploads-processing\";\n\nconst submitButtonsByForm = new WeakMap;\n\nlet started = false;\n\nfunction start() {\n  if (!started) {\n    started = true;\n    document.addEventListener(\"click\", didClick, true);\n    document.addEventListener(\"submit\", didSubmitForm, true);\n    document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n  }\n}\n\nfunction didClick(event) {\n  const button = event.target.closest(\"button, input\");\n  if (button && button.type === \"submit\" && button.form) {\n    submitButtonsByForm.set(button.form, button);\n  }\n}\n\nfunction didSubmitForm(event) {\n  handleFormSubmissionEvent(event);\n}\n\nfunction didSubmitRemoteElement(event) {\n  if (event.target.tagName == \"FORM\") {\n    handleFormSubmissionEvent(event);\n  }\n}\n\nfunction handleFormSubmissionEvent(event) {\n  const form = event.target;\n  if (form.hasAttribute(processingAttribute)) {\n    event.preventDefault();\n    return;\n  }\n  const controller = new DirectUploadsController(form);\n  const {inputs: inputs} = controller;\n  if (inputs.length) {\n    event.preventDefault();\n    form.setAttribute(processingAttribute, \"\");\n    inputs.forEach(disable);\n    controller.start((error => {\n      form.removeAttribute(processingAttribute);\n      if (error) {\n        inputs.forEach(enable);\n      } else {\n        submitForm(form);\n      }\n    }));\n  }\n}\n\nfunction submitForm(form) {\n  let button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n  if (button) {\n    const {disabled: disabled} = button;\n    button.disabled = false;\n    button.focus();\n    button.click();\n    button.disabled = disabled;\n  } else {\n    button = document.createElement(\"input\");\n    button.type = \"submit\";\n    button.style.display = \"none\";\n    form.appendChild(button);\n    button.click();\n    form.removeChild(button);\n  }\n  submitButtonsByForm.delete(form);\n}\n\nfunction disable(input) {\n  input.disabled = true;\n}\n\nfunction enable(input) {\n  input.disabled = false;\n}\n\nfunction autostart() {\n  if (window.ActiveStorage) {\n    start();\n  }\n}\n\nsetTimeout(autostart, 1);\n\nexport { DirectUpload, DirectUploadController, DirectUploadsController, start };\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2022 Basecamp, LLC\n */\nclass EventListener {\n    constructor(eventTarget, eventName, eventOptions) {\n        this.eventTarget = eventTarget;\n        this.eventName = eventName;\n        this.eventOptions = eventOptions;\n        this.unorderedBindings = new Set();\n    }\n    connect() {\n        this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n        this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    bindingConnected(binding) {\n        this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n        this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n        const extendedEvent = extendEvent(event);\n        for (const binding of this.bindings) {\n            if (extendedEvent.immediatePropagationStopped) {\n                break;\n            }\n            else {\n                binding.handleEvent(extendedEvent);\n            }\n        }\n    }\n    hasBindings() {\n        return this.unorderedBindings.size > 0;\n    }\n    get bindings() {\n        return Array.from(this.unorderedBindings).sort((left, right) => {\n            const leftIndex = left.index, rightIndex = right.index;\n            return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n        });\n    }\n}\nfunction extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n        return event;\n    }\n    else {\n        const { stopImmediatePropagation } = event;\n        return Object.assign(event, {\n            immediatePropagationStopped: false,\n            stopImmediatePropagation() {\n                this.immediatePropagationStopped = true;\n                stopImmediatePropagation.call(this);\n            },\n        });\n    }\n}\n\nclass Dispatcher {\n    constructor(application) {\n        this.application = application;\n        this.eventListenerMaps = new Map();\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.eventListeners.forEach((eventListener) => eventListener.connect());\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n        }\n    }\n    get eventListeners() {\n        return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding, clearEventListeners = false) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n        if (clearEventListeners)\n            this.clearEventListenersForBinding(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    clearEventListenersForBinding(binding) {\n        const eventListener = this.fetchEventListenerForBinding(binding);\n        if (!eventListener.hasBindings()) {\n            eventListener.disconnect();\n            this.removeMappedEventListenerFor(binding);\n        }\n    }\n    removeMappedEventListenerFor(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        eventListenerMap.delete(cacheKey);\n        if (eventListenerMap.size == 0)\n            this.eventListenerMaps.delete(eventTarget);\n    }\n    fetchEventListenerForBinding(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        let eventListener = eventListenerMap.get(cacheKey);\n        if (!eventListener) {\n            eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n            eventListenerMap.set(cacheKey, eventListener);\n        }\n        return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n        const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n        if (this.started) {\n            eventListener.connect();\n        }\n        return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n        let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n        if (!eventListenerMap) {\n            eventListenerMap = new Map();\n            this.eventListenerMaps.set(eventTarget, eventListenerMap);\n        }\n        return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n        const parts = [eventName];\n        Object.keys(eventOptions)\n            .sort()\n            .forEach((key) => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst defaultActionDescriptorFilters = {\n    stop({ event, value }) {\n        if (value)\n            event.stopPropagation();\n        return true;\n    },\n    prevent({ event, value }) {\n        if (value)\n            event.preventDefault();\n        return true;\n    },\n    self({ event, value, element }) {\n        if (value) {\n            return element === event.target;\n        }\n        else {\n            return true;\n        }\n    },\n};\nconst descriptorPattern = /^(?:(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    let eventName = matches[1];\n    let keyFilter = matches[2];\n    if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n        eventName += `.${keyFilter}`;\n        keyFilter = \"\";\n    }\n    return {\n        eventTarget: parseEventTarget(matches[3]),\n        eventName,\n        eventOptions: matches[6] ? parseEventOptions(matches[6]) : {},\n        identifier: matches[4],\n        methodName: matches[5],\n        keyFilter,\n    };\n}\nfunction parseEventTarget(eventTargetName) {\n    if (eventTargetName == \"window\") {\n        return window;\n    }\n    else if (eventTargetName == \"document\") {\n        return document;\n    }\n}\nfunction parseEventOptions(eventOptions) {\n    return eventOptions\n        .split(\":\")\n        .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n    if (eventTarget == window) {\n        return \"window\";\n    }\n    else if (eventTarget == document) {\n        return \"document\";\n    }\n}\n\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n    return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nclass Action {\n    constructor(element, index, descriptor, schema) {\n        this.element = element;\n        this.index = index;\n        this.eventTarget = descriptor.eventTarget || element;\n        this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n        this.eventOptions = descriptor.eventOptions || {};\n        this.identifier = descriptor.identifier || error(\"missing identifier\");\n        this.methodName = descriptor.methodName || error(\"missing method name\");\n        this.keyFilter = descriptor.keyFilter || \"\";\n        this.schema = schema;\n    }\n    static forToken(token, schema) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n    }\n    toString() {\n        const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n        const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n    }\n    isFilterTarget(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filteres = this.keyFilter.split(\"+\");\n        const modifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\n        const [meta, ctrl, alt, shift] = modifiers.map((modifier) => filteres.includes(modifier));\n        if (event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift) {\n            return true;\n        }\n        const standardFilter = filteres.filter((key) => !modifiers.includes(key))[0];\n        if (!standardFilter) {\n            return false;\n        }\n        if (!Object.prototype.hasOwnProperty.call(this.keyMappings, standardFilter)) {\n            error(`contains unknown key filter: ${this.keyFilter}`);\n        }\n        return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n    }\n    get params() {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n        for (const { name, value } of Array.from(this.element.attributes)) {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                params[camelize(key)] = typecast(value);\n            }\n        }\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n    get keyMappings() {\n        return this.schema.keyMappings;\n    }\n}\nconst defaultEventNames = {\n    a: () => \"click\",\n    button: () => \"click\",\n    form: () => \"submit\",\n    details: () => \"toggle\",\n    input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n    select: () => \"change\",\n    textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(event)) {\n            this.invokeWithEvent(event);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    applyEventModifiers(event) {\n        const { element } = this.action;\n        const { actionDescriptorFilters } = this.context.application;\n        let passes = true;\n        for (const [name, value] of Object.entries(this.eventOptions)) {\n            if (name in actionDescriptorFilters) {\n                const filter = actionDescriptorFilters[name];\n                passes = passes && filter({ name, value, event, element });\n            }\n            else {\n                continue;\n            }\n        }\n        return passes;\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            const { params } = this.action;\n            const actionEvent = Object.assign(event, { params });\n            this.method.call(this.controller, actionEvent);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (event instanceof KeyboardEvent && this.action.isFilterTarget(event)) {\n            return false;\n        }\n        if (this.element === eventTarget) {\n            return true;\n        }\n        else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n            return this.scope.containsElement(eventTarget);\n        }\n        else {\n            return this.scope.containsElement(this.action.element);\n        }\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    get methodName() {\n        return this.action.methodName;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass ElementObserver {\n    constructor(element, delegate) {\n        this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n        this.element = element;\n        this.started = false;\n        this.delegate = delegate;\n        this.elements = new Set();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.refresh();\n        }\n    }\n    pause(callback) {\n        if (this.started) {\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n        callback();\n        if (!this.started) {\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(node, attributeName) {\n        const element = node;\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    matchElement(element) {\n        return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        if (this.delegate.elementMatchedAttribute) {\n            this.delegate.elementMatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementUnmatched(element) {\n        if (this.delegate.elementUnmatchedAttribute) {\n            this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementAttributeChanged(element, attributeName) {\n        if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n            this.delegate.elementAttributeValueChanged(element, attributeName);\n        }\n    }\n}\n\nfunction add(map, key, value) {\n    fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n    fetch(map, key).delete(value);\n    prune(map, key);\n}\nfunction fetch(map, key) {\n    let values = map.get(key);\n    if (!values) {\n        values = new Set();\n        map.set(key, values);\n    }\n    return values;\n}\nfunction prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n        map.delete(key);\n    }\n}\n\nclass Multimap {\n    constructor() {\n        this.valuesByKey = new Map();\n    }\n    get keys() {\n        return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n    }\n    get size() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n        add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n        del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n        const values = this.valuesByKey.get(key);\n        return values != null && values.has(value);\n    }\n    hasKey(key) {\n        return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.some((set) => set.has(value));\n    }\n    getValuesForKey(key) {\n        const values = this.valuesByKey.get(key);\n        return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n        return Array.from(this.valuesByKey)\n            .filter(([_key, values]) => values.has(value))\n            .map(([key, _values]) => key);\n    }\n}\n\nclass IndexedMultimap extends Multimap {\n    constructor() {\n        super();\n        this.keysByValue = new Map();\n    }\n    get values() {\n        return Array.from(this.keysByValue.keys());\n    }\n    add(key, value) {\n        super.add(key, value);\n        add(this.keysByValue, value, key);\n    }\n    delete(key, value) {\n        super.delete(key, value);\n        del(this.keysByValue, value, key);\n    }\n    hasValue(value) {\n        return this.keysByValue.has(value);\n    }\n    getKeysForValue(value) {\n        const set = this.keysByValue.get(value);\n        return set ? Array.from(set) : [];\n    }\n}\n\nclass SelectorObserver {\n    constructor(element, selector, delegate, details = {}) {\n        this.selector = selector;\n        this.details = details;\n        this.elementObserver = new ElementObserver(element, this);\n        this.delegate = delegate;\n        this.matchesByElement = new Multimap();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    matchElement(element) {\n        const matches = element.matches(this.selector);\n        if (this.delegate.selectorMatchElement) {\n            return matches && this.delegate.selectorMatchElement(element, this.details);\n        }\n        return matches;\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector)).filter((match) => this.matchElement(match));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        this.selectorMatched(element);\n    }\n    elementUnmatched(element) {\n        this.selectorUnmatched(element);\n    }\n    elementAttributeChanged(element, _attributeName) {\n        const matches = this.matchElement(element);\n        const matchedBefore = this.matchesByElement.has(this.selector, element);\n        if (!matches && matchedBefore) {\n            this.selectorUnmatched(element);\n        }\n    }\n    selectorMatched(element) {\n        if (this.delegate.selectorMatched) {\n            this.delegate.selectorMatched(element, this.selector, this.details);\n            this.matchesByElement.add(this.selector, element);\n        }\n    }\n    selectorUnmatched(element) {\n        this.delegate.selectorUnmatched(element, this.selector, this.details);\n        this.matchesByElement.delete(this.selector, element);\n    }\n}\n\nclass StringMapObserver {\n    constructor(element, delegate) {\n        this.element = element;\n        this.delegate = delegate;\n        this.started = false;\n        this.stringMap = new Map();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n            this.refresh();\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            for (const attributeName of this.knownAttributeNames) {\n                this.refreshAttribute(attributeName, null);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        const attributeName = mutation.attributeName;\n        if (attributeName) {\n            this.refreshAttribute(attributeName, mutation.oldValue);\n        }\n    }\n    refreshAttribute(attributeName, oldValue) {\n        const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n        if (key != null) {\n            if (!this.stringMap.has(attributeName)) {\n                this.stringMapKeyAdded(key, attributeName);\n            }\n            const value = this.element.getAttribute(attributeName);\n            if (this.stringMap.get(attributeName) != value) {\n                this.stringMapValueChanged(value, key, oldValue);\n            }\n            if (value == null) {\n                const oldValue = this.stringMap.get(attributeName);\n                this.stringMap.delete(attributeName);\n                if (oldValue)\n                    this.stringMapKeyRemoved(key, attributeName, oldValue);\n            }\n            else {\n                this.stringMap.set(attributeName, value);\n            }\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        if (this.delegate.stringMapKeyAdded) {\n            this.delegate.stringMapKeyAdded(key, attributeName);\n        }\n    }\n    stringMapValueChanged(value, key, oldValue) {\n        if (this.delegate.stringMapValueChanged) {\n            this.delegate.stringMapValueChanged(value, key, oldValue);\n        }\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        if (this.delegate.stringMapKeyRemoved) {\n            this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n        }\n    }\n    get knownAttributeNames() {\n        return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n    get currentAttributeNames() {\n        return Array.from(this.element.attributes).map((attribute) => attribute.name);\n    }\n    get recordedAttributeNames() {\n        return Array.from(this.stringMap.keys());\n    }\n}\n\nclass TokenListObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeObserver = new AttributeObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.tokensByElement = new Multimap();\n    }\n    get started() {\n        return this.attributeObserver.started;\n    }\n    start() {\n        this.attributeObserver.start();\n    }\n    pause(callback) {\n        this.attributeObserver.pause(callback);\n    }\n    stop() {\n        this.attributeObserver.stop();\n    }\n    refresh() {\n        this.attributeObserver.refresh();\n    }\n    get element() {\n        return this.attributeObserver.element;\n    }\n    get attributeName() {\n        return this.attributeObserver.attributeName;\n    }\n    elementMatchedAttribute(element) {\n        this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n        const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n        this.tokensUnmatched(unmatchedTokens);\n        this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n        this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n        tokens.forEach((token) => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n        tokens.forEach((token) => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n        this.delegate.tokenMatched(token);\n        this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n        this.delegate.tokenUnmatched(token);\n        this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n        const previousTokens = this.tokensByElement.getValuesForKey(element);\n        const currentTokens = this.readTokensForElement(element);\n        const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n        if (firstDifferingIndex == -1) {\n            return [[], []];\n        }\n        else {\n            return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n        }\n    }\n    readTokensForElement(element) {\n        const attributeName = this.attributeName;\n        const tokenString = element.getAttribute(attributeName) || \"\";\n        return parseTokenString(tokenString, element, attributeName);\n    }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n    return tokenString\n        .trim()\n        .split(/\\s+/)\n        .filter((content) => content.length)\n        .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n    constructor(element, attributeName, delegate) {\n        this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.parseResultsByToken = new WeakMap();\n        this.valuesByTokenByElement = new WeakMap();\n    }\n    get started() {\n        return this.tokenListObserver.started;\n    }\n    start() {\n        this.tokenListObserver.start();\n    }\n    stop() {\n        this.tokenListObserver.stop();\n    }\n    refresh() {\n        this.tokenListObserver.refresh();\n    }\n    get element() {\n        return this.tokenListObserver.element;\n    }\n    get attributeName() {\n        return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).set(token, value);\n            this.delegate.elementMatchedValue(element, value);\n        }\n    }\n    tokenUnmatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).delete(token);\n            this.delegate.elementUnmatchedValue(element, value);\n        }\n    }\n    fetchParseResultForToken(token) {\n        let parseResult = this.parseResultsByToken.get(token);\n        if (!parseResult) {\n            parseResult = this.parseToken(token);\n            this.parseResultsByToken.set(token, parseResult);\n        }\n        return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n        let valuesByToken = this.valuesByTokenByElement.get(element);\n        if (!valuesByToken) {\n            valuesByToken = new Map();\n            this.valuesByTokenByElement.set(element, valuesByToken);\n        }\n        return valuesByToken;\n    }\n    parseToken(token) {\n        try {\n            const value = this.delegate.parseValueForToken(token);\n            return { value };\n        }\n        catch (error) {\n            return { error };\n        }\n    }\n}\n\nclass BindingObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.bindingsByAction = new Map();\n    }\n    start() {\n        if (!this.valueListObserver) {\n            this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n            this.valueListObserver.start();\n        }\n    }\n    stop() {\n        if (this.valueListObserver) {\n            this.valueListObserver.stop();\n            delete this.valueListObserver;\n            this.disconnectAllActions();\n        }\n    }\n    get element() {\n        return this.context.element;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get actionAttribute() {\n        return this.schema.actionAttribute;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get bindings() {\n        return Array.from(this.bindingsByAction.values());\n    }\n    connectAction(action) {\n        const binding = new Binding(this.context, action);\n        this.bindingsByAction.set(action, binding);\n        this.delegate.bindingConnected(binding);\n    }\n    disconnectAction(action) {\n        const binding = this.bindingsByAction.get(action);\n        if (binding) {\n            this.bindingsByAction.delete(action);\n            this.delegate.bindingDisconnected(binding);\n        }\n    }\n    disconnectAllActions() {\n        this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token, this.schema);\n        if (action.identifier == this.identifier) {\n            return action;\n        }\n    }\n    elementMatchedValue(element, action) {\n        this.connectAction(action);\n    }\n    elementUnmatchedValue(element, action) {\n        this.disconnectAction(action);\n    }\n}\n\nclass ValueObserver {\n    constructor(context, receiver) {\n        this.context = context;\n        this.receiver = receiver;\n        this.stringMapObserver = new StringMapObserver(this.element, this);\n        this.valueDescriptorMap = this.controller.valueDescriptorMap;\n    }\n    start() {\n        this.stringMapObserver.start();\n        this.invokeChangedCallbacksForDefaultValues();\n    }\n    stop() {\n        this.stringMapObserver.stop();\n    }\n    get element() {\n        return this.context.element;\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    getStringMapKeyForAttribute(attributeName) {\n        if (attributeName in this.valueDescriptorMap) {\n            return this.valueDescriptorMap[attributeName].name;\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        const descriptor = this.valueDescriptorMap[attributeName];\n        if (!this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n        }\n    }\n    stringMapValueChanged(value, name, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[name];\n        if (value === null)\n            return;\n        if (oldValue === null) {\n            oldValue = descriptor.writer(descriptor.defaultValue);\n        }\n        this.invokeChangedCallback(name, value, oldValue);\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[key];\n        if (this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n        }\n        else {\n            this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n        }\n    }\n    invokeChangedCallbacksForDefaultValues() {\n        for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n            if (defaultValue != undefined && !this.controller.data.has(key)) {\n                this.invokeChangedCallback(name, writer(defaultValue), undefined);\n            }\n        }\n    }\n    invokeChangedCallback(name, rawValue, rawOldValue) {\n        const changedMethodName = `${name}Changed`;\n        const changedMethod = this.receiver[changedMethodName];\n        if (typeof changedMethod == \"function\") {\n            const descriptor = this.valueDescriptorNameMap[name];\n            try {\n                const value = descriptor.reader(rawValue);\n                let oldValue = rawOldValue;\n                if (rawOldValue) {\n                    oldValue = descriptor.reader(rawOldValue);\n                }\n                changedMethod.call(this.receiver, value, oldValue);\n            }\n            catch (error) {\n                if (error instanceof TypeError) {\n                    error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n                }\n                throw error;\n            }\n        }\n    }\n    get valueDescriptors() {\n        const { valueDescriptorMap } = this;\n        return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n    }\n    get valueDescriptorNameMap() {\n        const descriptors = {};\n        Object.keys(this.valueDescriptorMap).forEach((key) => {\n            const descriptor = this.valueDescriptorMap[key];\n            descriptors[descriptor.name] = descriptor;\n        });\n        return descriptors;\n    }\n    hasValue(attributeName) {\n        const descriptor = this.valueDescriptorNameMap[attributeName];\n        const hasMethodName = `has${capitalize(descriptor.name)}`;\n        return this.receiver[hasMethodName];\n    }\n}\n\nclass TargetObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.targetsByName = new Multimap();\n    }\n    start() {\n        if (!this.tokenListObserver) {\n            this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n            this.tokenListObserver.start();\n        }\n    }\n    stop() {\n        if (this.tokenListObserver) {\n            this.disconnectAllTargets();\n            this.tokenListObserver.stop();\n            delete this.tokenListObserver;\n        }\n    }\n    tokenMatched({ element, content: name }) {\n        if (this.scope.containsElement(element)) {\n            this.connectTarget(element, name);\n        }\n    }\n    tokenUnmatched({ element, content: name }) {\n        this.disconnectTarget(element, name);\n    }\n    connectTarget(element, name) {\n        var _a;\n        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n        }\n    }\n    disconnectTarget(element, name) {\n        var _a;\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n        }\n    }\n    disconnectAllTargets() {\n        for (const name of this.targetsByName.keys) {\n            for (const element of this.targetsByName.getValuesForKey(name)) {\n                this.disconnectTarget(element, name);\n            }\n        }\n    }\n    get attributeName() {\n        return `data-${this.context.identifier}-target`;\n    }\n    get element() {\n        return this.context.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return Array.from(ancestors.reduce((values, constructor) => {\n        getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n        return values;\n    }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return ancestors.reduce((pairs, constructor) => {\n        pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n        return pairs;\n    }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n    const ancestors = [];\n    while (constructor) {\n        ancestors.push(constructor);\n        constructor = Object.getPrototypeOf(constructor);\n    }\n    return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.outletsByName = new Multimap();\n        this.outletElementsByName = new Multimap();\n        this.selectorObserverMap = new Map();\n    }\n    start() {\n        if (this.selectorObserverMap.size === 0) {\n            this.outletDefinitions.forEach((outletName) => {\n                const selector = this.selector(outletName);\n                const details = { outletName };\n                if (selector) {\n                    this.selectorObserverMap.set(outletName, new SelectorObserver(document.body, selector, this, details));\n                }\n            });\n            this.selectorObserverMap.forEach((observer) => observer.start());\n        }\n        this.dependentContexts.forEach((context) => context.refresh());\n    }\n    stop() {\n        if (this.selectorObserverMap.size > 0) {\n            this.disconnectAllOutlets();\n            this.selectorObserverMap.forEach((observer) => observer.stop());\n            this.selectorObserverMap.clear();\n        }\n    }\n    refresh() {\n        this.selectorObserverMap.forEach((observer) => observer.refresh());\n    }\n    selectorMatched(element, _selector, { outletName }) {\n        const outlet = this.getOutlet(element, outletName);\n        if (outlet) {\n            this.connectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorUnmatched(element, _selector, { outletName }) {\n        const outlet = this.getOutletFromMap(element, outletName);\n        if (outlet) {\n            this.disconnectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorMatchElement(element, { outletName }) {\n        return (this.hasOutlet(element, outletName) &&\n            element.matches(`[${this.context.application.schema.controllerAttribute}~=${outletName}]`));\n    }\n    connectOutlet(outlet, element, outletName) {\n        var _a;\n        if (!this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.add(outletName, outlet);\n            this.outletElementsByName.add(outletName, element);\n            (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n        }\n    }\n    disconnectOutlet(outlet, element, outletName) {\n        var _a;\n        if (this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.delete(outletName, outlet);\n            this.outletElementsByName.delete(outletName, element);\n            (_a = this.selectorObserverMap\n                .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n        }\n    }\n    disconnectAllOutlets() {\n        for (const outletName of this.outletElementsByName.keys) {\n            for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n                for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n                    this.disconnectOutlet(outlet, element, outletName);\n                }\n            }\n        }\n    }\n    selector(outletName) {\n        return this.scope.outlets.getSelectorForOutletName(outletName);\n    }\n    get outletDependencies() {\n        const dependencies = new Multimap();\n        this.router.modules.forEach((module) => {\n            const constructor = module.definition.controllerConstructor;\n            const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n            outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n        });\n        return dependencies;\n    }\n    get outletDefinitions() {\n        return this.outletDependencies.getKeysForValue(this.identifier);\n    }\n    get dependentControllerIdentifiers() {\n        return this.outletDependencies.getValuesForKey(this.identifier);\n    }\n    get dependentContexts() {\n        const identifiers = this.dependentControllerIdentifiers;\n        return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n    }\n    hasOutlet(element, outletName) {\n        return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n    }\n    getOutlet(element, outletName) {\n        return this.application.getControllerForElementAndIdentifier(element, outletName);\n    }\n    getOutletFromMap(element, outletName) {\n        return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get router() {\n        return this.application.router;\n    }\n}\n\nclass Context {\n    constructor(module, scope) {\n        this.logDebugActivity = (functionName, detail = {}) => {\n            const { identifier, controller, element } = this;\n            detail = Object.assign({ identifier, controller, element }, detail);\n            this.application.logDebugActivity(this.identifier, functionName, detail);\n        };\n        this.module = module;\n        this.scope = scope;\n        this.controller = new module.controllerConstructor(this);\n        this.bindingObserver = new BindingObserver(this, this.dispatcher);\n        this.valueObserver = new ValueObserver(this, this.controller);\n        this.targetObserver = new TargetObserver(this, this);\n        this.outletObserver = new OutletObserver(this, this);\n        try {\n            this.controller.initialize();\n            this.logDebugActivity(\"initialize\");\n        }\n        catch (error) {\n            this.handleError(error, \"initializing controller\");\n        }\n    }\n    connect() {\n        this.bindingObserver.start();\n        this.valueObserver.start();\n        this.targetObserver.start();\n        this.outletObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    refresh() {\n        this.outletObserver.refresh();\n    }\n    disconnect() {\n        try {\n            this.controller.disconnect();\n            this.logDebugActivity(\"disconnect\");\n        }\n        catch (error) {\n            this.handleError(error, \"disconnecting controller\");\n        }\n        this.outletObserver.stop();\n        this.targetObserver.stop();\n        this.valueObserver.stop();\n        this.bindingObserver.stop();\n    }\n    get application() {\n        return this.module.application;\n    }\n    get identifier() {\n        return this.module.identifier;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get dispatcher() {\n        return this.application.dispatcher;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get parentElement() {\n        return this.element.parentElement;\n    }\n    handleError(error, message, detail = {}) {\n        const { identifier, controller, element } = this;\n        detail = Object.assign({ identifier, controller, element }, detail);\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    targetConnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetConnected`, element);\n    }\n    targetDisconnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n    }\n    outletConnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n    }\n    outletDisconnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n    }\n    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\n    }\n}\n\nfunction bless(constructor) {\n    return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n    const shadowConstructor = extend(constructor);\n    const shadowProperties = getShadowProperties(constructor.prototype, properties);\n    Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n    return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n    const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n    return blessings.reduce((blessedProperties, blessing) => {\n        const properties = blessing(constructor);\n        for (const key in properties) {\n            const descriptor = blessedProperties[key] || {};\n            blessedProperties[key] = Object.assign(descriptor, properties[key]);\n        }\n        return blessedProperties;\n    }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n    return getOwnKeys(properties).reduce((shadowProperties, key) => {\n        const descriptor = getShadowedDescriptor(prototype, properties, key);\n        if (descriptor) {\n            Object.assign(shadowProperties, { [key]: descriptor });\n        }\n        return shadowProperties;\n    }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n    if (!shadowedByValue) {\n        const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n        if (shadowingDescriptor) {\n            descriptor.get = shadowingDescriptor.get || descriptor.get;\n            descriptor.set = shadowingDescriptor.set || descriptor.set;\n        }\n        return descriptor;\n    }\n}\nconst getOwnKeys = (() => {\n    if (typeof Object.getOwnPropertySymbols == \"function\") {\n        return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n    }\n    else {\n        return Object.getOwnPropertyNames;\n    }\n})();\nconst extend = (() => {\n    function extendWithReflect(constructor) {\n        function extended() {\n            return Reflect.construct(constructor, arguments, new.target);\n        }\n        extended.prototype = Object.create(constructor.prototype, {\n            constructor: { value: extended },\n        });\n        Reflect.setPrototypeOf(extended, constructor);\n        return extended;\n    }\n    function testReflectExtension() {\n        const a = function () {\n            this.a.call(this);\n        };\n        const b = extendWithReflect(a);\n        b.prototype.a = function () { };\n        return new b();\n    }\n    try {\n        testReflectExtension();\n        return extendWithReflect;\n    }\n    catch (error) {\n        return (constructor) => class extended extends constructor {\n        };\n    }\n})();\n\nfunction blessDefinition(definition) {\n    return {\n        identifier: definition.identifier,\n        controllerConstructor: bless(definition.controllerConstructor),\n    };\n}\n\nclass Module {\n    constructor(application, definition) {\n        this.application = application;\n        this.definition = blessDefinition(definition);\n        this.contextsByScope = new WeakMap();\n        this.connectedContexts = new Set();\n    }\n    get identifier() {\n        return this.definition.identifier;\n    }\n    get controllerConstructor() {\n        return this.definition.controllerConstructor;\n    }\n    get contexts() {\n        return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n        const context = this.fetchContextForScope(scope);\n        this.connectedContexts.add(context);\n        context.connect();\n    }\n    disconnectContextForScope(scope) {\n        const context = this.contextsByScope.get(scope);\n        if (context) {\n            this.connectedContexts.delete(context);\n            context.disconnect();\n        }\n    }\n    fetchContextForScope(scope) {\n        let context = this.contextsByScope.get(scope);\n        if (!context) {\n            context = new Context(this, scope);\n            this.contextsByScope.set(scope, context);\n        }\n        return context;\n    }\n}\n\nclass ClassMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    has(name) {\n        return this.data.has(this.getDataKey(name));\n    }\n    get(name) {\n        return this.getAll(name)[0];\n    }\n    getAll(name) {\n        const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n        return tokenize(tokenString);\n    }\n    getAttributeName(name) {\n        return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n    getDataKey(name) {\n        return `${name}-class`;\n    }\n    get data() {\n        return this.scope.data;\n    }\n}\n\nclass DataMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.getAttribute(name);\n    }\n    set(key, value) {\n        const name = this.getAttributeNameForKey(key);\n        this.element.setAttribute(name, value);\n        return this.get(key);\n    }\n    has(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.hasAttribute(name);\n    }\n    delete(key) {\n        if (this.has(key)) {\n            const name = this.getAttributeNameForKey(key);\n            this.element.removeAttribute(name);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    getAttributeNameForKey(key) {\n        return `data-${this.identifier}-${dasherize(key)}`;\n    }\n}\n\nclass Guide {\n    constructor(logger) {\n        this.warnedKeysByObject = new WeakMap();\n        this.logger = logger;\n    }\n    warn(object, key, message) {\n        let warnedKeys = this.warnedKeysByObject.get(object);\n        if (!warnedKeys) {\n            warnedKeys = new Set();\n            this.warnedKeysByObject.set(object, warnedKeys);\n        }\n        if (!warnedKeys.has(key)) {\n            warnedKeys.add(key);\n            this.logger.warn(message, object);\n        }\n    }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(targetName) {\n        return this.find(targetName) != null;\n    }\n    find(...targetNames) {\n        return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n    }\n    findAll(...targetNames) {\n        return targetNames.reduce((targets, targetName) => [\n            ...targets,\n            ...this.findAllTargets(targetName),\n            ...this.findAllLegacyTargets(targetName),\n        ], []);\n    }\n    findTarget(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findElement(selector);\n    }\n    findAllTargets(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector);\n    }\n    getSelectorForTargetName(targetName) {\n        const attributeName = this.schema.targetAttributeForScope(this.identifier);\n        return attributeValueContainsToken(attributeName, targetName);\n    }\n    findLegacyTarget(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n    findAllLegacyTargets(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n    }\n    getLegacySelectorForTargetName(targetName) {\n        const targetDescriptor = `${this.identifier}.${targetName}`;\n        return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n    deprecate(element, targetName) {\n        if (element) {\n            const { identifier } = this;\n            const attributeName = this.schema.targetAttribute;\n            const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n            this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n                `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n        }\n        return element;\n    }\n    get guide() {\n        return this.scope.guide;\n    }\n}\n\nclass OutletSet {\n    constructor(scope, controllerElement) {\n        this.scope = scope;\n        this.controllerElement = controllerElement;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(outletName) {\n        return this.find(outletName) != null;\n    }\n    find(...outletNames) {\n        return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n    }\n    findAll(...outletNames) {\n        return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n    }\n    getSelectorForOutletName(outletName) {\n        const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n        return this.controllerElement.getAttribute(attributeName);\n    }\n    findOutlet(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        if (selector)\n            return this.findElement(selector, outletName);\n    }\n    findAllOutlets(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        return selector ? this.findAllElements(selector, outletName) : [];\n    }\n    findElement(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n    }\n    findAllElements(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName));\n    }\n    matchesElement(element, selector, outletName) {\n        const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n        return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n    }\n}\n\nclass Scope {\n    constructor(schema, element, identifier, logger) {\n        this.targets = new TargetSet(this);\n        this.classes = new ClassMap(this);\n        this.data = new DataMap(this);\n        this.containsElement = (element) => {\n            return element.closest(this.controllerSelector) === this.element;\n        };\n        this.schema = schema;\n        this.element = element;\n        this.identifier = identifier;\n        this.guide = new Guide(logger);\n        this.outlets = new OutletSet(this.documentScope, element);\n    }\n    findElement(selector) {\n        return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n        return [\n            ...(this.element.matches(selector) ? [this.element] : []),\n            ...this.queryElements(selector).filter(this.containsElement),\n        ];\n    }\n    queryElements(selector) {\n        return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controllerSelector() {\n        return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n    get isDocumentScope() {\n        return this.element === document.documentElement;\n    }\n    get documentScope() {\n        return this.isDocumentScope\n            ? this\n            : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n    }\n}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap();\n        this.scopeReferenceCounts = new WeakMap();\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map();\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap();\n        this.modulesByIdentifier = new Map();\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n        const afterLoad = definition.controllerConstructor.afterLoad;\n        if (afterLoad) {\n            afterLoad(definition.identifier, this.application);\n        }\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find((context) => context.element == element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n    outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n    keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n    return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n    constructor(element = document.documentElement, schema = defaultSchema) {\n        this.logger = console;\n        this.debug = false;\n        this.logDebugActivity = (identifier, functionName, detail = {}) => {\n            if (this.debug) {\n                this.logFormattedMessage(identifier, functionName, detail);\n            }\n        };\n        this.element = element;\n        this.schema = schema;\n        this.dispatcher = new Dispatcher(this);\n        this.router = new Router(this);\n        this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n    }\n    static start(element, schema) {\n        const application = new this(element, schema);\n        application.start();\n        return application;\n    }\n    async start() {\n        await domReady();\n        this.logDebugActivity(\"application\", \"starting\");\n        this.dispatcher.start();\n        this.router.start();\n        this.logDebugActivity(\"application\", \"start\");\n    }\n    stop() {\n        this.logDebugActivity(\"application\", \"stopping\");\n        this.dispatcher.stop();\n        this.router.stop();\n        this.logDebugActivity(\"application\", \"stop\");\n    }\n    register(identifier, controllerConstructor) {\n        this.load({ identifier, controllerConstructor });\n    }\n    registerActionOption(name, filter) {\n        this.actionDescriptorFilters[name] = filter;\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach((definition) => {\n            if (definition.controllerConstructor.shouldLoad) {\n                this.router.loadDefinition(definition);\n            }\n        });\n    }\n    unload(head, ...rest) {\n        const identifiers = Array.isArray(head) ? head : [head, ...rest];\n        identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n    }\n    get controllers() {\n        return this.router.contexts.map((context) => context.controller);\n    }\n    getControllerForElementAndIdentifier(element, identifier) {\n        const context = this.router.getContextForElementAndIdentifier(element, identifier);\n        return context ? context.controller : null;\n    }\n    handleError(error, message, detail) {\n        var _a;\n        this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n        (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n    logFormattedMessage(identifier, functionName, detail = {}) {\n        detail = Object.assign({ application: this }, detail);\n        this.logger.groupCollapsed(`${identifier} #${functionName}`);\n        this.logger.log(\"details:\", Object.assign({}, detail));\n        this.logger.groupEnd();\n    }\n}\nfunction domReady() {\n    return new Promise((resolve) => {\n        if (document.readyState == \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", () => resolve());\n        }\n        else {\n            resolve();\n        }\n    });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n    const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n    return classes.reduce((properties, classDefinition) => {\n        return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n    }, {});\n}\nfunction propertiesForClassDefinition(key) {\n    return {\n        [`${key}Class`]: {\n            get() {\n                const { classes } = this;\n                if (classes.has(key)) {\n                    return classes.get(key);\n                }\n                else {\n                    const attribute = classes.getAttributeName(key);\n                    throw new Error(`Missing attribute \"${attribute}\"`);\n                }\n            },\n        },\n        [`${key}Classes`]: {\n            get() {\n                return this.classes.getAll(key);\n            },\n        },\n        [`has${capitalize(key)}Class`]: {\n            get() {\n                return this.classes.has(key);\n            },\n        },\n    };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n    const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n    return outlets.reduce((properties, outletDefinition) => {\n        return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n    }, {});\n}\nfunction propertiesForOutletDefinition(name) {\n    const camelizedName = namespaceCamelize(name);\n    return {\n        [`${camelizedName}Outlet`]: {\n            get() {\n                const outlet = this.outlets.find(name);\n                if (outlet) {\n                    const outletController = this.application.getControllerForElementAndIdentifier(outlet, name);\n                    if (outletController) {\n                        return outletController;\n                    }\n                    else {\n                        throw new Error(`Missing \"data-controller=${name}\" attribute on outlet element for \"${this.identifier}\" controller`);\n                    }\n                }\n                throw new Error(`Missing outlet element \"${name}\" for \"${this.identifier}\" controller`);\n            },\n        },\n        [`${camelizedName}Outlets`]: {\n            get() {\n                const outlets = this.outlets.findAll(name);\n                if (outlets.length > 0) {\n                    return outlets\n                        .map((outlet) => {\n                        const controller = this.application.getControllerForElementAndIdentifier(outlet, name);\n                        if (controller) {\n                            return controller;\n                        }\n                        else {\n                            console.warn(`The provided outlet element is missing the outlet controller \"${name}\" for \"${this.identifier}\"`, outlet);\n                        }\n                    })\n                        .filter((controller) => controller);\n                }\n                return [];\n            },\n        },\n        [`${camelizedName}OutletElement`]: {\n            get() {\n                const outlet = this.outlets.find(name);\n                if (outlet) {\n                    return outlet;\n                }\n                else {\n                    throw new Error(`Missing outlet element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            },\n        },\n        [`${camelizedName}OutletElements`]: {\n            get() {\n                return this.outlets.findAll(name);\n            },\n        },\n        [`has${capitalize(camelizedName)}Outlet`]: {\n            get() {\n                return this.outlets.has(name);\n            },\n        },\n    };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n    const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n    return targets.reduce((properties, targetDefinition) => {\n        return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n    }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n    return {\n        [`${name}Target`]: {\n            get() {\n                const target = this.targets.find(name);\n                if (target) {\n                    return target;\n                }\n                else {\n                    throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            },\n        },\n        [`${name}Targets`]: {\n            get() {\n                return this.targets.findAll(name);\n            },\n        },\n        [`has${capitalize(name)}Target`]: {\n            get() {\n                return this.targets.has(name);\n            },\n        },\n    };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n    const propertyDescriptorMap = {\n        valueDescriptorMap: {\n            get() {\n                return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n                    const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n                    const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n                    return Object.assign(result, { [attributeName]: valueDescriptor });\n                }, {});\n            },\n        },\n    };\n    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n        return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n    }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n    const { key, name, reader: read, writer: write } = definition;\n    return {\n        [name]: {\n            get() {\n                const value = this.data.get(key);\n                if (value !== null) {\n                    return read(value);\n                }\n                else {\n                    return definition.defaultValue;\n                }\n            },\n            set(value) {\n                if (value === undefined) {\n                    this.data.delete(key);\n                }\n                else {\n                    this.data.set(key, write(value));\n                }\n            },\n        },\n        [`has${capitalize(name)}`]: {\n            get() {\n                return this.data.has(key) || definition.hasCustomDefaultValue;\n            },\n        },\n    };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n    return valueDescriptorForTokenAndTypeDefinition({\n        controller,\n        token,\n        typeDefinition,\n    });\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array:\n            return \"array\";\n        case Boolean:\n            return \"boolean\";\n        case Number:\n            return \"number\";\n        case Object:\n            return \"object\";\n        case String:\n            return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\":\n            return \"boolean\";\n        case \"number\":\n            return \"number\";\n        case \"string\":\n            return \"string\";\n    }\n    if (Array.isArray(defaultValue))\n        return \"array\";\n    if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n        return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n    const typeFromObject = parseValueTypeConstant(payload.typeObject.type);\n    if (!typeFromObject)\n        return;\n    const defaultValueType = parseValueTypeDefault(payload.typeObject.default);\n    if (typeFromObject !== defaultValueType) {\n        const propertyPath = payload.controller ? `${payload.controller}.${payload.token}` : payload.token;\n        throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${payload.typeObject.default}\" is of type \"${defaultValueType}\".`);\n    }\n    return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n    const typeFromObject = parseValueTypeObject({\n        controller: payload.controller,\n        token: payload.token,\n        typeObject: payload.typeDefinition,\n    });\n    const typeFromDefaultValue = parseValueTypeDefault(payload.typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(payload.typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    const propertyPath = payload.controller ? `${payload.controller}.${payload.typeDefinition}` : payload.token;\n    throw new Error(`Unknown value type \"${propertyPath}\" for \"${payload.token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const defaultValue = typeDefinition.default;\n    if (defaultValue !== undefined)\n        return defaultValue;\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n    const key = `${dasherize(payload.token)}-value`;\n    const type = parseValueTypeDefinition(payload);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() {\n            return defaultValueForDefinition(payload.typeDefinition);\n        },\n        get hasCustomDefaultValue() {\n            return parseValueTypeDefault(payload.typeDefinition) !== undefined;\n        },\n        reader: readers[type],\n        writer: writers[type] || writers.default,\n    };\n}\nconst defaultValuesByType = {\n    get array() {\n        return [];\n    },\n    boolean: false,\n    number: 0,\n    get object() {\n        return {};\n    },\n    string: \"\",\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n    },\n    number(value) {\n        return Number(value);\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n        }\n        return object;\n    },\n    string(value) {\n        return value;\n    },\n};\nconst writers = {\n    default: writeString,\n    array: writeJSON,\n    object: writeJSON,\n};\nfunction writeJSON(value) {\n    return JSON.stringify(value);\n}\nfunction writeString(value) {\n    return `${value}`;\n}\n\nclass Controller {\n    constructor(context) {\n        this.context = context;\n    }\n    static get shouldLoad() {\n        return true;\n    }\n    static afterLoad(_identifier, _application) {\n        return;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get targets() {\n        return this.scope.targets;\n    }\n    get outlets() {\n        return this.scope.outlets;\n    }\n    get classes() {\n        return this.scope.classes;\n    }\n    get data() {\n        return this.scope.data;\n    }\n    initialize() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true } = {}) {\n        const type = prefix ? `${prefix}:${eventName}` : eventName;\n        const event = new CustomEvent(type, { detail, bubbles, cancelable });\n        target.dispatchEvent(event);\n        return event;\n    }\n}\nController.blessings = [\n    ClassPropertiesBlessing,\n    TargetPropertiesBlessing,\n    ValuePropertiesBlessing,\n    OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "import { Application } from \"@hotwired/stimulus\"\n\nconst application = Application.start()\n\n// Configure Stimulus development experience\napplication.warnings = true\napplication.debug    = false\nwindow.Stimulus      = application\n\nexport { application }\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  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", "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 response = new FetchResponse(await window.fetch(this.url, this.fetchOptions))\n\n    if (response.unauthenticated && response.authenticationURL) {\n      return Promise.reject(window.location.href = response.authenticationURL)\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:')) {\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    }\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      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 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 } from \"@rails/request.js\";\n\n// Connects to data-controller=\"appointment-request-form\"\nexport default class extends Controller {\n  static values = {\n    url: String,\n  };\n\n  static targets = [\"requestedDate\", \"appointmentType\"];\n\n  patientChanged(event) {\n    if (!event.detail.value) return;\n\n    let url = this.urlValue;\n    url += `/available_incidents?patient_id=${event.detail.value}`;\n\n    get(url, {\n      responseKind: \"turbo-stream\",\n    });\n  }\n\n  locationChanged(event) {\n    if (!event.target.value) return;\n\n    let url = this.urlValue;\n    url += `/available_appointment_types?location_id=${event.target.value}`;\n\n    get(url, {\n      responseKind: \"turbo-stream\",\n    });\n  }\n\n  getAvailableTimes() {\n    if (!this.appointmentTypeTarget.value) return;\n    if (!this.requestedDateTarget.value) return;\n\n    let url = this.urlValue;\n    url += `/available_appointment_times?appointment_type_id=${this.appointmentTypeTarget.value}&requested_date=${this.requestedDateTarget.value}`;\n\n    console.log(url);\n\n    get(url, {\n      responseKind: \"turbo-stream\",\n    });\n  }\n}\n", "export var HOOKS = [\n    \"onChange\",\n    \"onClose\",\n    \"onDayCreate\",\n    \"onDestroy\",\n    \"onKeyDown\",\n    \"onMonthChange\",\n    \"onOpen\",\n    \"onParseConfig\",\n    \"onReady\",\n    \"onValueUpdate\",\n    \"onYearChange\",\n    \"onPreCalendarPosition\",\n];\nexport var defaults = {\n    _disable: [],\n    allowInput: false,\n    allowInvalidPreload: false,\n    altFormat: \"F j, Y\",\n    altInput: false,\n    altInputClass: \"form-control input\",\n    animate: typeof window === \"object\" &&\n        window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n    ariaDateFormat: \"F j, Y\",\n    autoFillDefaultTime: true,\n    clickOpens: true,\n    closeOnSelect: true,\n    conjunction: \", \",\n    dateFormat: \"Y-m-d\",\n    defaultHour: 12,\n    defaultMinute: 0,\n    defaultSeconds: 0,\n    disable: [],\n    disableMobile: false,\n    enableSeconds: false,\n    enableTime: false,\n    errorHandler: function (err) {\n        return typeof console !== \"undefined\" && console.warn(err);\n    },\n    getWeek: function (givenDate) {\n        var date = new Date(givenDate.getTime());\n        date.setHours(0, 0, 0, 0);\n        date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n        var week1 = new Date(date.getFullYear(), 0, 4);\n        return (1 +\n            Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n                3 +\n                ((week1.getDay() + 6) % 7)) /\n                7));\n    },\n    hourIncrement: 1,\n    ignoredFocusElements: [],\n    inline: false,\n    locale: \"default\",\n    minuteIncrement: 5,\n    mode: \"single\",\n    monthSelectorType: \"dropdown\",\n    nextArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>\",\n    noCalendar: false,\n    now: new Date(),\n    onChange: [],\n    onClose: [],\n    onDayCreate: [],\n    onDestroy: [],\n    onKeyDown: [],\n    onMonthChange: [],\n    onOpen: [],\n    onParseConfig: [],\n    onReady: [],\n    onValueUpdate: [],\n    onYearChange: [],\n    onPreCalendarPosition: [],\n    plugins: [],\n    position: \"auto\",\n    positionElement: undefined,\n    prevArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>\",\n    shorthandCurrentMonth: false,\n    showMonths: 1,\n    static: false,\n    time_24hr: false,\n    weekNumbers: false,\n    wrap: false,\n};\n", "export var english = {\n    weekdays: {\n        shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n        longhand: [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\",\n        ],\n    },\n    months: {\n        shorthand: [\n            \"Jan\",\n            \"Feb\",\n            \"Mar\",\n            \"Apr\",\n            \"May\",\n            \"Jun\",\n            \"Jul\",\n            \"Aug\",\n            \"Sep\",\n            \"Oct\",\n            \"Nov\",\n            \"Dec\",\n        ],\n        longhand: [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\",\n        ],\n    },\n    daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n    firstDayOfWeek: 0,\n    ordinal: function (nth) {\n        var s = nth % 100;\n        if (s > 3 && s < 21)\n            return \"th\";\n        switch (s % 10) {\n            case 1:\n                return \"st\";\n            case 2:\n                return \"nd\";\n            case 3:\n                return \"rd\";\n            default:\n                return \"th\";\n        }\n    },\n    rangeSeparator: \" to \",\n    weekAbbreviation: \"Wk\",\n    scrollTitle: \"Scroll to increment\",\n    toggleTitle: \"Click to toggle\",\n    amPM: [\"AM\", \"PM\"],\n    yearAriaLabel: \"Year\",\n    monthAriaLabel: \"Month\",\n    hourAriaLabel: \"Hour\",\n    minuteAriaLabel: \"Minute\",\n    time_24hr: false,\n};\nexport default english;\n", "export var pad = function (number, length) {\n    if (length === void 0) { length = 2; }\n    return (\"000\" + number).slice(length * -1);\n};\nexport var int = function (bool) { return (bool === true ? 1 : 0); };\nexport function debounce(fn, wait) {\n    var t;\n    return function () {\n        var _this = this;\n        var args = arguments;\n        clearTimeout(t);\n        t = setTimeout(function () { return fn.apply(_this, args); }, wait);\n    };\n}\nexport var arrayify = function (obj) {\n    return obj instanceof Array ? obj : [obj];\n};\n", "export function toggleClass(elem, className, bool) {\n    if (bool === true)\n        return elem.classList.add(className);\n    elem.classList.remove(className);\n}\nexport function createElement(tag, className, content) {\n    var e = window.document.createElement(tag);\n    className = className || \"\";\n    content = content || \"\";\n    e.className = className;\n    if (content !== undefined)\n        e.textContent = content;\n    return e;\n}\nexport function clearNode(node) {\n    while (node.firstChild)\n        node.removeChild(node.firstChild);\n}\nexport function findParent(node, condition) {\n    if (condition(node))\n        return node;\n    else if (node.parentNode)\n        return findParent(node.parentNode, condition);\n    return undefined;\n}\nexport function createNumberInput(inputClassName, opts) {\n    var wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n    if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n        numInput.type = \"number\";\n    }\n    else {\n        numInput.type = \"text\";\n        numInput.pattern = \"\\\\d*\";\n    }\n    if (opts !== undefined)\n        for (var key in opts)\n            numInput.setAttribute(key, opts[key]);\n    wrapper.appendChild(numInput);\n    wrapper.appendChild(arrowUp);\n    wrapper.appendChild(arrowDown);\n    return wrapper;\n}\nexport function getEventTarget(event) {\n    try {\n        if (typeof event.composedPath === \"function\") {\n            var path = event.composedPath();\n            return path[0];\n        }\n        return event.target;\n    }\n    catch (error) {\n        return event.target;\n    }\n}\n", "import { int, pad } from \"../utils\";\nvar doNothing = function () { return undefined; };\nexport var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\nexport var revFormat = {\n    D: doNothing,\n    F: function (dateObj, monthName, locale) {\n        dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n    },\n    G: function (dateObj, hour) {\n        dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n    },\n    H: function (dateObj, hour) {\n        dateObj.setHours(parseFloat(hour));\n    },\n    J: function (dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n    },\n    K: function (dateObj, amPM, locale) {\n        dateObj.setHours((dateObj.getHours() % 12) +\n            12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n    },\n    M: function (dateObj, shortMonth, locale) {\n        dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n    },\n    S: function (dateObj, seconds) {\n        dateObj.setSeconds(parseFloat(seconds));\n    },\n    U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },\n    W: function (dateObj, weekNum, locale) {\n        var weekNumber = parseInt(weekNum);\n        var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n        date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n        return date;\n    },\n    Y: function (dateObj, year) {\n        dateObj.setFullYear(parseFloat(year));\n    },\n    Z: function (_, ISODate) { return new Date(ISODate); },\n    d: function (dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n    },\n    h: function (dateObj, hour) {\n        dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n    },\n    i: function (dateObj, minutes) {\n        dateObj.setMinutes(parseFloat(minutes));\n    },\n    j: function (dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n    },\n    l: doNothing,\n    m: function (dateObj, month) {\n        dateObj.setMonth(parseFloat(month) - 1);\n    },\n    n: function (dateObj, month) {\n        dateObj.setMonth(parseFloat(month) - 1);\n    },\n    s: function (dateObj, seconds) {\n        dateObj.setSeconds(parseFloat(seconds));\n    },\n    u: function (_, unixMillSeconds) {\n        return new Date(parseFloat(unixMillSeconds));\n    },\n    w: doNothing,\n    y: function (dateObj, year) {\n        dateObj.setFullYear(2000 + parseFloat(year));\n    },\n};\nexport var tokenRegex = {\n    D: \"\",\n    F: \"\",\n    G: \"(\\\\d\\\\d|\\\\d)\",\n    H: \"(\\\\d\\\\d|\\\\d)\",\n    J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n    K: \"\",\n    M: \"\",\n    S: \"(\\\\d\\\\d|\\\\d)\",\n    U: \"(.+)\",\n    W: \"(\\\\d\\\\d|\\\\d)\",\n    Y: \"(\\\\d{4})\",\n    Z: \"(.+)\",\n    d: \"(\\\\d\\\\d|\\\\d)\",\n    h: \"(\\\\d\\\\d|\\\\d)\",\n    i: \"(\\\\d\\\\d|\\\\d)\",\n    j: \"(\\\\d\\\\d|\\\\d)\",\n    l: \"\",\n    m: \"(\\\\d\\\\d|\\\\d)\",\n    n: \"(\\\\d\\\\d|\\\\d)\",\n    s: \"(\\\\d\\\\d|\\\\d)\",\n    u: \"(.+)\",\n    w: \"(\\\\d\\\\d|\\\\d)\",\n    y: \"(\\\\d{2})\",\n};\nexport var formats = {\n    Z: function (date) { return date.toISOString(); },\n    D: function (date, locale, options) {\n        return locale.weekdays.shorthand[formats.w(date, locale, options)];\n    },\n    F: function (date, locale, options) {\n        return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n    },\n    G: function (date, locale, options) {\n        return pad(formats.h(date, locale, options));\n    },\n    H: function (date) { return pad(date.getHours()); },\n    J: function (date, locale) {\n        return locale.ordinal !== undefined\n            ? date.getDate() + locale.ordinal(date.getDate())\n            : date.getDate();\n    },\n    K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },\n    M: function (date, locale) {\n        return monthToStr(date.getMonth(), true, locale);\n    },\n    S: function (date) { return pad(date.getSeconds()); },\n    U: function (date) { return date.getTime() / 1000; },\n    W: function (date, _, options) {\n        return options.getWeek(date);\n    },\n    Y: function (date) { return pad(date.getFullYear(), 4); },\n    d: function (date) { return pad(date.getDate()); },\n    h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },\n    i: function (date) { return pad(date.getMinutes()); },\n    j: function (date) { return date.getDate(); },\n    l: function (date, locale) {\n        return locale.weekdays.longhand[date.getDay()];\n    },\n    m: function (date) { return pad(date.getMonth() + 1); },\n    n: function (date) { return date.getMonth() + 1; },\n    s: function (date) { return date.getSeconds(); },\n    u: function (date) { return date.getTime(); },\n    w: function (date) { return date.getDay(); },\n    y: function (date) { return String(date.getFullYear()).substring(2); },\n};\n", "import { tokenRegex, revFormat, formats, } from \"./formatting\";\nimport { defaults } from \"../types/options\";\nimport { english } from \"../l10n/default\";\nexport var createDateFormatter = function (_a) {\n    var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d;\n    return function (dateObj, frmt, overrideLocale) {\n        var locale = overrideLocale || l10n;\n        if (config.formatDate !== undefined && !isMobile) {\n            return config.formatDate(dateObj, frmt, locale);\n        }\n        return frmt\n            .split(\"\")\n            .map(function (c, i, arr) {\n            return formats[c] && arr[i - 1] !== \"\\\\\"\n                ? formats[c](dateObj, locale, config)\n                : c !== \"\\\\\"\n                    ? c\n                    : \"\";\n        })\n            .join(\"\");\n    };\n};\nexport var createDateParser = function (_a) {\n    var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n    return function (date, givenFormat, timeless, customLocale) {\n        if (date !== 0 && !date)\n            return undefined;\n        var locale = customLocale || l10n;\n        var parsedDate;\n        var dateOrig = date;\n        if (date instanceof Date)\n            parsedDate = new Date(date.getTime());\n        else if (typeof date !== \"string\" &&\n            date.toFixed !== undefined)\n            parsedDate = new Date(date);\n        else if (typeof date === \"string\") {\n            var format = givenFormat || (config || defaults).dateFormat;\n            var datestr = String(date).trim();\n            if (datestr === \"today\") {\n                parsedDate = new Date();\n                timeless = true;\n            }\n            else if (config && config.parseDate) {\n                parsedDate = config.parseDate(date, format);\n            }\n            else if (/Z$/.test(datestr) ||\n                /GMT$/.test(datestr)) {\n                parsedDate = new Date(date);\n            }\n            else {\n                var matched = void 0, ops = [];\n                for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n                    var token = format[i];\n                    var isBackSlash = token === \"\\\\\";\n                    var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n                    if (tokenRegex[token] && !escaped) {\n                        regexStr += tokenRegex[token];\n                        var match = new RegExp(regexStr).exec(date);\n                        if (match && (matched = true)) {\n                            ops[token !== \"Y\" ? \"push\" : \"unshift\"]({\n                                fn: revFormat[token],\n                                val: match[++matchIndex],\n                            });\n                        }\n                    }\n                    else if (!isBackSlash)\n                        regexStr += \".\";\n                }\n                parsedDate =\n                    !config || !config.noCalendar\n                        ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n                        : new Date(new Date().setHours(0, 0, 0, 0));\n                ops.forEach(function (_a) {\n                    var fn = _a.fn, val = _a.val;\n                    return (parsedDate = fn(parsedDate, val, locale) || parsedDate);\n                });\n                parsedDate = matched ? parsedDate : undefined;\n            }\n        }\n        if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n            config.errorHandler(new Error(\"Invalid date provided: \" + dateOrig));\n            return undefined;\n        }\n        if (timeless === true)\n            parsedDate.setHours(0, 0, 0, 0);\n        return parsedDate;\n    };\n};\nexport function compareDates(date1, date2, timeless) {\n    if (timeless === void 0) { timeless = true; }\n    if (timeless !== false) {\n        return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n            new Date(date2.getTime()).setHours(0, 0, 0, 0));\n    }\n    return date1.getTime() - date2.getTime();\n}\nexport function compareTimes(date1, date2) {\n    return (3600 * (date1.getHours() - date2.getHours()) +\n        60 * (date1.getMinutes() - date2.getMinutes()) +\n        date1.getSeconds() -\n        date2.getSeconds());\n}\nexport var isBetween = function (ts, ts1, ts2) {\n    return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n};\nexport var calculateSecondsSinceMidnight = function (hours, minutes, seconds) {\n    return hours * 3600 + minutes * 60 + seconds;\n};\nexport var parseSeconds = function (secondsSinceMidnight) {\n    var hours = Math.floor(secondsSinceMidnight / 3600), minutes = (secondsSinceMidnight - hours * 3600) / 60;\n    return [hours, minutes, secondsSinceMidnight - hours * 3600 - minutes * 60];\n};\nexport var duration = {\n    DAY: 86400000,\n};\nexport function getDefaultHours(config) {\n    var hours = config.defaultHour;\n    var minutes = config.defaultMinute;\n    var seconds = config.defaultSeconds;\n    if (config.minDate !== undefined) {\n        var minHour = config.minDate.getHours();\n        var minMinutes = config.minDate.getMinutes();\n        var minSeconds = config.minDate.getSeconds();\n        if (hours < minHour) {\n            hours = minHour;\n        }\n        if (hours === minHour && minutes < minMinutes) {\n            minutes = minMinutes;\n        }\n        if (hours === minHour && minutes === minMinutes && seconds < minSeconds)\n            seconds = config.minDate.getSeconds();\n    }\n    if (config.maxDate !== undefined) {\n        var maxHr = config.maxDate.getHours();\n        var maxMinutes = config.maxDate.getMinutes();\n        hours = Math.min(hours, maxHr);\n        if (hours === maxHr)\n            minutes = Math.min(maxMinutes, minutes);\n        if (hours === maxHr && minutes === maxMinutes)\n            seconds = config.maxDate.getSeconds();\n    }\n    return { hours: hours, minutes: minutes, seconds: seconds };\n}\n", "\"use strict\";\nif (typeof Object.assign !== \"function\") {\n    Object.assign = function (target) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        if (!target) {\n            throw TypeError(\"Cannot convert undefined or null to object\");\n        }\n        var _loop_1 = function (source) {\n            if (source) {\n                Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });\n            }\n        };\n        for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n            var source = args_1[_a];\n            _loop_1(source);\n        }\n        return target;\n    };\n}\n", "var __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n            r[k] = a[j];\n    return r;\n};\nimport { defaults as defaultOptions, HOOKS, } from \"./types/options\";\nimport English from \"./l10n/default\";\nimport { arrayify, debounce, int, pad } from \"./utils\";\nimport { clearNode, createElement, createNumberInput, findParent, toggleClass, getEventTarget, } from \"./utils/dom\";\nimport { compareDates, createDateParser, createDateFormatter, duration, isBetween, getDefaultHours, calculateSecondsSinceMidnight, parseSeconds, } from \"./utils/dates\";\nimport { tokenRegex, monthToStr } from \"./utils/formatting\";\nimport \"./utils/polyfills\";\nvar DEBOUNCED_CHANGE_MS = 300;\nfunction FlatpickrInstance(element, instanceConfig) {\n    var self = {\n        config: __assign(__assign({}, defaultOptions), flatpickr.defaultConfig),\n        l10n: English,\n    };\n    self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n    self._handlers = [];\n    self.pluginElements = [];\n    self.loadedPlugins = [];\n    self._bind = bind;\n    self._setHoursFromDate = setHoursFromDate;\n    self._positionCalendar = positionCalendar;\n    self.changeMonth = changeMonth;\n    self.changeYear = changeYear;\n    self.clear = clear;\n    self.close = close;\n    self.onMouseOver = onMouseOver;\n    self._createElement = createElement;\n    self.createDay = createDay;\n    self.destroy = destroy;\n    self.isEnabled = isEnabled;\n    self.jumpToDate = jumpToDate;\n    self.updateValue = updateValue;\n    self.open = open;\n    self.redraw = redraw;\n    self.set = set;\n    self.setDate = setDate;\n    self.toggle = toggle;\n    function setupHelperFunctions() {\n        self.utils = {\n            getDaysInMonth: function (month, yr) {\n                if (month === void 0) { month = self.currentMonth; }\n                if (yr === void 0) { yr = self.currentYear; }\n                if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n                    return 29;\n                return self.l10n.daysInMonth[month];\n            },\n        };\n    }\n    function init() {\n        self.element = self.input = element;\n        self.isOpen = false;\n        parseConfig();\n        setupLocale();\n        setupInputs();\n        setupDates();\n        setupHelperFunctions();\n        if (!self.isMobile)\n            build();\n        bindEvents();\n        if (self.selectedDates.length || self.config.noCalendar) {\n            if (self.config.enableTime) {\n                setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);\n            }\n            updateValue(false);\n        }\n        setCalendarWidth();\n        var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n        if (!self.isMobile && isSafari) {\n            positionCalendar();\n        }\n        triggerEvent(\"onReady\");\n    }\n    function getClosestActiveElement() {\n        var _a;\n        return (((_a = self.calendarContainer) === null || _a === void 0 ? void 0 : _a.getRootNode())\n            .activeElement || document.activeElement);\n    }\n    function bindToInstance(fn) {\n        return fn.bind(self);\n    }\n    function setCalendarWidth() {\n        var config = self.config;\n        if (config.weekNumbers === false && config.showMonths === 1) {\n            return;\n        }\n        else if (config.noCalendar !== true) {\n            window.requestAnimationFrame(function () {\n                if (self.calendarContainer !== undefined) {\n                    self.calendarContainer.style.visibility = \"hidden\";\n                    self.calendarContainer.style.display = \"block\";\n                }\n                if (self.daysContainer !== undefined) {\n                    var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n                    self.daysContainer.style.width = daysWidth + \"px\";\n                    self.calendarContainer.style.width =\n                        daysWidth +\n                            (self.weekWrapper !== undefined\n                                ? self.weekWrapper.offsetWidth\n                                : 0) +\n                            \"px\";\n                    self.calendarContainer.style.removeProperty(\"visibility\");\n                    self.calendarContainer.style.removeProperty(\"display\");\n                }\n            });\n        }\n    }\n    function updateTime(e) {\n        if (self.selectedDates.length === 0) {\n            var defaultDate = self.config.minDate === undefined ||\n                compareDates(new Date(), self.config.minDate) >= 0\n                ? new Date()\n                : new Date(self.config.minDate.getTime());\n            var defaults = getDefaultHours(self.config);\n            defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());\n            self.selectedDates = [defaultDate];\n            self.latestSelectedDateObj = defaultDate;\n        }\n        if (e !== undefined && e.type !== \"blur\") {\n            timeWrapper(e);\n        }\n        var prevValue = self._input.value;\n        setHoursFromInputs();\n        updateValue();\n        if (self._input.value !== prevValue) {\n            self._debouncedChange();\n        }\n    }\n    function ampm2military(hour, amPM) {\n        return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n    }\n    function military2ampm(hour) {\n        switch (hour % 24) {\n            case 0:\n            case 12:\n                return 12;\n            default:\n                return hour % 12;\n        }\n    }\n    function setHoursFromInputs() {\n        if (self.hourElement === undefined || self.minuteElement === undefined)\n            return;\n        var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n            ? (parseInt(self.secondElement.value, 10) || 0) % 60\n            : 0;\n        if (self.amPM !== undefined) {\n            hours = ampm2military(hours, self.amPM.textContent);\n        }\n        var limitMinHours = self.config.minTime !== undefined ||\n            (self.config.minDate &&\n                self.minDateHasTime &&\n                self.latestSelectedDateObj &&\n                compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n                    0);\n        var limitMaxHours = self.config.maxTime !== undefined ||\n            (self.config.maxDate &&\n                self.maxDateHasTime &&\n                self.latestSelectedDateObj &&\n                compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n                    0);\n        if (self.config.maxTime !== undefined &&\n            self.config.minTime !== undefined &&\n            self.config.minTime > self.config.maxTime) {\n            var minBound = calculateSecondsSinceMidnight(self.config.minTime.getHours(), self.config.minTime.getMinutes(), self.config.minTime.getSeconds());\n            var maxBound = calculateSecondsSinceMidnight(self.config.maxTime.getHours(), self.config.maxTime.getMinutes(), self.config.maxTime.getSeconds());\n            var currentTime = calculateSecondsSinceMidnight(hours, minutes, seconds);\n            if (currentTime > maxBound && currentTime < minBound) {\n                var result = parseSeconds(minBound);\n                hours = result[0];\n                minutes = result[1];\n                seconds = result[2];\n            }\n        }\n        else {\n            if (limitMaxHours) {\n                var maxTime = self.config.maxTime !== undefined\n                    ? self.config.maxTime\n                    : self.config.maxDate;\n                hours = Math.min(hours, maxTime.getHours());\n                if (hours === maxTime.getHours())\n                    minutes = Math.min(minutes, maxTime.getMinutes());\n                if (minutes === maxTime.getMinutes())\n                    seconds = Math.min(seconds, maxTime.getSeconds());\n            }\n            if (limitMinHours) {\n                var minTime = self.config.minTime !== undefined\n                    ? self.config.minTime\n                    : self.config.minDate;\n                hours = Math.max(hours, minTime.getHours());\n                if (hours === minTime.getHours() && minutes < minTime.getMinutes())\n                    minutes = minTime.getMinutes();\n                if (minutes === minTime.getMinutes())\n                    seconds = Math.max(seconds, minTime.getSeconds());\n            }\n        }\n        setHours(hours, minutes, seconds);\n    }\n    function setHoursFromDate(dateObj) {\n        var date = dateObj || self.latestSelectedDateObj;\n        if (date && date instanceof Date) {\n            setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n        }\n    }\n    function setHours(hours, minutes, seconds) {\n        if (self.latestSelectedDateObj !== undefined) {\n            self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n        }\n        if (!self.hourElement || !self.minuteElement || self.isMobile)\n            return;\n        self.hourElement.value = pad(!self.config.time_24hr\n            ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n            : hours);\n        self.minuteElement.value = pad(minutes);\n        if (self.amPM !== undefined)\n            self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n        if (self.secondElement !== undefined)\n            self.secondElement.value = pad(seconds);\n    }\n    function onYearInput(event) {\n        var eventTarget = getEventTarget(event);\n        var year = parseInt(eventTarget.value) + (event.delta || 0);\n        if (year / 1000 > 1 ||\n            (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n            changeYear(year);\n        }\n    }\n    function bind(element, event, handler, options) {\n        if (event instanceof Array)\n            return event.forEach(function (ev) { return bind(element, ev, handler, options); });\n        if (element instanceof Array)\n            return element.forEach(function (el) { return bind(el, event, handler, options); });\n        element.addEventListener(event, handler, options);\n        self._handlers.push({\n            remove: function () { return element.removeEventListener(event, handler, options); },\n        });\n    }\n    function triggerChange() {\n        triggerEvent(\"onChange\");\n    }\n    function bindEvents() {\n        if (self.config.wrap) {\n            [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n                Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n                    return bind(el, \"click\", self[evt]);\n                });\n            });\n        }\n        if (self.isMobile) {\n            setupMobile();\n            return;\n        }\n        var debouncedResize = debounce(onResize, 50);\n        self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n        if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n            bind(self.daysContainer, \"mouseover\", function (e) {\n                if (self.config.mode === \"range\")\n                    onMouseOver(getEventTarget(e));\n            });\n        bind(self._input, \"keydown\", onKeyDown);\n        if (self.calendarContainer !== undefined) {\n            bind(self.calendarContainer, \"keydown\", onKeyDown);\n        }\n        if (!self.config.inline && !self.config.static)\n            bind(window, \"resize\", debouncedResize);\n        if (window.ontouchstart !== undefined)\n            bind(window.document, \"touchstart\", documentClick);\n        else\n            bind(window.document, \"mousedown\", documentClick);\n        bind(window.document, \"focus\", documentClick, { capture: true });\n        if (self.config.clickOpens === true) {\n            bind(self._input, \"focus\", self.open);\n            bind(self._input, \"click\", self.open);\n        }\n        if (self.daysContainer !== undefined) {\n            bind(self.monthNav, \"click\", onMonthNavClick);\n            bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n            bind(self.daysContainer, \"click\", selectDate);\n        }\n        if (self.timeContainer !== undefined &&\n            self.minuteElement !== undefined &&\n            self.hourElement !== undefined) {\n            var selText = function (e) {\n                return getEventTarget(e).select();\n            };\n            bind(self.timeContainer, [\"increment\"], updateTime);\n            bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n            bind(self.timeContainer, \"click\", timeIncrement);\n            bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n            if (self.secondElement !== undefined)\n                bind(self.secondElement, \"focus\", function () { return self.secondElement && self.secondElement.select(); });\n            if (self.amPM !== undefined) {\n                bind(self.amPM, \"click\", function (e) {\n                    updateTime(e);\n                });\n            }\n        }\n        if (self.config.allowInput) {\n            bind(self._input, \"blur\", onBlur);\n        }\n    }\n    function jumpToDate(jumpDate, triggerChange) {\n        var jumpTo = jumpDate !== undefined\n            ? self.parseDate(jumpDate)\n            : self.latestSelectedDateObj ||\n                (self.config.minDate && self.config.minDate > self.now\n                    ? self.config.minDate\n                    : self.config.maxDate && self.config.maxDate < self.now\n                        ? self.config.maxDate\n                        : self.now);\n        var oldYear = self.currentYear;\n        var oldMonth = self.currentMonth;\n        try {\n            if (jumpTo !== undefined) {\n                self.currentYear = jumpTo.getFullYear();\n                self.currentMonth = jumpTo.getMonth();\n            }\n        }\n        catch (e) {\n            e.message = \"Invalid date supplied: \" + jumpTo;\n            self.config.errorHandler(e);\n        }\n        if (triggerChange && self.currentYear !== oldYear) {\n            triggerEvent(\"onYearChange\");\n            buildMonthSwitch();\n        }\n        if (triggerChange &&\n            (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n            triggerEvent(\"onMonthChange\");\n        }\n        self.redraw();\n    }\n    function timeIncrement(e) {\n        var eventTarget = getEventTarget(e);\n        if (~eventTarget.className.indexOf(\"arrow\"))\n            incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n    }\n    function incrementNumInput(e, delta, inputElem) {\n        var target = e && getEventTarget(e);\n        var input = inputElem ||\n            (target && target.parentNode && target.parentNode.firstChild);\n        var event = createEvent(\"increment\");\n        event.delta = delta;\n        input && input.dispatchEvent(event);\n    }\n    function build() {\n        var fragment = window.document.createDocumentFragment();\n        self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n        self.calendarContainer.tabIndex = -1;\n        if (!self.config.noCalendar) {\n            fragment.appendChild(buildMonthNav());\n            self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n            if (self.config.weekNumbers) {\n                var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;\n                self.innerContainer.appendChild(weekWrapper);\n                self.weekNumbers = weekNumbers;\n                self.weekWrapper = weekWrapper;\n            }\n            self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n            self.rContainer.appendChild(buildWeekdays());\n            if (!self.daysContainer) {\n                self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n                self.daysContainer.tabIndex = -1;\n            }\n            buildDays();\n            self.rContainer.appendChild(self.daysContainer);\n            self.innerContainer.appendChild(self.rContainer);\n            fragment.appendChild(self.innerContainer);\n        }\n        if (self.config.enableTime) {\n            fragment.appendChild(buildTime());\n        }\n        toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n        toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n        toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n        self.calendarContainer.appendChild(fragment);\n        var customAppend = self.config.appendTo !== undefined &&\n            self.config.appendTo.nodeType !== undefined;\n        if (self.config.inline || self.config.static) {\n            self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n            if (self.config.inline) {\n                if (!customAppend && self.element.parentNode)\n                    self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n                else if (self.config.appendTo !== undefined)\n                    self.config.appendTo.appendChild(self.calendarContainer);\n            }\n            if (self.config.static) {\n                var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n                if (self.element.parentNode)\n                    self.element.parentNode.insertBefore(wrapper, self.element);\n                wrapper.appendChild(self.element);\n                if (self.altInput)\n                    wrapper.appendChild(self.altInput);\n                wrapper.appendChild(self.calendarContainer);\n            }\n        }\n        if (!self.config.static && !self.config.inline)\n            (self.config.appendTo !== undefined\n                ? self.config.appendTo\n                : window.document.body).appendChild(self.calendarContainer);\n    }\n    function createDay(className, date, _dayNumber, i) {\n        var dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", className, date.getDate().toString());\n        dayElement.dateObj = date;\n        dayElement.$i = i;\n        dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n        if (className.indexOf(\"hidden\") === -1 &&\n            compareDates(date, self.now) === 0) {\n            self.todayDateElem = dayElement;\n            dayElement.classList.add(\"today\");\n            dayElement.setAttribute(\"aria-current\", \"date\");\n        }\n        if (dateIsEnabled) {\n            dayElement.tabIndex = -1;\n            if (isDateSelected(date)) {\n                dayElement.classList.add(\"selected\");\n                self.selectedDateElem = dayElement;\n                if (self.config.mode === \"range\") {\n                    toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n                        compareDates(date, self.selectedDates[0], true) === 0);\n                    toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n                        compareDates(date, self.selectedDates[1], true) === 0);\n                    if (className === \"nextMonthDay\")\n                        dayElement.classList.add(\"inRange\");\n                }\n            }\n        }\n        else {\n            dayElement.classList.add(\"flatpickr-disabled\");\n        }\n        if (self.config.mode === \"range\") {\n            if (isDateInRange(date) && !isDateSelected(date))\n                dayElement.classList.add(\"inRange\");\n        }\n        if (self.weekNumbers &&\n            self.config.showMonths === 1 &&\n            className !== \"prevMonthDay\" &&\n            i % 7 === 6) {\n            self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"<span class='flatpickr-day'>\" + self.config.getWeek(date) + \"</span>\");\n        }\n        triggerEvent(\"onDayCreate\", dayElement);\n        return dayElement;\n    }\n    function focusOnDayElem(targetNode) {\n        targetNode.focus();\n        if (self.config.mode === \"range\")\n            onMouseOver(targetNode);\n    }\n    function getFirstAvailableDay(delta) {\n        var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n        var endMonth = delta > 0 ? self.config.showMonths : -1;\n        for (var m = startMonth; m != endMonth; m += delta) {\n            var month = self.daysContainer.children[m];\n            var startIndex = delta > 0 ? 0 : month.children.length - 1;\n            var endIndex = delta > 0 ? month.children.length : -1;\n            for (var i = startIndex; i != endIndex; i += delta) {\n                var c = month.children[i];\n                if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n                    return c;\n            }\n        }\n        return undefined;\n    }\n    function getNextAvailableDay(current, delta) {\n        var givenMonth = current.className.indexOf(\"Month\") === -1\n            ? current.dateObj.getMonth()\n            : self.currentMonth;\n        var endMonth = delta > 0 ? self.config.showMonths : -1;\n        var loopDelta = delta > 0 ? 1 : -1;\n        for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n            var month = self.daysContainer.children[m];\n            var startIndex = givenMonth - self.currentMonth === m\n                ? current.$i + delta\n                : delta < 0\n                    ? month.children.length - 1\n                    : 0;\n            var numMonthDays = month.children.length;\n            for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n                var c = month.children[i];\n                if (c.className.indexOf(\"hidden\") === -1 &&\n                    isEnabled(c.dateObj) &&\n                    Math.abs(current.$i - i) >= Math.abs(delta))\n                    return focusOnDayElem(c);\n            }\n        }\n        self.changeMonth(loopDelta);\n        focusOnDay(getFirstAvailableDay(loopDelta), 0);\n        return undefined;\n    }\n    function focusOnDay(current, offset) {\n        var activeElement = getClosestActiveElement();\n        var dayFocused = isInView(activeElement || document.body);\n        var startElem = current !== undefined\n            ? current\n            : dayFocused\n                ? activeElement\n                : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n                    ? self.selectedDateElem\n                    : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n                        ? self.todayDateElem\n                        : getFirstAvailableDay(offset > 0 ? 1 : -1);\n        if (startElem === undefined) {\n            self._input.focus();\n        }\n        else if (!dayFocused) {\n            focusOnDayElem(startElem);\n        }\n        else {\n            getNextAvailableDay(startElem, offset);\n        }\n    }\n    function buildMonthDays(year, month) {\n        var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n        var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n        var daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n        var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n        for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n            days.appendChild(createDay(\"flatpickr-day \" + prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n        }\n        for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n            days.appendChild(createDay(\"flatpickr-day\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n        }\n        for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n            (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n            days.appendChild(createDay(\"flatpickr-day \" + nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n        }\n        var dayContainer = createElement(\"div\", \"dayContainer\");\n        dayContainer.appendChild(days);\n        return dayContainer;\n    }\n    function buildDays() {\n        if (self.daysContainer === undefined) {\n            return;\n        }\n        clearNode(self.daysContainer);\n        if (self.weekNumbers)\n            clearNode(self.weekNumbers);\n        var frag = document.createDocumentFragment();\n        for (var i = 0; i < self.config.showMonths; i++) {\n            var d = new Date(self.currentYear, self.currentMonth, 1);\n            d.setMonth(self.currentMonth + i);\n            frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n        }\n        self.daysContainer.appendChild(frag);\n        self.days = self.daysContainer.firstChild;\n        if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n            onMouseOver();\n        }\n    }\n    function buildMonthSwitch() {\n        if (self.config.showMonths > 1 ||\n            self.config.monthSelectorType !== \"dropdown\")\n            return;\n        var shouldBuildMonth = function (month) {\n            if (self.config.minDate !== undefined &&\n                self.currentYear === self.config.minDate.getFullYear() &&\n                month < self.config.minDate.getMonth()) {\n                return false;\n            }\n            return !(self.config.maxDate !== undefined &&\n                self.currentYear === self.config.maxDate.getFullYear() &&\n                month > self.config.maxDate.getMonth());\n        };\n        self.monthsDropdownContainer.tabIndex = -1;\n        self.monthsDropdownContainer.innerHTML = \"\";\n        for (var i = 0; i < 12; i++) {\n            if (!shouldBuildMonth(i))\n                continue;\n            var month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n            month.value = new Date(self.currentYear, i).getMonth().toString();\n            month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n            month.tabIndex = -1;\n            if (self.currentMonth === i) {\n                month.selected = true;\n            }\n            self.monthsDropdownContainer.appendChild(month);\n        }\n    }\n    function buildMonth() {\n        var container = createElement(\"div\", \"flatpickr-month\");\n        var monthNavFragment = window.document.createDocumentFragment();\n        var monthElement;\n        if (self.config.showMonths > 1 ||\n            self.config.monthSelectorType === \"static\") {\n            monthElement = createElement(\"span\", \"cur-month\");\n        }\n        else {\n            self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n            self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n            bind(self.monthsDropdownContainer, \"change\", function (e) {\n                var target = getEventTarget(e);\n                var selectedMonth = parseInt(target.value, 10);\n                self.changeMonth(selectedMonth - self.currentMonth);\n                triggerEvent(\"onMonthChange\");\n            });\n            buildMonthSwitch();\n            monthElement = self.monthsDropdownContainer;\n        }\n        var yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n        var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n        yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n        if (self.config.minDate) {\n            yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n        }\n        if (self.config.maxDate) {\n            yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n            yearElement.disabled =\n                !!self.config.minDate &&\n                    self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n        }\n        var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n        currentMonth.appendChild(monthElement);\n        currentMonth.appendChild(yearInput);\n        monthNavFragment.appendChild(currentMonth);\n        container.appendChild(monthNavFragment);\n        return {\n            container: container,\n            yearElement: yearElement,\n            monthElement: monthElement,\n        };\n    }\n    function buildMonths() {\n        clearNode(self.monthNav);\n        self.monthNav.appendChild(self.prevMonthNav);\n        if (self.config.showMonths) {\n            self.yearElements = [];\n            self.monthElements = [];\n        }\n        for (var m = self.config.showMonths; m--;) {\n            var month = buildMonth();\n            self.yearElements.push(month.yearElement);\n            self.monthElements.push(month.monthElement);\n            self.monthNav.appendChild(month.container);\n        }\n        self.monthNav.appendChild(self.nextMonthNav);\n    }\n    function buildMonthNav() {\n        self.monthNav = createElement(\"div\", \"flatpickr-months\");\n        self.yearElements = [];\n        self.monthElements = [];\n        self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n        self.prevMonthNav.innerHTML = self.config.prevArrow;\n        self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n        self.nextMonthNav.innerHTML = self.config.nextArrow;\n        buildMonths();\n        Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n            get: function () { return self.__hidePrevMonthArrow; },\n            set: function (bool) {\n                if (self.__hidePrevMonthArrow !== bool) {\n                    toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n                    self.__hidePrevMonthArrow = bool;\n                }\n            },\n        });\n        Object.defineProperty(self, \"_hideNextMonthArrow\", {\n            get: function () { return self.__hideNextMonthArrow; },\n            set: function (bool) {\n                if (self.__hideNextMonthArrow !== bool) {\n                    toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n                    self.__hideNextMonthArrow = bool;\n                }\n            },\n        });\n        self.currentYearElement = self.yearElements[0];\n        updateNavigationCurrentMonth();\n        return self.monthNav;\n    }\n    function buildTime() {\n        self.calendarContainer.classList.add(\"hasTime\");\n        if (self.config.noCalendar)\n            self.calendarContainer.classList.add(\"noCalendar\");\n        var defaults = getDefaultHours(self.config);\n        self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n        self.timeContainer.tabIndex = -1;\n        var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n        var hourInput = createNumberInput(\"flatpickr-hour\", {\n            \"aria-label\": self.l10n.hourAriaLabel,\n        });\n        self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n        var minuteInput = createNumberInput(\"flatpickr-minute\", {\n            \"aria-label\": self.l10n.minuteAriaLabel,\n        });\n        self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n        self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n        self.hourElement.value = pad(self.latestSelectedDateObj\n            ? self.latestSelectedDateObj.getHours()\n            : self.config.time_24hr\n                ? defaults.hours\n                : military2ampm(defaults.hours));\n        self.minuteElement.value = pad(self.latestSelectedDateObj\n            ? self.latestSelectedDateObj.getMinutes()\n            : defaults.minutes);\n        self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n        self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n        self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n        self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n        self.hourElement.setAttribute(\"maxlength\", \"2\");\n        self.minuteElement.setAttribute(\"min\", \"0\");\n        self.minuteElement.setAttribute(\"max\", \"59\");\n        self.minuteElement.setAttribute(\"maxlength\", \"2\");\n        self.timeContainer.appendChild(hourInput);\n        self.timeContainer.appendChild(separator);\n        self.timeContainer.appendChild(minuteInput);\n        if (self.config.time_24hr)\n            self.timeContainer.classList.add(\"time24hr\");\n        if (self.config.enableSeconds) {\n            self.timeContainer.classList.add(\"hasSeconds\");\n            var secondInput = createNumberInput(\"flatpickr-second\");\n            self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n            self.secondElement.value = pad(self.latestSelectedDateObj\n                ? self.latestSelectedDateObj.getSeconds()\n                : defaults.seconds);\n            self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n            self.secondElement.setAttribute(\"min\", \"0\");\n            self.secondElement.setAttribute(\"max\", \"59\");\n            self.secondElement.setAttribute(\"maxlength\", \"2\");\n            self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n            self.timeContainer.appendChild(secondInput);\n        }\n        if (!self.config.time_24hr) {\n            self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n                ? self.hourElement.value\n                : self.config.defaultHour) > 11)]);\n            self.amPM.title = self.l10n.toggleTitle;\n            self.amPM.tabIndex = -1;\n            self.timeContainer.appendChild(self.amPM);\n        }\n        return self.timeContainer;\n    }\n    function buildWeekdays() {\n        if (!self.weekdayContainer)\n            self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n        else\n            clearNode(self.weekdayContainer);\n        for (var i = self.config.showMonths; i--;) {\n            var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n            self.weekdayContainer.appendChild(container);\n        }\n        updateWeekdays();\n        return self.weekdayContainer;\n    }\n    function updateWeekdays() {\n        if (!self.weekdayContainer) {\n            return;\n        }\n        var firstDayOfWeek = self.l10n.firstDayOfWeek;\n        var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);\n        if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n            weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));\n        }\n        for (var i = self.config.showMonths; i--;) {\n            self.weekdayContainer.children[i].innerHTML = \"\\n      <span class='flatpickr-weekday'>\\n        \" + weekdays.join(\"</span><span class='flatpickr-weekday'>\") + \"\\n      </span>\\n      \";\n        }\n    }\n    function buildWeeks() {\n        self.calendarContainer.classList.add(\"hasWeeks\");\n        var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n        weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n        var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n        weekWrapper.appendChild(weekNumbers);\n        return {\n            weekWrapper: weekWrapper,\n            weekNumbers: weekNumbers,\n        };\n    }\n    function changeMonth(value, isOffset) {\n        if (isOffset === void 0) { isOffset = true; }\n        var delta = isOffset ? value : value - self.currentMonth;\n        if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n            (delta > 0 && self._hideNextMonthArrow === true))\n            return;\n        self.currentMonth += delta;\n        if (self.currentMonth < 0 || self.currentMonth > 11) {\n            self.currentYear += self.currentMonth > 11 ? 1 : -1;\n            self.currentMonth = (self.currentMonth + 12) % 12;\n            triggerEvent(\"onYearChange\");\n            buildMonthSwitch();\n        }\n        buildDays();\n        triggerEvent(\"onMonthChange\");\n        updateNavigationCurrentMonth();\n    }\n    function clear(triggerChangeEvent, toInitial) {\n        if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }\n        if (toInitial === void 0) { toInitial = true; }\n        self.input.value = \"\";\n        if (self.altInput !== undefined)\n            self.altInput.value = \"\";\n        if (self.mobileInput !== undefined)\n            self.mobileInput.value = \"\";\n        self.selectedDates = [];\n        self.latestSelectedDateObj = undefined;\n        if (toInitial === true) {\n            self.currentYear = self._initialDate.getFullYear();\n            self.currentMonth = self._initialDate.getMonth();\n        }\n        if (self.config.enableTime === true) {\n            var _a = getDefaultHours(self.config), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;\n            setHours(hours, minutes, seconds);\n        }\n        self.redraw();\n        if (triggerChangeEvent)\n            triggerEvent(\"onChange\");\n    }\n    function close() {\n        self.isOpen = false;\n        if (!self.isMobile) {\n            if (self.calendarContainer !== undefined) {\n                self.calendarContainer.classList.remove(\"open\");\n            }\n            if (self._input !== undefined) {\n                self._input.classList.remove(\"active\");\n            }\n        }\n        triggerEvent(\"onClose\");\n    }\n    function destroy() {\n        if (self.config !== undefined)\n            triggerEvent(\"onDestroy\");\n        for (var i = self._handlers.length; i--;) {\n            self._handlers[i].remove();\n        }\n        self._handlers = [];\n        if (self.mobileInput) {\n            if (self.mobileInput.parentNode)\n                self.mobileInput.parentNode.removeChild(self.mobileInput);\n            self.mobileInput = undefined;\n        }\n        else if (self.calendarContainer && self.calendarContainer.parentNode) {\n            if (self.config.static && self.calendarContainer.parentNode) {\n                var wrapper = self.calendarContainer.parentNode;\n                wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n                if (wrapper.parentNode) {\n                    while (wrapper.firstChild)\n                        wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n                    wrapper.parentNode.removeChild(wrapper);\n                }\n            }\n            else\n                self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n        }\n        if (self.altInput) {\n            self.input.type = \"text\";\n            if (self.altInput.parentNode)\n                self.altInput.parentNode.removeChild(self.altInput);\n            delete self.altInput;\n        }\n        if (self.input) {\n            self.input.type = self.input._type;\n            self.input.classList.remove(\"flatpickr-input\");\n            self.input.removeAttribute(\"readonly\");\n        }\n        [\n            \"_showTimeInput\",\n            \"latestSelectedDateObj\",\n            \"_hideNextMonthArrow\",\n            \"_hidePrevMonthArrow\",\n            \"__hideNextMonthArrow\",\n            \"__hidePrevMonthArrow\",\n            \"isMobile\",\n            \"isOpen\",\n            \"selectedDateElem\",\n            \"minDateHasTime\",\n            \"maxDateHasTime\",\n            \"days\",\n            \"daysContainer\",\n            \"_input\",\n            \"_positionElement\",\n            \"innerContainer\",\n            \"rContainer\",\n            \"monthNav\",\n            \"todayDateElem\",\n            \"calendarContainer\",\n            \"weekdayContainer\",\n            \"prevMonthNav\",\n            \"nextMonthNav\",\n            \"monthsDropdownContainer\",\n            \"currentMonthElement\",\n            \"currentYearElement\",\n            \"navigationCurrentMonth\",\n            \"selectedDateElem\",\n            \"config\",\n        ].forEach(function (k) {\n            try {\n                delete self[k];\n            }\n            catch (_) { }\n        });\n    }\n    function isCalendarElem(elem) {\n        return self.calendarContainer.contains(elem);\n    }\n    function documentClick(e) {\n        if (self.isOpen && !self.config.inline) {\n            var eventTarget_1 = getEventTarget(e);\n            var isCalendarElement = isCalendarElem(eventTarget_1);\n            var isInput = eventTarget_1 === self.input ||\n                eventTarget_1 === self.altInput ||\n                self.element.contains(eventTarget_1) ||\n                (e.path &&\n                    e.path.indexOf &&\n                    (~e.path.indexOf(self.input) ||\n                        ~e.path.indexOf(self.altInput)));\n            var lostFocus = !isInput &&\n                !isCalendarElement &&\n                !isCalendarElem(e.relatedTarget);\n            var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n                return elem.contains(eventTarget_1);\n            });\n            if (lostFocus && isIgnored) {\n                if (self.config.allowInput) {\n                    self.setDate(self._input.value, false, self.config.altInput\n                        ? self.config.altFormat\n                        : self.config.dateFormat);\n                }\n                if (self.timeContainer !== undefined &&\n                    self.minuteElement !== undefined &&\n                    self.hourElement !== undefined &&\n                    self.input.value !== \"\" &&\n                    self.input.value !== undefined) {\n                    updateTime();\n                }\n                self.close();\n                if (self.config &&\n                    self.config.mode === \"range\" &&\n                    self.selectedDates.length === 1)\n                    self.clear(false);\n            }\n        }\n    }\n    function changeYear(newYear) {\n        if (!newYear ||\n            (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n            (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n            return;\n        var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n        self.currentYear = newYearNum || self.currentYear;\n        if (self.config.maxDate &&\n            self.currentYear === self.config.maxDate.getFullYear()) {\n            self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n        }\n        else if (self.config.minDate &&\n            self.currentYear === self.config.minDate.getFullYear()) {\n            self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n        }\n        if (isNewYear) {\n            self.redraw();\n            triggerEvent(\"onYearChange\");\n            buildMonthSwitch();\n        }\n    }\n    function isEnabled(date, timeless) {\n        var _a;\n        if (timeless === void 0) { timeless = true; }\n        var dateToCheck = self.parseDate(date, undefined, timeless);\n        if ((self.config.minDate &&\n            dateToCheck &&\n            compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n            (self.config.maxDate &&\n                dateToCheck &&\n                compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n            return false;\n        if (!self.config.enable && self.config.disable.length === 0)\n            return true;\n        if (dateToCheck === undefined)\n            return false;\n        var bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;\n        for (var i = 0, d = void 0; i < array.length; i++) {\n            d = array[i];\n            if (typeof d === \"function\" &&\n                d(dateToCheck))\n                return bool;\n            else if (d instanceof Date &&\n                dateToCheck !== undefined &&\n                d.getTime() === dateToCheck.getTime())\n                return bool;\n            else if (typeof d === \"string\") {\n                var parsed = self.parseDate(d, undefined, true);\n                return parsed && parsed.getTime() === dateToCheck.getTime()\n                    ? bool\n                    : !bool;\n            }\n            else if (typeof d === \"object\" &&\n                dateToCheck !== undefined &&\n                d.from &&\n                d.to &&\n                dateToCheck.getTime() >= d.from.getTime() &&\n                dateToCheck.getTime() <= d.to.getTime())\n                return bool;\n        }\n        return !bool;\n    }\n    function isInView(elem) {\n        if (self.daysContainer !== undefined)\n            return (elem.className.indexOf(\"hidden\") === -1 &&\n                elem.className.indexOf(\"flatpickr-disabled\") === -1 &&\n                self.daysContainer.contains(elem));\n        return false;\n    }\n    function onBlur(e) {\n        var isInput = e.target === self._input;\n        var valueChanged = self._input.value.trimEnd() !== getDateStr();\n        if (isInput &&\n            valueChanged &&\n            !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n            self.setDate(self._input.value, true, e.target === self.altInput\n                ? self.config.altFormat\n                : self.config.dateFormat);\n        }\n    }\n    function onKeyDown(e) {\n        var eventTarget = getEventTarget(e);\n        var isInput = self.config.wrap\n            ? element.contains(eventTarget)\n            : eventTarget === self._input;\n        var allowInput = self.config.allowInput;\n        var allowKeydown = self.isOpen && (!allowInput || !isInput);\n        var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n        if (e.keyCode === 13 && isInput) {\n            if (allowInput) {\n                self.setDate(self._input.value, true, eventTarget === self.altInput\n                    ? self.config.altFormat\n                    : self.config.dateFormat);\n                self.close();\n                return eventTarget.blur();\n            }\n            else {\n                self.open();\n            }\n        }\n        else if (isCalendarElem(eventTarget) ||\n            allowKeydown ||\n            allowInlineKeydown) {\n            var isTimeObj = !!self.timeContainer &&\n                self.timeContainer.contains(eventTarget);\n            switch (e.keyCode) {\n                case 13:\n                    if (isTimeObj) {\n                        e.preventDefault();\n                        updateTime();\n                        focusAndClose();\n                    }\n                    else\n                        selectDate(e);\n                    break;\n                case 27:\n                    e.preventDefault();\n                    focusAndClose();\n                    break;\n                case 8:\n                case 46:\n                    if (isInput && !self.config.allowInput) {\n                        e.preventDefault();\n                        self.clear();\n                    }\n                    break;\n                case 37:\n                case 39:\n                    if (!isTimeObj && !isInput) {\n                        e.preventDefault();\n                        var activeElement = getClosestActiveElement();\n                        if (self.daysContainer !== undefined &&\n                            (allowInput === false ||\n                                (activeElement && isInView(activeElement)))) {\n                            var delta_1 = e.keyCode === 39 ? 1 : -1;\n                            if (!e.ctrlKey)\n                                focusOnDay(undefined, delta_1);\n                            else {\n                                e.stopPropagation();\n                                changeMonth(delta_1);\n                                focusOnDay(getFirstAvailableDay(1), 0);\n                            }\n                        }\n                    }\n                    else if (self.hourElement)\n                        self.hourElement.focus();\n                    break;\n                case 38:\n                case 40:\n                    e.preventDefault();\n                    var delta = e.keyCode === 40 ? 1 : -1;\n                    if ((self.daysContainer &&\n                        eventTarget.$i !== undefined) ||\n                        eventTarget === self.input ||\n                        eventTarget === self.altInput) {\n                        if (e.ctrlKey) {\n                            e.stopPropagation();\n                            changeYear(self.currentYear - delta);\n                            focusOnDay(getFirstAvailableDay(1), 0);\n                        }\n                        else if (!isTimeObj)\n                            focusOnDay(undefined, delta * 7);\n                    }\n                    else if (eventTarget === self.currentYearElement) {\n                        changeYear(self.currentYear - delta);\n                    }\n                    else if (self.config.enableTime) {\n                        if (!isTimeObj && self.hourElement)\n                            self.hourElement.focus();\n                        updateTime(e);\n                        self._debouncedChange();\n                    }\n                    break;\n                case 9:\n                    if (isTimeObj) {\n                        var elems = [\n                            self.hourElement,\n                            self.minuteElement,\n                            self.secondElement,\n                            self.amPM,\n                        ]\n                            .concat(self.pluginElements)\n                            .filter(function (x) { return x; });\n                        var i = elems.indexOf(eventTarget);\n                        if (i !== -1) {\n                            var target = elems[i + (e.shiftKey ? -1 : 1)];\n                            e.preventDefault();\n                            (target || self._input).focus();\n                        }\n                    }\n                    else if (!self.config.noCalendar &&\n                        self.daysContainer &&\n                        self.daysContainer.contains(eventTarget) &&\n                        e.shiftKey) {\n                        e.preventDefault();\n                        self._input.focus();\n                    }\n                    break;\n                default:\n                    break;\n            }\n        }\n        if (self.amPM !== undefined && eventTarget === self.amPM) {\n            switch (e.key) {\n                case self.l10n.amPM[0].charAt(0):\n                case self.l10n.amPM[0].charAt(0).toLowerCase():\n                    self.amPM.textContent = self.l10n.amPM[0];\n                    setHoursFromInputs();\n                    updateValue();\n                    break;\n                case self.l10n.amPM[1].charAt(0):\n                case self.l10n.amPM[1].charAt(0).toLowerCase():\n                    self.amPM.textContent = self.l10n.amPM[1];\n                    setHoursFromInputs();\n                    updateValue();\n                    break;\n            }\n        }\n        if (isInput || isCalendarElem(eventTarget)) {\n            triggerEvent(\"onKeyDown\", e);\n        }\n    }\n    function onMouseOver(elem, cellClass) {\n        if (cellClass === void 0) { cellClass = \"flatpickr-day\"; }\n        if (self.selectedDates.length !== 1 ||\n            (elem &&\n                (!elem.classList.contains(cellClass) ||\n                    elem.classList.contains(\"flatpickr-disabled\"))))\n            return;\n        var hoverDate = elem\n            ? elem.dateObj.getTime()\n            : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n        var containsDisabled = false;\n        var minRange = 0, maxRange = 0;\n        for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n            if (!isEnabled(new Date(t), true)) {\n                containsDisabled =\n                    containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n                if (t < initialDate && (!minRange || t > minRange))\n                    minRange = t;\n                else if (t > initialDate && (!maxRange || t < maxRange))\n                    maxRange = t;\n            }\n        }\n        var hoverableCells = Array.from(self.rContainer.querySelectorAll(\"*:nth-child(-n+\" + self.config.showMonths + \") > .\" + cellClass));\n        hoverableCells.forEach(function (dayElem) {\n            var date = dayElem.dateObj;\n            var timestamp = date.getTime();\n            var outOfRange = (minRange > 0 && timestamp < minRange) ||\n                (maxRange > 0 && timestamp > maxRange);\n            if (outOfRange) {\n                dayElem.classList.add(\"notAllowed\");\n                [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n                    dayElem.classList.remove(c);\n                });\n                return;\n            }\n            else if (containsDisabled && !outOfRange)\n                return;\n            [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n                dayElem.classList.remove(c);\n            });\n            if (elem !== undefined) {\n                elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n                    ? \"startRange\"\n                    : \"endRange\");\n                if (initialDate < hoverDate && timestamp === initialDate)\n                    dayElem.classList.add(\"startRange\");\n                else if (initialDate > hoverDate && timestamp === initialDate)\n                    dayElem.classList.add(\"endRange\");\n                if (timestamp >= minRange &&\n                    (maxRange === 0 || timestamp <= maxRange) &&\n                    isBetween(timestamp, initialDate, hoverDate))\n                    dayElem.classList.add(\"inRange\");\n            }\n        });\n    }\n    function onResize() {\n        if (self.isOpen && !self.config.static && !self.config.inline)\n            positionCalendar();\n    }\n    function open(e, positionElement) {\n        if (positionElement === void 0) { positionElement = self._positionElement; }\n        if (self.isMobile === true) {\n            if (e) {\n                e.preventDefault();\n                var eventTarget = getEventTarget(e);\n                if (eventTarget) {\n                    eventTarget.blur();\n                }\n            }\n            if (self.mobileInput !== undefined) {\n                self.mobileInput.focus();\n                self.mobileInput.click();\n            }\n            triggerEvent(\"onOpen\");\n            return;\n        }\n        else if (self._input.disabled || self.config.inline) {\n            return;\n        }\n        var wasOpen = self.isOpen;\n        self.isOpen = true;\n        if (!wasOpen) {\n            self.calendarContainer.classList.add(\"open\");\n            self._input.classList.add(\"active\");\n            triggerEvent(\"onOpen\");\n            positionCalendar(positionElement);\n        }\n        if (self.config.enableTime === true && self.config.noCalendar === true) {\n            if (self.config.allowInput === false &&\n                (e === undefined ||\n                    !self.timeContainer.contains(e.relatedTarget))) {\n                setTimeout(function () { return self.hourElement.select(); }, 50);\n            }\n        }\n    }\n    function minMaxDateSetter(type) {\n        return function (date) {\n            var dateObj = (self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat));\n            var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n            if (dateObj !== undefined) {\n                self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n                    dateObj.getHours() > 0 ||\n                        dateObj.getMinutes() > 0 ||\n                        dateObj.getSeconds() > 0;\n            }\n            if (self.selectedDates) {\n                self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });\n                if (!self.selectedDates.length && type === \"min\")\n                    setHoursFromDate(dateObj);\n                updateValue();\n            }\n            if (self.daysContainer) {\n                redraw();\n                if (dateObj !== undefined)\n                    self.currentYearElement[type] = dateObj.getFullYear().toString();\n                else\n                    self.currentYearElement.removeAttribute(type);\n                self.currentYearElement.disabled =\n                    !!inverseDateObj &&\n                        dateObj !== undefined &&\n                        inverseDateObj.getFullYear() === dateObj.getFullYear();\n            }\n        };\n    }\n    function parseConfig() {\n        var boolOpts = [\n            \"wrap\",\n            \"weekNumbers\",\n            \"allowInput\",\n            \"allowInvalidPreload\",\n            \"clickOpens\",\n            \"time_24hr\",\n            \"enableTime\",\n            \"noCalendar\",\n            \"altInput\",\n            \"shorthandCurrentMonth\",\n            \"inline\",\n            \"static\",\n            \"enableSeconds\",\n            \"disableMobile\",\n        ];\n        var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n        var formats = {};\n        self.config.parseDate = userConfig.parseDate;\n        self.config.formatDate = userConfig.formatDate;\n        Object.defineProperty(self.config, \"enable\", {\n            get: function () { return self.config._enable; },\n            set: function (dates) {\n                self.config._enable = parseDateRules(dates);\n            },\n        });\n        Object.defineProperty(self.config, \"disable\", {\n            get: function () { return self.config._disable; },\n            set: function (dates) {\n                self.config._disable = parseDateRules(dates);\n            },\n        });\n        var timeMode = userConfig.mode === \"time\";\n        if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n            var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaultOptions.dateFormat;\n            formats.dateFormat =\n                userConfig.noCalendar || timeMode\n                    ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n                    : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n        }\n        if (userConfig.altInput &&\n            (userConfig.enableTime || timeMode) &&\n            !userConfig.altFormat) {\n            var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaultOptions.altFormat;\n            formats.altFormat =\n                userConfig.noCalendar || timeMode\n                    ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n                    : defaultAltFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n        }\n        Object.defineProperty(self.config, \"minDate\", {\n            get: function () { return self.config._minDate; },\n            set: minMaxDateSetter(\"min\"),\n        });\n        Object.defineProperty(self.config, \"maxDate\", {\n            get: function () { return self.config._maxDate; },\n            set: minMaxDateSetter(\"max\"),\n        });\n        var minMaxTimeSetter = function (type) { return function (val) {\n            self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n        }; };\n        Object.defineProperty(self.config, \"minTime\", {\n            get: function () { return self.config._minTime; },\n            set: minMaxTimeSetter(\"min\"),\n        });\n        Object.defineProperty(self.config, \"maxTime\", {\n            get: function () { return self.config._maxTime; },\n            set: minMaxTimeSetter(\"max\"),\n        });\n        if (userConfig.mode === \"time\") {\n            self.config.noCalendar = true;\n            self.config.enableTime = true;\n        }\n        Object.assign(self.config, formats, userConfig);\n        for (var i = 0; i < boolOpts.length; i++)\n            self.config[boolOpts[i]] =\n                self.config[boolOpts[i]] === true ||\n                    self.config[boolOpts[i]] === \"true\";\n        HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {\n            self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n        });\n        self.isMobile =\n            !self.config.disableMobile &&\n                !self.config.inline &&\n                self.config.mode === \"single\" &&\n                !self.config.disable.length &&\n                !self.config.enable &&\n                !self.config.weekNumbers &&\n                /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n        for (var i = 0; i < self.config.plugins.length; i++) {\n            var pluginConf = self.config.plugins[i](self) || {};\n            for (var key in pluginConf) {\n                if (HOOKS.indexOf(key) > -1) {\n                    self.config[key] = arrayify(pluginConf[key])\n                        .map(bindToInstance)\n                        .concat(self.config[key]);\n                }\n                else if (typeof userConfig[key] === \"undefined\")\n                    self.config[key] = pluginConf[key];\n            }\n        }\n        if (!userConfig.altInputClass) {\n            self.config.altInputClass =\n                getInputElem().className + \" \" + self.config.altInputClass;\n        }\n        triggerEvent(\"onParseConfig\");\n    }\n    function getInputElem() {\n        return self.config.wrap\n            ? element.querySelector(\"[data-input]\")\n            : element;\n    }\n    function setupLocale() {\n        if (typeof self.config.locale !== \"object\" &&\n            typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n            self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n        self.l10n = __assign(__assign({}, flatpickr.l10ns.default), (typeof self.config.locale === \"object\"\n            ? self.config.locale\n            : self.config.locale !== \"default\"\n                ? flatpickr.l10ns[self.config.locale]\n                : undefined));\n        tokenRegex.D = \"(\" + self.l10n.weekdays.shorthand.join(\"|\") + \")\";\n        tokenRegex.l = \"(\" + self.l10n.weekdays.longhand.join(\"|\") + \")\";\n        tokenRegex.M = \"(\" + self.l10n.months.shorthand.join(\"|\") + \")\";\n        tokenRegex.F = \"(\" + self.l10n.months.longhand.join(\"|\") + \")\";\n        tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n        var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n        if (userConfig.time_24hr === undefined &&\n            flatpickr.defaultConfig.time_24hr === undefined) {\n            self.config.time_24hr = self.l10n.time_24hr;\n        }\n        self.formatDate = createDateFormatter(self);\n        self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n    }\n    function positionCalendar(customPositionElement) {\n        if (typeof self.config.position === \"function\") {\n            return void self.config.position(self, customPositionElement);\n        }\n        if (self.calendarContainer === undefined)\n            return;\n        triggerEvent(\"onPreCalendarPosition\");\n        var positionElement = customPositionElement || self._positionElement;\n        var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n            (configPosVertical !== \"below\" &&\n                distanceFromBottom < calendarHeight &&\n                inputBounds.top > calendarHeight);\n        var top = window.pageYOffset +\n            inputBounds.top +\n            (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n        toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n        toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n        if (self.config.inline)\n            return;\n        var left = window.pageXOffset + inputBounds.left;\n        var isCenter = false;\n        var isRight = false;\n        if (configPosHorizontal === \"center\") {\n            left -= (calendarWidth - inputBounds.width) / 2;\n            isCenter = true;\n        }\n        else if (configPosHorizontal === \"right\") {\n            left -= calendarWidth - inputBounds.width;\n            isRight = true;\n        }\n        toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n        toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n        toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n        var right = window.document.body.offsetWidth -\n            (window.pageXOffset + inputBounds.right);\n        var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n        var centerMost = right + calendarWidth > window.document.body.offsetWidth;\n        toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n        if (self.config.static)\n            return;\n        self.calendarContainer.style.top = top + \"px\";\n        if (!rightMost) {\n            self.calendarContainer.style.left = left + \"px\";\n            self.calendarContainer.style.right = \"auto\";\n        }\n        else if (!centerMost) {\n            self.calendarContainer.style.left = \"auto\";\n            self.calendarContainer.style.right = right + \"px\";\n        }\n        else {\n            var doc = getDocumentStyleSheet();\n            if (doc === undefined)\n                return;\n            var bodyWidth = window.document.body.offsetWidth;\n            var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n            var centerBefore = \".flatpickr-calendar.centerMost:before\";\n            var centerAfter = \".flatpickr-calendar.centerMost:after\";\n            var centerIndex = doc.cssRules.length;\n            var centerStyle = \"{left:\" + inputBounds.left + \"px;right:auto;}\";\n            toggleClass(self.calendarContainer, \"rightMost\", false);\n            toggleClass(self.calendarContainer, \"centerMost\", true);\n            doc.insertRule(centerBefore + \",\" + centerAfter + centerStyle, centerIndex);\n            self.calendarContainer.style.left = centerLeft + \"px\";\n            self.calendarContainer.style.right = \"auto\";\n        }\n    }\n    function getDocumentStyleSheet() {\n        var editableSheet = null;\n        for (var i = 0; i < document.styleSheets.length; i++) {\n            var sheet = document.styleSheets[i];\n            if (!sheet.cssRules)\n                continue;\n            try {\n                sheet.cssRules;\n            }\n            catch (err) {\n                continue;\n            }\n            editableSheet = sheet;\n            break;\n        }\n        return editableSheet != null ? editableSheet : createStyleSheet();\n    }\n    function createStyleSheet() {\n        var style = document.createElement(\"style\");\n        document.head.appendChild(style);\n        return style.sheet;\n    }\n    function redraw() {\n        if (self.config.noCalendar || self.isMobile)\n            return;\n        buildMonthSwitch();\n        updateNavigationCurrentMonth();\n        buildDays();\n    }\n    function focusAndClose() {\n        self._input.focus();\n        if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n            navigator.msMaxTouchPoints !== undefined) {\n            setTimeout(self.close, 0);\n        }\n        else {\n            self.close();\n        }\n    }\n    function selectDate(e) {\n        e.preventDefault();\n        e.stopPropagation();\n        var isSelectable = function (day) {\n            return day.classList &&\n                day.classList.contains(\"flatpickr-day\") &&\n                !day.classList.contains(\"flatpickr-disabled\") &&\n                !day.classList.contains(\"notAllowed\");\n        };\n        var t = findParent(getEventTarget(e), isSelectable);\n        if (t === undefined)\n            return;\n        var target = t;\n        var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n        var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n            selectedDate.getMonth() >\n                self.currentMonth + self.config.showMonths - 1) &&\n            self.config.mode !== \"range\";\n        self.selectedDateElem = target;\n        if (self.config.mode === \"single\")\n            self.selectedDates = [selectedDate];\n        else if (self.config.mode === \"multiple\") {\n            var selectedIndex = isDateSelected(selectedDate);\n            if (selectedIndex)\n                self.selectedDates.splice(parseInt(selectedIndex), 1);\n            else\n                self.selectedDates.push(selectedDate);\n        }\n        else if (self.config.mode === \"range\") {\n            if (self.selectedDates.length === 2) {\n                self.clear(false, false);\n            }\n            self.latestSelectedDateObj = selectedDate;\n            self.selectedDates.push(selectedDate);\n            if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n                self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n        }\n        setHoursFromInputs();\n        if (shouldChangeMonth) {\n            var isNewYear = self.currentYear !== selectedDate.getFullYear();\n            self.currentYear = selectedDate.getFullYear();\n            self.currentMonth = selectedDate.getMonth();\n            if (isNewYear) {\n                triggerEvent(\"onYearChange\");\n                buildMonthSwitch();\n            }\n            triggerEvent(\"onMonthChange\");\n        }\n        updateNavigationCurrentMonth();\n        buildDays();\n        updateValue();\n        if (!shouldChangeMonth &&\n            self.config.mode !== \"range\" &&\n            self.config.showMonths === 1)\n            focusOnDayElem(target);\n        else if (self.selectedDateElem !== undefined &&\n            self.hourElement === undefined) {\n            self.selectedDateElem && self.selectedDateElem.focus();\n        }\n        if (self.hourElement !== undefined)\n            self.hourElement !== undefined && self.hourElement.focus();\n        if (self.config.closeOnSelect) {\n            var single = self.config.mode === \"single\" && !self.config.enableTime;\n            var range = self.config.mode === \"range\" &&\n                self.selectedDates.length === 2 &&\n                !self.config.enableTime;\n            if (single || range) {\n                focusAndClose();\n            }\n        }\n        triggerChange();\n    }\n    var CALLBACKS = {\n        locale: [setupLocale, updateWeekdays],\n        showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n        minDate: [jumpToDate],\n        maxDate: [jumpToDate],\n        positionElement: [updatePositionElement],\n        clickOpens: [\n            function () {\n                if (self.config.clickOpens === true) {\n                    bind(self._input, \"focus\", self.open);\n                    bind(self._input, \"click\", self.open);\n                }\n                else {\n                    self._input.removeEventListener(\"focus\", self.open);\n                    self._input.removeEventListener(\"click\", self.open);\n                }\n            },\n        ],\n    };\n    function set(option, value) {\n        if (option !== null && typeof option === \"object\") {\n            Object.assign(self.config, option);\n            for (var key in option) {\n                if (CALLBACKS[key] !== undefined)\n                    CALLBACKS[key].forEach(function (x) { return x(); });\n            }\n        }\n        else {\n            self.config[option] = value;\n            if (CALLBACKS[option] !== undefined)\n                CALLBACKS[option].forEach(function (x) { return x(); });\n            else if (HOOKS.indexOf(option) > -1)\n                self.config[option] = arrayify(value);\n        }\n        self.redraw();\n        updateValue(true);\n    }\n    function setSelectedDate(inputDate, format) {\n        var dates = [];\n        if (inputDate instanceof Array)\n            dates = inputDate.map(function (d) { return self.parseDate(d, format); });\n        else if (inputDate instanceof Date || typeof inputDate === \"number\")\n            dates = [self.parseDate(inputDate, format)];\n        else if (typeof inputDate === \"string\") {\n            switch (self.config.mode) {\n                case \"single\":\n                case \"time\":\n                    dates = [self.parseDate(inputDate, format)];\n                    break;\n                case \"multiple\":\n                    dates = inputDate\n                        .split(self.config.conjunction)\n                        .map(function (date) { return self.parseDate(date, format); });\n                    break;\n                case \"range\":\n                    dates = inputDate\n                        .split(self.l10n.rangeSeparator)\n                        .map(function (date) { return self.parseDate(date, format); });\n                    break;\n                default:\n                    break;\n            }\n        }\n        else\n            self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n        self.selectedDates = (self.config.allowInvalidPreload\n            ? dates\n            : dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }));\n        if (self.config.mode === \"range\")\n            self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n    }\n    function setDate(date, triggerChange, format) {\n        if (triggerChange === void 0) { triggerChange = false; }\n        if (format === void 0) { format = self.config.dateFormat; }\n        if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n            return self.clear(triggerChange);\n        setSelectedDate(date, format);\n        self.latestSelectedDateObj =\n            self.selectedDates[self.selectedDates.length - 1];\n        self.redraw();\n        jumpToDate(undefined, triggerChange);\n        setHoursFromDate();\n        if (self.selectedDates.length === 0) {\n            self.clear(false);\n        }\n        updateValue(triggerChange);\n        if (triggerChange)\n            triggerEvent(\"onChange\");\n    }\n    function parseDateRules(arr) {\n        return arr\n            .slice()\n            .map(function (rule) {\n            if (typeof rule === \"string\" ||\n                typeof rule === \"number\" ||\n                rule instanceof Date) {\n                return self.parseDate(rule, undefined, true);\n            }\n            else if (rule &&\n                typeof rule === \"object\" &&\n                rule.from &&\n                rule.to)\n                return {\n                    from: self.parseDate(rule.from, undefined),\n                    to: self.parseDate(rule.to, undefined),\n                };\n            return rule;\n        })\n            .filter(function (x) { return x; });\n    }\n    function setupDates() {\n        self.selectedDates = [];\n        self.now = self.parseDate(self.config.now) || new Date();\n        var preloadedDate = self.config.defaultDate ||\n            ((self.input.nodeName === \"INPUT\" ||\n                self.input.nodeName === \"TEXTAREA\") &&\n                self.input.placeholder &&\n                self.input.value === self.input.placeholder\n                ? null\n                : self.input.value);\n        if (preloadedDate)\n            setSelectedDate(preloadedDate, self.config.dateFormat);\n        self._initialDate =\n            self.selectedDates.length > 0\n                ? self.selectedDates[0]\n                : self.config.minDate &&\n                    self.config.minDate.getTime() > self.now.getTime()\n                    ? self.config.minDate\n                    : self.config.maxDate &&\n                        self.config.maxDate.getTime() < self.now.getTime()\n                        ? self.config.maxDate\n                        : self.now;\n        self.currentYear = self._initialDate.getFullYear();\n        self.currentMonth = self._initialDate.getMonth();\n        if (self.selectedDates.length > 0)\n            self.latestSelectedDateObj = self.selectedDates[0];\n        if (self.config.minTime !== undefined)\n            self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n        if (self.config.maxTime !== undefined)\n            self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n        self.minDateHasTime =\n            !!self.config.minDate &&\n                (self.config.minDate.getHours() > 0 ||\n                    self.config.minDate.getMinutes() > 0 ||\n                    self.config.minDate.getSeconds() > 0);\n        self.maxDateHasTime =\n            !!self.config.maxDate &&\n                (self.config.maxDate.getHours() > 0 ||\n                    self.config.maxDate.getMinutes() > 0 ||\n                    self.config.maxDate.getSeconds() > 0);\n    }\n    function setupInputs() {\n        self.input = getInputElem();\n        if (!self.input) {\n            self.config.errorHandler(new Error(\"Invalid input element specified\"));\n            return;\n        }\n        self.input._type = self.input.type;\n        self.input.type = \"text\";\n        self.input.classList.add(\"flatpickr-input\");\n        self._input = self.input;\n        if (self.config.altInput) {\n            self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n            self._input = self.altInput;\n            self.altInput.placeholder = self.input.placeholder;\n            self.altInput.disabled = self.input.disabled;\n            self.altInput.required = self.input.required;\n            self.altInput.tabIndex = self.input.tabIndex;\n            self.altInput.type = \"text\";\n            self.input.setAttribute(\"type\", \"hidden\");\n            if (!self.config.static && self.input.parentNode)\n                self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n        }\n        if (!self.config.allowInput)\n            self._input.setAttribute(\"readonly\", \"readonly\");\n        updatePositionElement();\n    }\n    function updatePositionElement() {\n        self._positionElement = self.config.positionElement || self._input;\n    }\n    function setupMobile() {\n        var inputType = self.config.enableTime\n            ? self.config.noCalendar\n                ? \"time\"\n                : \"datetime-local\"\n            : \"date\";\n        self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n        self.mobileInput.tabIndex = 1;\n        self.mobileInput.type = inputType;\n        self.mobileInput.disabled = self.input.disabled;\n        self.mobileInput.required = self.input.required;\n        self.mobileInput.placeholder = self.input.placeholder;\n        self.mobileFormatStr =\n            inputType === \"datetime-local\"\n                ? \"Y-m-d\\\\TH:i:S\"\n                : inputType === \"date\"\n                    ? \"Y-m-d\"\n                    : \"H:i:S\";\n        if (self.selectedDates.length > 0) {\n            self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n        }\n        if (self.config.minDate)\n            self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n        if (self.config.maxDate)\n            self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n        if (self.input.getAttribute(\"step\"))\n            self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n        self.input.type = \"hidden\";\n        if (self.altInput !== undefined)\n            self.altInput.type = \"hidden\";\n        try {\n            if (self.input.parentNode)\n                self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n        }\n        catch (_a) { }\n        bind(self.mobileInput, \"change\", function (e) {\n            self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n            triggerEvent(\"onChange\");\n            triggerEvent(\"onClose\");\n        });\n    }\n    function toggle(e) {\n        if (self.isOpen === true)\n            return self.close();\n        self.open(e);\n    }\n    function triggerEvent(event, data) {\n        if (self.config === undefined)\n            return;\n        var hooks = self.config[event];\n        if (hooks !== undefined && hooks.length > 0) {\n            for (var i = 0; hooks[i] && i < hooks.length; i++)\n                hooks[i](self.selectedDates, self.input.value, self, data);\n        }\n        if (event === \"onChange\") {\n            self.input.dispatchEvent(createEvent(\"change\"));\n            self.input.dispatchEvent(createEvent(\"input\"));\n        }\n    }\n    function createEvent(name) {\n        var e = document.createEvent(\"Event\");\n        e.initEvent(name, true, true);\n        return e;\n    }\n    function isDateSelected(date) {\n        for (var i = 0; i < self.selectedDates.length; i++) {\n            var selectedDate = self.selectedDates[i];\n            if (selectedDate instanceof Date &&\n                compareDates(selectedDate, date) === 0)\n                return \"\" + i;\n        }\n        return false;\n    }\n    function isDateInRange(date) {\n        if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n            return false;\n        return (compareDates(date, self.selectedDates[0]) >= 0 &&\n            compareDates(date, self.selectedDates[1]) <= 0);\n    }\n    function updateNavigationCurrentMonth() {\n        if (self.config.noCalendar || self.isMobile || !self.monthNav)\n            return;\n        self.yearElements.forEach(function (yearElement, i) {\n            var d = new Date(self.currentYear, self.currentMonth, 1);\n            d.setMonth(self.currentMonth + i);\n            if (self.config.showMonths > 1 ||\n                self.config.monthSelectorType === \"static\") {\n                self.monthElements[i].textContent =\n                    monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n            }\n            else {\n                self.monthsDropdownContainer.value = d.getMonth().toString();\n            }\n            yearElement.value = d.getFullYear().toString();\n        });\n        self._hidePrevMonthArrow =\n            self.config.minDate !== undefined &&\n                (self.currentYear === self.config.minDate.getFullYear()\n                    ? self.currentMonth <= self.config.minDate.getMonth()\n                    : self.currentYear < self.config.minDate.getFullYear());\n        self._hideNextMonthArrow =\n            self.config.maxDate !== undefined &&\n                (self.currentYear === self.config.maxDate.getFullYear()\n                    ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n                    : self.currentYear > self.config.maxDate.getFullYear());\n    }\n    function getDateStr(specificFormat) {\n        var format = specificFormat ||\n            (self.config.altInput ? self.config.altFormat : self.config.dateFormat);\n        return self.selectedDates\n            .map(function (dObj) { return self.formatDate(dObj, format); })\n            .filter(function (d, i, arr) {\n            return self.config.mode !== \"range\" ||\n                self.config.enableTime ||\n                arr.indexOf(d) === i;\n        })\n            .join(self.config.mode !== \"range\"\n            ? self.config.conjunction\n            : self.l10n.rangeSeparator);\n    }\n    function updateValue(triggerChange) {\n        if (triggerChange === void 0) { triggerChange = true; }\n        if (self.mobileInput !== undefined && self.mobileFormatStr) {\n            self.mobileInput.value =\n                self.latestSelectedDateObj !== undefined\n                    ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n                    : \"\";\n        }\n        self.input.value = getDateStr(self.config.dateFormat);\n        if (self.altInput !== undefined) {\n            self.altInput.value = getDateStr(self.config.altFormat);\n        }\n        if (triggerChange !== false)\n            triggerEvent(\"onValueUpdate\");\n    }\n    function onMonthNavClick(e) {\n        var eventTarget = getEventTarget(e);\n        var isPrevMonth = self.prevMonthNav.contains(eventTarget);\n        var isNextMonth = self.nextMonthNav.contains(eventTarget);\n        if (isPrevMonth || isNextMonth) {\n            changeMonth(isPrevMonth ? -1 : 1);\n        }\n        else if (self.yearElements.indexOf(eventTarget) >= 0) {\n            eventTarget.select();\n        }\n        else if (eventTarget.classList.contains(\"arrowUp\")) {\n            self.changeYear(self.currentYear + 1);\n        }\n        else if (eventTarget.classList.contains(\"arrowDown\")) {\n            self.changeYear(self.currentYear - 1);\n        }\n    }\n    function timeWrapper(e) {\n        e.preventDefault();\n        var isKeyDown = e.type === \"keydown\", eventTarget = getEventTarget(e), input = eventTarget;\n        if (self.amPM !== undefined && eventTarget === self.amPM) {\n            self.amPM.textContent =\n                self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n        }\n        var min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n            (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n        var newValue = curValue + step * delta;\n        if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n            var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n            if (newValue < min) {\n                newValue =\n                    max +\n                        newValue +\n                        int(!isHourElem) +\n                        (int(isHourElem) && int(!self.amPM));\n                if (isMinuteElem)\n                    incrementNumInput(undefined, -1, self.hourElement);\n            }\n            else if (newValue > max) {\n                newValue =\n                    input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n                if (isMinuteElem)\n                    incrementNumInput(undefined, 1, self.hourElement);\n            }\n            if (self.amPM &&\n                isHourElem &&\n                (step === 1\n                    ? newValue + curValue === 23\n                    : Math.abs(newValue - curValue) > step)) {\n                self.amPM.textContent =\n                    self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n            }\n            input.value = pad(newValue);\n        }\n    }\n    init();\n    return self;\n}\nfunction _flatpickr(nodeList, config) {\n    var nodes = Array.prototype.slice\n        .call(nodeList)\n        .filter(function (x) { return x instanceof HTMLElement; });\n    var instances = [];\n    for (var i = 0; i < nodes.length; i++) {\n        var node = nodes[i];\n        try {\n            if (node.getAttribute(\"data-fp-omit\") !== null)\n                continue;\n            if (node._flatpickr !== undefined) {\n                node._flatpickr.destroy();\n                node._flatpickr = undefined;\n            }\n            node._flatpickr = FlatpickrInstance(node, config || {});\n            instances.push(node._flatpickr);\n        }\n        catch (e) {\n            console.error(e);\n        }\n    }\n    return instances.length === 1 ? instances[0] : instances;\n}\nif (typeof HTMLElement !== \"undefined\" &&\n    typeof HTMLCollection !== \"undefined\" &&\n    typeof NodeList !== \"undefined\") {\n    HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n        return _flatpickr(this, config);\n    };\n    HTMLElement.prototype.flatpickr = function (config) {\n        return _flatpickr([this], config);\n    };\n}\nvar flatpickr = function (selector, config) {\n    if (typeof selector === \"string\") {\n        return _flatpickr(window.document.querySelectorAll(selector), config);\n    }\n    else if (selector instanceof Node) {\n        return _flatpickr([selector], config);\n    }\n    else {\n        return _flatpickr(selector, config);\n    }\n};\nflatpickr.defaultConfig = {};\nflatpickr.l10ns = {\n    en: __assign({}, English),\n    default: __assign({}, English),\n};\nflatpickr.localize = function (l10n) {\n    flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);\n};\nflatpickr.setDefaults = function (config) {\n    flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);\n};\nflatpickr.parseDate = createDateParser({});\nflatpickr.formatDate = createDateFormatter({});\nflatpickr.compareDates = compareDates;\nif (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n    jQuery.fn.flatpickr = function (config) {\n        return _flatpickr(this, config);\n    };\n}\nDate.prototype.fp_incr = function (days) {\n    return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n};\nif (typeof window !== \"undefined\") {\n    window.flatpickr = flatpickr;\n}\nexport default flatpickr;\n", "/*\nStimulus 3.0.0\nCopyright © 2021 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    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())\n            .reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\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).sort().forEach(key => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    return {\n        eventTarget: parseEventTarget(matches[4]),\n        eventName: matches[2],\n        eventOptions: matches[9] ? parseEventOptions(matches[9]) : {},\n        identifier: matches[5],\n        methodName: matches[7]\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.split(\":\").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 capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nclass Action {\n    constructor(element, index, descriptor) {\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    }\n    static forToken(token) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content));\n    }\n    toString() {\n        const eventNameSuffix = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventNameSuffix}->${this.identifier}#${this.methodName}`;\n    }\n    get params() {\n        if (this.eventTarget instanceof Element) {\n            return this.getParamsFromEventTargetAttributes(this.eventTarget);\n        }\n        else {\n            return {};\n        }\n    }\n    getParamsFromEventTargetAttributes(eventTarget) {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`);\n        const attributes = Array.from(eventTarget.attributes);\n        attributes.forEach(({ name, value }) => {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                Object.assign(params, { [camelize(key)]: typecast(value) });\n            }\n        });\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n}\nconst defaultEventNames = {\n    \"a\": e => \"click\",\n    \"button\": e => \"click\",\n    \"form\": e => \"submit\",\n    \"input\": e => e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\",\n    \"select\": e => \"change\",\n    \"textarea\": e => \"input\"\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        if (this.willBeInvokedByEvent(event)) {\n            this.invokeWithEvent(event);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            const { params } = this.action;\n            const actionEvent = Object.assign(event, { params });\n            this.method.call(this.controller, actionEvent);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (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.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, { attributes: true, childList: true, subtree: 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            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(node, attributeName) {\n        const element = node;\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    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\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\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 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    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)\n            .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.trim().split(/\\s+/).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));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token);\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        this.invokeChangedCallbacksForDefaultValues();\n    }\n    start() {\n        this.stringMapObserver.start();\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            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    }\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        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            this.delegate.targetConnected(element, name);\n        }\n    }\n    disconnectTarget(element, name) {\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            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\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        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        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\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.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    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\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\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) => [\n            ...Object.getOwnPropertyNames(object),\n            ...Object.getOwnPropertySymbols(object)\n        ];\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 () { this.a.call(this); };\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\n            || this.findTarget(targetName)\n            || 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 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    }\n    findElement(selector) {\n        return this.element.matches(selector)\n            ? this.element\n            : 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}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap;\n        this.scopeReferenceCounts = new WeakMap;\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map;\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap;\n        this.modulesByIdentifier = new Map;\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find(context => context.element == element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach(scope => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach(scope => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: identifier => `data-${identifier}-target`\n};\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    }\n    static start(element, schema) {\n        const application = new Application(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        if (controllerConstructor.shouldLoad) {\n            this.load({ identifier, controllerConstructor });\n        }\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach(definition => this.router.loadDefinition(definition));\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 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);\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) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair);\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]) {\n    return valueDescriptorForTokenAndTypeDefinition(token, typeDefinition);\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array: return \"array\";\n        case Boolean: return \"boolean\";\n        case Number: return \"number\";\n        case Object: return \"object\";\n        case String: return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\": return \"boolean\";\n        case \"number\": return \"number\";\n        case \"string\": 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(typeObject) {\n    const typeFromObject = parseValueTypeConstant(typeObject.type);\n    if (typeFromObject) {\n        const defaultValueType = parseValueTypeDefault(typeObject.default);\n        if (typeFromObject !== defaultValueType) {\n            throw new Error(`Type \"${typeFromObject}\" must match the type of the default value. Given default value: \"${typeObject.default}\" as \"${defaultValueType}\"`);\n        }\n        return typeFromObject;\n    }\n}\nfunction parseValueTypeDefinition(typeDefinition) {\n    const typeFromObject = parseValueTypeObject(typeDefinition);\n    const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    throw new Error(`Unknown value type \"${typeDefinition}\"`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const defaultValue = typeDefinition.default;\n    if (defaultValue !== undefined)\n        return defaultValue;\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(token, typeDefinition) {\n    const key = `${dasherize(token)}-value`;\n    const type = parseValueTypeDefinition(typeDefinition);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() { return defaultValueForDefinition(typeDefinition); },\n        get hasCustomDefaultValue() { return parseValueTypeDefault(typeDefinition) !== undefined; },\n        reader: readers[type],\n        writer: writers[type] || writers.default\n    };\n}\nconst defaultValuesByType = {\n    get array() { return []; },\n    boolean: false,\n    number: 0,\n    get object() { return {}; },\n    string: \"\"\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(\"Expected array\");\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || value == \"false\");\n    },\n    number(value) {\n        return Number(value);\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(\"Expected 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    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 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 = [ClassPropertiesBlessing, TargetPropertiesBlessing, ValuePropertiesBlessing];\nController.targets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "export const kebabCase = string =>\n  string\n    .replace(/([a-z])([A-Z])/g, \"$1-$2\")\n    .replace(/[\\s_]+/g, \"-\")\n    .toLowerCase();\n\nexport const capitalize = string => {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n};\n", "const booleanOptions = [\n  'allowInput',\n  'altInput',\n  'animate',\n  'clickOpens',\n  'closeOnSelect',\n  'disableMobile',\n  'enableSeconds',\n  'enableTime',\n  'inline',\n  'noCalendar',\n  'shorthandCurrentMonth',\n  'static',\n  'time_24hr',\n  'weekNumbers',\n  'wrap'\n]\n\nconst stringOptions = [\n  'altInputClass',\n  'conjunction',\n  'mode',\n  'nextArrow',\n  'position',\n  'prevArrow',\n  'monthSelectorType'\n]\n\nconst numberOptions = [\n  'defaultHour',\n  'defaultMinute',\n  'defaultSeconds',\n  'hourIncrement',\n  'minuteIncrement',\n  'showMonths'\n]\n\nconst arrayOptions = ['disable', 'enable', 'disableDaysOfWeek', 'enableDaysOfWeek']\n\nconst arrayOrStringOptions = ['defaultDate']\n\nconst dateOptions = ['maxDate', 'minDate', 'maxTime', 'minTime', 'now']\n\nexport const dateFormats = ['altFormat', 'ariaDateFormat', 'dateFormat']\n\nexport const options = {\n  string: stringOptions,\n  boolean: booleanOptions,\n  date: dateOptions,\n  array: arrayOptions,\n  number: numberOptions,\n  arrayOrString: arrayOrStringOptions\n}\n", "export const events = ['change', 'open', 'close', 'monthChange', 'yearChange', 'ready', 'valueUpdate', 'dayCreate']\n", "export const elements = [\n  'calendarContainer',\n  'currentYearElement',\n  'days',\n  'daysContainer',\n  'input',\n  'nextMonthNav',\n  'monthNav',\n  'prevMonthNav',\n  'rContainer',\n  'selectedDateElem',\n  'todayDateElem',\n  'weekdayContainer'\n]\n", "export const mapping = {\n  '%Y': 'Y',\n  '%y': 'y',\n  '%C': 'Y',\n  '%m': 'm',\n  '%-m': 'n',\n  '%_m': 'n',\n  '%B': 'F',\n  '%^B': 'F',\n  '%b': 'M',\n  '%^b': 'M',\n  '%h': 'M',\n  '%^h': 'M',\n  '%d': 'd',\n  '%-d': 'j',\n  '%e': 'j',\n  '%H': 'H',\n  '%k': 'H',\n  '%I': 'h',\n  '%l': 'h',\n  '%-l': 'h',\n  '%P': 'K',\n  '%p': 'K',\n  '%M': 'i',\n  '%S': 'S',\n  '%A': 'l',\n  '%a': 'D',\n  '%w': 'w'\n}\n\nconst strftimeRegex = new RegExp(\n  Object.keys(mapping)\n    .join('|')\n    .replace(new RegExp('\\\\^', 'g'), '\\\\^'),\n  'g'\n)\n\nexport const convertDateFormat = (format) => {\n  return format.replace(strftimeRegex, (match) => {\n    return mapping[match]\n  })\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport flatpickr from 'flatpickr'\nimport { kebabCase, capitalize } from './utils'\nimport { options, dateFormats } from './config_options'\nimport { events } from './events'\nimport { elements } from './elements'\nimport { convertDateFormat } from './strftime_mapping'\n\nclass StimulusFlatpickr extends Controller {\n  static targets = ['instance']\n\n  initialize() {\n    this.config = {}\n  }\n\n  connect() {\n    this._initializeEvents()\n    this._initializeOptions()\n    this._initializeDateFormats()\n\n    this.fp = flatpickr(this.flatpickrElement, {\n      ...this.config\n    })\n\n    this._initializeElements()\n  }\n\n  disconnect() {\n    const value = this.inputTarget.value\n    this.fp.destroy()\n    this.inputTarget.value = value\n  }\n\n  _initializeEvents() {\n    events.forEach((event) => {\n      if (this[event]) {\n        const hook = `on${capitalize(event)}`\n        this.config[hook] = this[event].bind(this)\n      }\n    })\n  }\n\n  _initializeOptions() {\n    Object.keys(options).forEach((optionType) => {\n      const optionsCamelCase = options[optionType]\n      optionsCamelCase.forEach((option) => {\n        const optionKebab = kebabCase(option)\n        if (this.data.has(optionKebab)) {\n          this.config[option] = this[`_${optionType}`](optionKebab)\n        }\n      })\n    })\n    this._handleDaysOfWeek()\n  }\n\n  _handleDaysOfWeek() {\n    if (this.config.disableDaysOfWeek) {\n      this.config.disableDaysOfWeek = this._validateDaysOfWeek(this.config.disableDaysOfWeek)\n      this.config.disable = [...(this.config.disable || []), this._disable.bind(this)]\n    }\n\n    if (this.config.enableDaysOfWeek) {\n      this.config.enableDaysOfWeek = this._validateDaysOfWeek(this.config.enableDaysOfWeek)\n      this.config.enable = [...(this.config.enable || []), this._enable.bind(this)]\n    }\n  }\n\n  _validateDaysOfWeek(days) {\n    if (Array.isArray(days)) {\n      return days.map((day) => parseInt(day))\n    } else {\n      console.error('days of week must be a valid array')\n      return []\n    }\n  }\n\n  _disable(date) {\n    const disabledDays = this.config.disableDaysOfWeek\n    return disabledDays.includes(date.getDay())\n  }\n\n  _enable(date) {\n    const enabledDays = this.config.enableDaysOfWeek\n    return enabledDays.includes(date.getDay())\n  }\n\n  _initializeDateFormats() {\n    dateFormats.forEach((dateFormat) => {\n      if (this.data.has(dateFormat)) {\n        this.config[dateFormat] = convertDateFormat(this.data.get(dateFormat))\n      }\n    })\n  }\n\n  _initializeElements() {\n    elements.forEach((element) => {\n      this[`${element}Target`] = this.fp[element]\n    })\n  }\n\n  _string(option) {\n    return this.data.get(option)\n  }\n\n  _date(option) {\n    return this.data.get(option)\n  }\n\n  _boolean(option) {\n    return !(this.data.get(option) == '0' || this.data.get(option) == 'false')\n  }\n\n  _array(option) {\n    return JSON.parse(this.data.get(option))\n  }\n\n  _number(option) {\n    return parseInt(this.data.get(option))\n  }\n\n  _arrayOrString(option) {\n    const val = this.data.get(option)\n    try {\n      return JSON.parse(val)\n    } catch (e) {\n      return val\n    }\n  }\n\n  get flatpickrElement() {\n    return (this.hasInstanceTarget && this.instanceTarget) || this.element\n  }\n}\n\nexport default StimulusFlatpickr\n", "import Flatpickr from \"stimulus-flatpickr\";\n\n// Connects to data-controller=\"appointments--calendar--date-picker\"\nexport default class extends Flatpickr {\n  change(selectedDates, dateStr, instance) {\n    const date = selectedDates[0];\n    const url = new URL(window.location);\n    url.searchParams.set(\"start_date\", date.toISOString().split(\"T\")[0]);\n\n    window.location.href = url;\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"appointments--form\"\nexport default class extends Controller {\n  static targets = [\"form\", \"patientInputField\"];\n\n  connect() {\n    this._visible = false;\n  }\n\n  toggleForm(patientId) {\n    if (this._visible) {\n      this.hide();\n    } else {\n      this.show(patientId);\n    }\n  }\n\n  show(patientId = null) {\n    this.formTarget.classList.remove(\"d-none\");\n    this.formTarget.classList.add(\"d-block\");\n\n    if (patientId) {\n      // Set the value of the patientInputField\n      this.patientInputFieldTarget.value = patientId;\n\n      // Trigger the change event\n      this.patientInputFieldTarget.dispatchEvent(new Event(\"change\"));\n    }\n\n    this._visible = true;\n  }\n\n  hide() {\n    this.formTarget.classList.add(\"d-none\");\n    this.formTarget.classList.remove(\"d-block\");\n\n    // Remove the patient id from the input\n    this.patientInputFieldTarget.value = \"\";\n\n    this._visible = false;\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"appointments--patient-search\"\nexport default class extends Controller {\n  static outlets = [\"appointments--form\"];\n\n  connect() {\n    this._isPatientSelected = this.patientIdValue !== 0;\n  }\n\n  selectPatient(e) {\n    let patientId = e.target.dataset.patientId;\n\n    if (e.target.checked) {\n      this._isPatientSelected = true;\n\n      this.appointmentsFormOutlets.forEach((outlet) => {\n        outlet.show(patientId);\n      });\n\n      e.target.parentElement.requestSubmit();\n    } else {\n      this._isPatientSelected = false;\n\n      this.appointmentsFormOutlets.forEach((outlet) => {\n        outlet.hide();\n      });\n    }\n  }\n\n  changePatient(e) {\n    // e.preventDefault();\n\n    // Hide the appointment form\n    this.appointmentsFormOutlets.forEach((outlet) => {\n      outlet.hide();\n    });\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n  static targets = ['container', 'template']\n\n  addInput(event) {\n    event.preventDefault()\n\n    const content = this.templateTarget.innerHTML\n    this.containerTarget.insertAdjacentHTML('beforeend', content)\n  }\n\n  removeInput(event) {\n    event.preventDefault()\n\n    let arrayFieldToRemove = event.target.closest('.array-input')\n    arrayFieldToRemove.remove()\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = ['totalPaid', 'adjustment']\n  static values = {\n    claimTotal: Number\n  }\n\n  connect() {\n    this.claimTotal = Number(this.claimTotalValue)\n  }\n\n  calculate(e) {\n    this.totalPaid = 0.00\n\n    document.querySelectorAll('.payment-amount').forEach(element => {\n      if (element.offsetParent !== null) {\n        let value = Number(element.value)\n\n        // Add the payment amount to the total paid\n        this.totalPaid += value\n      }\n    })\n\n    // Subtract the total paid from the claim total\n    this.adjustment = this.claimTotal - this.totalPaid\n\n    let formatter = new Intl.NumberFormat('en-US', {\n      style: 'currency',\n      currency: 'USD',\n    })\n\n    this.totalPaidTarget.innerText = formatter.format(this.totalPaid)\n    this.adjustmentTarget.innerText = formatter.format(this.adjustment)\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"billing--payer-field\"\nexport default class extends Controller {\n  static targets = ['inputField']\n\n  fillPayer(e) {\n    e.preventDefault()\n\n    if (e.target.checked) {\n      this.inputFieldTarget.value = e.target.value\n      return\n    }\n\n    this.inputFieldTarget.value = ''\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"subtotal\", \"quantity\", \"total\"]\n\n  updateTotal() {\n    const subtotal = parseFloat(this.subtotalTarget.value)\n    const quantity = parseFloat(this.quantityTarget.value)\n    const total = subtotal * quantity\n    this.totalTarget.value = total.toFixed(2)\n  }\n}", "import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"deny-link-click\"\nexport default class extends Controller {\n  connect() {\n    this.element.addEventListener(\"click\", this.denyLinkClick);\n  }\n\n  denyLinkClick(event) {\n    event.preventDefault();\n\n    alert(\"Access Denied\");\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static values = {\n    categories: Object\n  }\n  static targets = [\"subCategorySelect\"]\n\n  categorySelected(event) {\n    let value = event.target.value\n\n    if (value) {\n      let subCategories = this.categoriesValue[value]\n\n      // If subCategories exists, populate the subCategorySelect\n      if (subCategories.length > 0) {\n        this.subCategorySelectTarget.innerHTML = \"\"\n\n        // Create the prompt option\n        let promptOption = document.createElement(\"option\")\n        promptOption.value = \"\"\n        promptOption.innerText = \"Select Subcategory\"\n        this.subCategorySelectTarget.appendChild(promptOption)\n\n        subCategories.forEach(subCategory => {\n          let option = document.createElement(\"option\")\n          option.value = subCategory\n          option.innerText = subCategory\n          this.subCategorySelectTarget.appendChild(option)\n        })\n\n        // Show the field\n        this.subCategorySelectTarget.classList.remove(\"d-none\")\n      } else {\n        this.clearSubCategorySelect()\n      }\n    } else {\n      this.clearSubCategorySelect()\n    }\n  }\n\n  clearSubCategorySelect() {\n    this.subCategorySelectTarget.innerHTML = \"\"\n    this.subCategorySelectTarget.classList.add(\"d-none\")\n  }\n}", "import { Controller } from \"@hotwired/stimulus\";\nimport { get } from \"@rails/request.js\";\n\nexport default class extends Controller {\n  static targets = [\"select\"];\n  static values = {\n    url: String,\n    //param: String\n  };\n\n  connect() {\n    if (this.selectTarget.id === \"\") {\n      this.selectTarget.id = Math.random().toString(36);\n    }\n  }\n\n  change(event) {\n    if (!event.target.value) return;\n\n    let url = this.urlValue;\n\n    let urlAttribute = event.params.urlAttribute;\n    if (urlAttribute) {\n      // Replace the urlAttribute with the value\n      url = url.replace(urlAttribute, event.target.value);\n    }\n\n    let params = new URLSearchParams();\n    // params.append(this.paramValue, event.target.value)\n    params.append(\"target\", this.selectTarget.id);\n\n    get(`${url}?${params}`, {\n      responseKind: \"turbo-stream\",\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"source\", \"form\", \"input\"]\n\n  static values = {\n    model: String,\n    name: String,\n    inputClass: String,\n    dropdownOptions: Array,\n    url: String\n  }\n\n  toggle(event) {\n    event.preventDefault()\n\n    if (this.data.get(\"toggled\") != 1) {\n      this.data.set('toggled', 1)\n      this.data.set('previousValue', this.sourceTarget.innerHTML)\n\n      this.sourceTarget.innerHTML = this.form()\n\n      event.target.innerHTML = 'Cancel'\n    } else {\n      this.sourceTarget.innerHTML = this.data.get('previousValue')\n      this.data.set('toggled', 0)\n\n      event.target.innerHTML = 'Edit'\n    }\n  }\n\n  form() {\n    return `\n      <form action=\"${this.urlValue}\" accept-charset=\"UTF-8\" data-inline-select-edit-target=\"form\" method=\"post\">\n        <input name=\"utf8\" type=\"hidden\" value=\"\u2713\">\n        <input type=\"hidden\" name=\"_method\" value=\"patch\">\n        <input type=\"hidden\" name=\"authenticity_token\" value=\"${this.authToken}\">\n\n        <div class=\"form-group select\">\n          <select class=\"${this.inputClassValue}\" name=\"${this.modelValue}[${this.nameValue}]\" id=\"${this.modelValue}_${this.nameValue}\" data-inline-select-edit-target=\"input\" data-action=\"change->inline-select-edit#submit\">\n            ${this.dropdownOptionsValue.map(item => (`<option value=\"${item['value']}\" ${(this.data.get('previousValue') == item[\"text\"]) ? 'selected' : ''}>${item['text']}</option>`)).join('')}\n          </select>\n      </form>\n    `\n  }\n\n  submit() {\n    this.formTarget.submit()\n  }\n\n  get authToken() {\n    return document.querySelector(\"meta[name='csrf-token']\").getAttribute(\"content\")\n  }\n}", "import { Controller } from \"@hotwired/stimulus\";\n\nconst styles = `\n  .mceNonEditable {\n    background-color: #D6F0FF;\n    padding: 1px 0;\n    color: #44719B;\n    font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n    font-size: 0.9375em;\n  }\n`;\n\nexport default class extends Controller {\n  static targets = [\"field\"];\n  static values = {\n    height: { type: String, default: \"80vh\" },\n  };\n\n  connect() {\n    let config = Object.assign(\n      { target: this.fieldTarget },\n      this.editorOptions,\n    );\n    tinymce.init(config);\n  }\n\n  disconnect() {\n    tinymce.remove();\n  }\n\n  get defaultOptions() {\n    return {\n      base_url: \"/assets/tinymce\",\n      content_style: styles,\n      plugins: \"lists advlist table code\",\n      branding: false,\n      height: this.heightValue,\n      fontsize_formats: \"10px 12px 14px 16px 18px 24px 26px 36px\",\n      menubar: \"edit view insert format tools table\",\n      toolbar1:\n        \"undo redo | blocks fontsize | bold italic underline forecolor backcolor | link | alignleft aligncenter alignright alignjustify lineheight | checklist bullist numlist indent outdent | removeformat | pagebreak\",\n      contextmenu_never_use_native: false,\n      // content_css: \"document\",\n      content_css: \"/assets/editor.css\",\n      promotion: false,\n      noneditable_class: \"mceNonEditable\",\n      convert_urls: true,\n      relative_urls: false,\n      remove_script_host: false,\n    };\n  }\n\n  get editorOptions() {\n    return {\n      ...this.defaultOptions,\n      ...this.optionsValue,\n    };\n  }\n}\n", "import tinymce from 'tinymce'\n\nimport * as Buttons from './ui/buttons'\nimport { FetchRequest } from '@rails/request.js'\nimport { setupFieldTagComponent } from './core/field-tag-component'\n\nconst setup = (editor) => {\n  let fieldsUrl = editor.getParam('intakeDocumentFieldOptions')['fieldsUrl']\n  let documentType = editor.getParam('intakeDocumentFieldOptions')['documentType']\n  let fields = getFields(fieldsUrl, documentType)\n\n  // FilterContent.register(editor)\n  Buttons.register(editor, fields)\n\n  editor.on('Init', () => {\n    const win = editor.getWin()\n    const doc = editor.getDoc()\n\n    setupFieldTagComponent(win, doc, editor, fields)\n  })\n\n  editor.on('PreInit', () => {\n    editor.serializer.addNodeFilter('intake-document-field', (nodes) => {\n      nodes.forEach((node) => {\n        if (!!node.attr(\"contenteditable\")) {\n          node.attr(\"contenteditable\", null)\n        }\n      })\n    })\n  })\n}\n\nconst getFields = async (url, documentType) => {\n  const request = new FetchRequest('get', url, {\n    responseKind: 'json',\n    contentType: 'application/json',\n    query: {\n      type: documentType\n    }\n  })\n\n  const response = await request.perform()\n  const json = await response.json\n\n  return json\n}\n\nexport default () => {\n  tinymce.PluginManager.add('intake-document-template-fields', setup)\n}", "export default class FieldDialog {\n  #fieldToInsert;\n  #editor;\n  #dialog;\n  #intakeDocumentField;\n  data = {};\n\n  constructor(editor, field, intakeDocumentField) {\n    this.#fieldToInsert = field;\n    this.#editor = editor;\n\n    if (intakeDocumentField) {\n      this.data = {\n        fieldName: intakeDocumentField.dataset.label,\n        confirmable: intakeDocumentField.dataset.confirmable === \"true\",\n        required: intakeDocumentField.dataset.required === \"true\",\n      };\n\n      this.#intakeDocumentField = intakeDocumentField;\n    }\n  }\n\n  show() {\n    let items = [];\n\n    if (this.#fieldToInsert.options.requires_field_name) {\n      items.push({\n        type: \"input\",\n        name: \"fieldName\",\n        label: \"Field Name\",\n      });\n\n      items.push({\n        type: \"checkbox\",\n        name: \"required\",\n        label: \"Required\",\n      });\n    }\n\n    if (this.#fieldToInsert.options.confirmable) {\n      items.push({\n        type: \"checkbox\",\n        name: \"confirmable\",\n        label: \"Confirmable\",\n      });\n    }\n\n    if (items.length > 0) {\n      let options = {\n        title: \"Insert Field\",\n        body: {\n          type: \"panel\",\n          items: items,\n        },\n        buttons: [\n          {\n            type: \"cancel\",\n            name: \"closebutton\",\n            text: \"Cancel\",\n          },\n          {\n            type: \"submit\",\n            name: \"submitbutton\",\n            text: \"OK\",\n            primary: true,\n          },\n        ],\n        initialData: this.data,\n        onSubmit: (api) => {\n          let data = api.getData();\n          let fieldName = data.fieldName\n            ? data.fieldName\n            : this.#fieldToInsert.display_name;\n\n          this.#insertField(fieldName, data.confirmable, data.required);\n\n          api.close();\n        },\n      };\n\n      this.#dialog = this.#editor.windowManager.open(options);\n      return;\n    }\n\n    this.#insertField(this.#fieldToInsert.display_name);\n  }\n\n  #insertField(fieldName = \"\", confirmable = false, required = false) {\n    let label = fieldName ? fieldName : this.#fieldToInsert.display_name;\n    let inputName = fieldName\n      .trim()\n      .toLowerCase()\n      .replace(/[^a-zA-Z0-9 -]/, \"\")\n      .replace(/\\s/g, \"_\");\n\n    this.#editor.undoManager.transact(() => {\n      let isEdit = true;\n\n      if (!this.#intakeDocumentField) {\n        this.#intakeDocumentField = document.createElement(\n          \"intake-document-field\",\n        );\n        isEdit = false;\n      }\n\n      this.#intakeDocumentField.dataset.fieldId = this.#fieldToInsert.id;\n      this.#intakeDocumentField.dataset.fieldType = this.#fieldToInsert.name;\n      this.#intakeDocumentField.dataset.confirmable = confirmable;\n      this.#intakeDocumentField.dataset.label = label;\n      this.#intakeDocumentField.dataset.inputName = inputName;\n      this.#intakeDocumentField.dataset.required = required;\n      this.#intakeDocumentField.innerHTML = label;\n\n      if (!isEdit) {\n        this.#editor.insertContent(this.#intakeDocumentField.outerHTML);\n      } else {\n        this.#editor.nodeChanged();\n      }\n    });\n  }\n}\n", "import FieldDialog from './field-dialog'\n\nconst register = (editor, fields) => {\n  editor.ui.registry.addMenuButton('intake-document-fields', {\n    text: 'Insert Field',\n    fetch: async function(callback) {\n      fields.then((result) => {\n        let menuItems = result.map(field => {\n          return {\n            type: 'menuitem',\n            text: field.display_name,\n            getSubmenuItems: () => getChildItems(editor, field),\n            onAction: () => showFieldDialog(editor, field)\n          }\n        })\n\n        callback(menuItems)\n      })\n    }\n  })\n}\n\nfunction getChildItems(editor, field) {\n  const subItems = []\n\n  if (field.subitems && field.subitems.length > 0) {\n    field.subitems.forEach(subItem => {\n      subItems.push({\n        type: 'menuitem',\n        text: subItem.display_name,\n        getSubmenuItems: () => getChildItems(editor, subItem),\n        onAction: () => showFieldDialog(editor, subItem)\n      })\n    })\n  }\n\n  return subItems\n}\n\nfunction showFieldDialog(editor, field) {\n  if (field.subitems && field.subitems.length > 0) {\n    return\n  }\n\n  const fieldDialog = new FieldDialog(editor, field)\n  fieldDialog.show()\n}\n\nexport { register }", "import FieldDialog from \"../ui/field-dialog\"\n\nconst setupFieldTagComponent = (win, doc, editor, fields) => {\n  const template = doc.createElement('template')\n\n  template.innerHTML = `\n    <style>\n      :host {\n        \n      }\n\n      .intake-document-field-affix {\n        background-color: rgba(0,108,231,.1);\n        color: #006ce7;\n      }\n\n      :host(:hover) {\n        background-color: rgba(0,108,231,.1);\n      }\n\n      :host([contentEditable=false][data-mce-selected]) {\n        cursor: not-allowed;\n        outline: 3px solid #b4d7ff;\n      }\n    </style>\n    \n    <span>\n      <slot>field-not-defined</slot>\n    </span>\n  `\n\n  class IntakeDocumentField extends win.HTMLElement {\n    constructor() {\n      super()\n\n      this.setAttribute('contenteditable', false)\n      const shadow = this.attachShadow({ mode: 'open' })\n\n      let prefixElement = document.createElement('span')\n      prefixElement.classList.add('intake-document-field-affix')\n      prefixElement.innerHTML = '{*'\n\n      this.shadowRoot.appendChild(prefixElement)\n\n      this.shadowRoot.appendChild(template.content.cloneNode(true))\n\n      let affixElement = document.createElement('span')\n      affixElement.classList.add('intake-document-field-affix')\n      affixElement.innerHTML = '*}'\n\n      this.shadowRoot.appendChild(affixElement)\n    }\n\n    connectedCallback() {\n      const editField = () => {\n        fields.then((result) => {\n          let combinedFields = this.combinedFields(result)\n          let field = combinedFields.find(f => f.id == this.dataset.fieldId)\n          \n          const fieldDialog = new FieldDialog(editor, field, this)\n          fieldDialog.show()\n        })\n      }\n\n      this.shadowRoot.addEventListener('dblclick', editField)\n    }\n\n    combinedFields(fields) {\n      let result = []\n      fields.forEach(f => {\n        result.push(f)\n        if (Array.isArray(f.subitems)) {\n          result = result.concat(this.combinedFields(f.subitems))\n        }\n      })\n\n      return result\n    }\n  }\n\n  win.customElements.define('intake-document-field', IntakeDocumentField)\n}\n\nexport { setupFieldTagComponent }\n", "import Plugin from './plugin'\n\nPlugin()", "import WysiwygController from \"../wysiwyg_controller\";\n\n// Custom Plugins\nimport \"../../tinymce/plugins/intake-document-template-fields\";\n\nexport default class extends WysiwygController {\n  static values = {\n    fieldsUrl: String,\n    documentType: String,\n  };\n\n  get optionsValue() {\n    return {\n      plugins: \"lists advlist table code intake-document-template-fields\",\n      toolbar2: \"intake-document-fields\",\n      custom_elements: \"~intake-document-field\",\n      content_css: \"document\",\n      intakeDocumentFieldOptions: {\n        fieldsUrl: this.fieldsUrlValue,\n        documentType: this.documentTypeValue,\n      },\n    };\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"intake-document-templates--form\"\nexport default class extends Controller {\n  static targets = [\"inSystemFields\", \"pdfFields\"];\n\n  connect() {}\n\n  toggleFields(event) {\n    if (event.target.value == \"non_pdf\") {\n      this.inSystemFieldsTarget.classList.remove(\"d-none\");\n      this.pdfFieldsTarget.classList.add(\"d-none\");\n    } else if (event.target.value == \"pdf\") {\n      this.inSystemFieldsTarget.classList.add(\"d-none\");\n      this.pdfFieldsTarget.classList.remove(\"d-none\");\n    }\n  }\n}\n", "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\";", "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 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\";", "import { Controller } from \"@hotwired/stimulus\";\nimport { createPopper } from \"@popperjs/core\";\n\n// Connects to data-controller=\"intake-documents--confirmable-field\"\nexport default class extends Controller {\n  static values = {\n    field: String,\n    value: String,\n  };\n  static targets = [\"field\", \"tooltip\"];\n  static outlets = [\"intake-documents--form\"];\n\n  connect() {\n    // Create the popper instance\n    this.popper = createPopper(this.fieldTarget, this.tooltipTarget, {\n      placement: \"right\",\n      modifiers: [\n        {\n          name: \"offset\",\n          options: {\n            offset: [0, 10],\n          },\n        },\n      ],\n    });\n\n    this._tooltipVisible = true;\n    this.popper.update();\n  }\n\n  toggleTooltip(e) {\n    e.preventDefault();\n\n    if (this._tooltipVisible) {\n      this._hideTooltip();\n    } else {\n      this._showTooltip();\n    }\n  }\n\n  fieldCorrect(e) {\n    e.preventDefault();\n\n    // Hide the tooltip\n    this._hideTooltip();\n\n    // Change the color of the field to green\n    this.fieldTarget.classList.add(\"text-success\");\n  }\n\n  fieldWrong(e) {\n    e.preventDefault();\n\n    // Hide the tooltip\n    this._hideTooltip();\n\n    // Change the color of the field to red\n    this.fieldTarget.classList.add(\"text-danger\");\n\n    this.intakeDocumentsFormOutlet.addIncorrectField(\n      this.fieldValue,\n      this.valueValue\n    );\n  }\n\n  _showTooltip() {\n    this.tooltipTarget.setAttribute(\"data-show\", \"\");\n    this.popper.update();\n\n    this._tooltipVisible = true;\n  }\n\n  _hideTooltip() {\n    this.tooltipTarget.removeAttribute(\"data-show\");\n\n    this._tooltipVisible = false;\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"intake-documents--form\"\nexport default class extends Controller {\n  static targets = [\n    \"incorrectFields\",\n    \"panel\",\n    \"nextButton\",\n    \"submitButton\",\n    \"navLink\",\n  ];\n\n  activeLinkClasses = \"nav-link active\";\n  inactiveLinkClasses = \"nav-link\";\n\n  connect() {\n    this.panelIndex = 0;\n    this.showCurrentPanel();\n  }\n\n  showCurrentPanel() {\n    this.panelTargets.forEach((panel, index) => {\n      panel.hidden = index !== this.panelIndex;\n    });\n\n    this.addClassesToNavLinks();\n    this.checkSubmitButton();\n  }\n\n  addIncorrectField(field, value) {\n    let incorrectFields = this.incorrectFieldsTarget.value\n      ? JSON.parse(this.incorrectFieldsTarget.value)\n      : [];\n    incorrectFields.push({ field: field, value: value });\n\n    this.incorrectFieldsTarget.value = JSON.stringify(incorrectFields);\n  }\n\n  nextClicked(e) {\n    e.preventDefault();\n\n    if (this.panelIndex < this.panelTargets.length - 1) {\n      this.panelIndex++;\n      this.showCurrentPanel();\n    }\n  }\n\n  showPanel(e) {\n    e.preventDefault();\n\n    this.panelIndex = parseInt(e.params.panel);\n    this.showCurrentPanel();\n  }\n\n  addClassesToNavLinks() {\n    this.navLinkTargets.forEach((link, index) => {\n      if (index == this.panelIndex) {\n        link.className = this.activeLinkClasses;\n      } else {\n        link.className = this.inactiveLinkClasses;\n      }\n    });\n  }\n\n  checkSubmitButton() {\n    if (!this.hasNextButtonTarget) return;\n\n    if (this.panelIndex == this.panelTargets.length - 1) {\n      this.nextButtonTarget.classList.add(\"d-none\");\n      this.submitButtonTarget.classList.remove(\"d-none\");\n    } else {\n      this.nextButtonTarget.classList.remove(\"d-none\");\n      this.submitButtonTarget.classList.add(\"d-none\");\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"intake-documents--pain-locations\"\nexport default class extends Controller {\n  static targets = [\"field\", \"painLevel\"];\n\n  activeClasses = [\"bg-body-secondary\"];\n\n  painLevelClicked(event) {\n    event.preventDefault();\n\n    let painLevel = event.params.level;\n    this.fieldTarget.value = painLevel;\n\n    this.painLevelTargets.forEach((painLevelContainer, index) => {\n      painLevelContainer.classList.remove(...this.activeClasses);\n\n      if (index == painLevel) {\n        painLevelContainer.classList.add(...this.activeClasses);\n      }\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"medical-time-format\"\nexport default class extends Controller {\n  connect() {}\n\n  format(event) {\n    let value = event.target.value.replace(/\\D/g, \"\"); // Remove non-digits\n    if (value.length >= 3) {\n      value = value.slice(0, 4);\n      const hours = value.slice(0, 2);\n      const minutes = value.slice(2, 4);\n      event.target.value = `${hours}:${minutes}`;\n    } else {\n      event.target.value = value;\n    }\n  }\n}\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.charistheo.io/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(...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, pureKey.length)\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.2'\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  _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 !== '#' ? parseSelector(hrefAttribute.trim()) : null\n  }\n\n  return selector\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  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  // Private\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)')\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, [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 { execute, executeAfterTransition, getElement, reflow } 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 { defineJQueryPlugin, isRTL, isVisible, reflow } 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  div: [],\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 */\n// eslint-disable-next-line unicorn/better-regex\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, [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 { defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop } 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)')\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    this._activeTrigger.click = !this._activeTrigger.click\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])\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, [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.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 { defineJQueryPlugin, getElement, isDisabled, isVisible } 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\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", "import { Controller } from \"@hotwired/stimulus\";\nimport * as bootstrap from \"bootstrap\";\n\n// Connects to data-controller=\"modal\"\nexport default class extends Controller {\n  static values = {\n    backdrop: { type: String, default: \"true\" },\n  };\n\n  connect() {\n    // Clear any open backdrops\n    document.querySelectorAll(\".modal-backdrop\").forEach((backdrop) => {\n      backdrop.remove();\n    });\n\n    this.modal = new bootstrap.Modal(this.element, {\n      backdrop: this.backdropValue,\n    });\n\n    this.element.addEventListener(\"hidden.bs.modal\", (event) => {\n      console.log(\"hidden.bs.modal event fired\");\n      this.close();\n    });\n\n    // Show the modal\n    this.modal.show();\n    this._visible = true;\n\n    // Add event for turbo form submit to automatically close the modal\n    document.addEventListener(\"turbo:submit-end\", (event) => {\n      if (\n        !(\"noModalDismiss\" in event.target.dataset) &&\n        event.detail.success &&\n        this._visible\n      ) {\n        this.modal.hide();\n        this.close();\n      }\n    });\n  }\n\n  close() {\n    console.log(\"close called\");\n    this._visible = false;\n    this.element.remove();\n    this.modalTurboFrame.src = null;\n  }\n\n  get modalTurboFrame() {\n    return document.querySelector(\"turbo-frame[id='modal']\");\n  }\n}\n", "// From: https://github.com/stimulus-components/stimulus-rails-nested-form/blob/master/src/index.ts\nimport { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = ['target', 'template']\n  static values = {\n    wrapperSelector: { type: String, default: '.nested-form-wrapper' },\n  }\n\n  add(event) {\n    event.preventDefault()\n\n    const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, new Date().getTime().toString())\n    this.targetTarget.insertAdjacentHTML('beforeend', content)\n  }\n\n  remove(event) {\n    event.preventDefault()\n\n    const wrapper = event.target.closest(this.wrapperSelectorValue)\n\n    if (wrapper.dataset.newRecord === 'true') {\n      wrapper.remove()\n    } else {\n      wrapper.style.display = 'none'\n\n      const input = wrapper.querySelector('input[name*=\"_destroy\"]')\n      input.value = '1'\n    }\n  }\n}", "import { Controller } from \"@hotwired/stimulus\";\nimport { FetchRequest } from \"@rails/request.js\";\n\n// Connects to data-controller=\"patient-copies\"\nexport default class extends Controller {\n  static targets = [\"incidents\", \"documents\"];\n\n  connect() {}\n\n  toggleIncidents() {\n    this.incidentsTarget.classList.toggle(\"d-none\");\n  }\n\n  toggleDocuments() {\n    this.documentsTarget.classList.toggle(\"d-none\");\n  }\n\n  async findIncidentDocuments(event) {\n    const url = event.target.dataset.url;\n    if (!url) return;\n\n    const isChecked = event.target.checked;\n    const incidentId = event.target.value;\n\n    if (isChecked) {\n      const request = new FetchRequest(\"get\", url, {\n        responseKind: \"turbo-stream\",\n      });\n\n      const response = await request.perform();\n      if (response.ok) {\n        this.documentsTarget.classList.remove(\"d-none\");\n      } else {\n        console.error(`fetching documents for incident ${incidentId} failed`);\n      }\n    } else {\n      const incidentDocuments = document.querySelector(\n        `#incident_${incidentId}_documents`,\n      );\n\n      if (incidentDocuments) {\n        incidentDocuments.remove();\n      }\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\nimport TomSelect from \"tom-select\";\n\n// Connects to data-controller=\"patient-search\"\nexport default class extends Controller {\n  static values = {\n    url: String,\n  };\n\n  connect() {\n    const basePath = this.urlValue;\n\n    new TomSelect(this.element, {\n      valueField: \"id\",\n      labelField: \"name\",\n      searchField: \"name\",\n      load: function (query, callback) {\n        const url = `${basePath}?q=${encodeURIComponent(query)}`;\n\n        fetch(url)\n          .then((response) => response.json())\n          .then((json) => {\n            callback(json);\n          })\n          .catch(() => {\n            callback();\n          });\n      },\n    });\n  }\n}\n", null, null, null, null, null, "import { Controller } from \"@hotwired/stimulus\";\nimport SignaturePad from \"signature_pad\";\n\n// Connects to data-controller=\"pdf-form-signer\"\nexport default class extends Controller {\n  static targets = [\n    \"signaturePadCanvas\",\n    \"saveSignatureButton\",\n    \"submitButton\",\n    \"field\",\n  ];\n\n  connect() {\n    this.currentFieldIndex = 0;\n    this.initializeSignaturePad();\n\n    this.fieldTargets.forEach((field) => {\n      if (field.value) {\n        return;\n      }\n\n      if (field.type == \"time\") {\n        const date = new Date();\n\n        field.value = `${date.getHours()}:${date.getMinutes()}`;\n      }\n    });\n  }\n\n  initializeSignaturePad() {\n    this.signaturePad = new SignaturePad(this.signaturePadCanvasTarget, {\n      backgroundColor: \"rgba(0, 0, 0, 0)\",\n    });\n\n    this.resizeSignaturePad();\n  }\n\n  resizeSignaturePad() {\n    if (this.signaturePad) {\n      this.signaturePad.clear();\n      let ratio = Math.max(window.devicePixelRatio || 1, 1);\n\n      this.signaturePadCanvasTarget.width =\n        this.signaturePadCanvasTarget.offsetWidth * ratio;\n      this.signaturePadCanvasTarget.height =\n        this.signaturePadCanvasTarget.offsetHeight * ratio;\n      this.signaturePadCanvasTarget.getContext(\"2d\").scale(ratio, ratio);\n    }\n  }\n\n  inputClicked(e) {\n    if (e.currentTarget && e.currentTarget.dataset.fieldType == \"signature\") {\n      // Set the currentFieldIndex to the selected field\n      const field = e.currentTarget.querySelector(\"input[type=hidden]\");\n      if (field) {\n        this.currentFieldIndex = this.fieldTargets.indexOf(field);\n\n        this.#showSignatureField();\n        this.resizeSignaturePad();\n      }\n    }\n  }\n\n  saveSignature(e) {\n    e.preventDefault();\n\n    // Set the input to the signature pad value\n    const field = this.fieldTargets[this.currentFieldIndex];\n    if (field) {\n      field.value = this.signaturePad.toDataURL(\"image/png\");\n\n      // Check if an img element exists and update the signature.\n      // If it doesn't exist, create one\n      // let imgElement = field.closest(\"div.field-preview\").querySelector(\"img\");\n      let imgElement = field.parentNode.querySelector(\"img\");\n\n      if (imgElement) {\n        imgElement.src = this.signaturePad.toDataURL(\"image/png\");\n      } else {\n        imgElement = document.createElement(\"img\");\n        imgElement.classList.add(\"signature-preview\");\n        imgElement.src = this.signaturePad.toDataURL(\"img/png\");\n\n        field.parentNode.appendChild(imgElement);\n      }\n    }\n\n    this.#hideSignatureField();\n  }\n\n  #showSignatureField() {\n    this.signaturePadCanvasTarget.classList.remove(\"d-none\");\n    this.saveSignatureButtonTarget.classList.remove(\"d-none\");\n    this.submitButtonTarget.classList.add(\"d-none\");\n  }\n\n  #hideSignatureField() {\n    this.signaturePadCanvasTarget.classList.add(\"d-none\");\n    this.saveSignatureButtonTarget.classList.add(\"d-none\");\n    this.submitButtonTarget.classList.remove(\"d-none\");\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\nimport { get } from \"@rails/request.js\";\n\n// Connects to data-controller=\"practitioner-info\"\nexport default class extends Controller {\n  static values = { url: String };\n  static targets = [\"turbo\", \"selectBox\"];\n\n  connect() {\n    if (this.hasSelectBoxTarget) {\n      this.loadPractitionerInfo(this.selectBoxTarget.value);\n    }\n  }\n\n  update(e) {\n    this.loadPractitionerInfo(e.target.value);\n  }\n\n  loadPractitionerInfo(practitionerId) {\n    if (!practitionerId) {\n      this.turboTarget.innerHTML = \"\";\n      return;\n    }\n\n    let url = this.urlValue.replace(\":id\", practitionerId);\n\n    get(url, {\n      responseKind: \"turbo-stream\",\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\nimport { FetchRequest } from \"@rails/request.js\";\n\n// Connects to data-controller=\"report-templates--dynamic-content\"\nexport default class extends Controller {\n  static values = { url: String };\n  static targets = [\"valueContainer\"];\n\n  connect() { }\n\n  async selectedFieldChanged(event) {\n    let selectedField = event.target.value;\n    if (selectedField) {\n      let params = new URLSearchParams();\n      params.append(\"field\", selectedField);\n\n      const request = new FetchRequest(\n        \"GET\",\n        `${this.urlValue}/conditions?${params}`,\n        {\n          responseKind: \"turbo-stream\",\n        },\n      );\n\n      const response = await request.perform();\n      if (response.ok) {\n        this.element.dataset.selectedField = selectedField;\n      }\n    }\n  }\n\n  async conditionChanged(event) {\n    let condition = event.target.value;\n    if (condition && (condition == \"EQUALS\" || condition == \"DOES_NOT_EQUAL\")) {\n      let params = new URLSearchParams();\n      params.append(\"field\", this.element.dataset.selectedField);\n\n      const request = new FetchRequest(\n        \"GET\",\n        `${this.urlValue}/values?${params}`,\n        {\n          responseKind: \"turbo-stream\",\n        },\n      );\n      const response = await request.perform();\n\n      if (response.ok) {\n        this.valueContainerTarget.classList.remove(\"d-none\");\n      }\n    } else {\n      this.valueContainerTarget.classList.add(\"d-none\");\n    }\n  }\n\n  addContentClicked(event) {\n    event.preventDefault();\n\n    // Check if all required fields exist\n    let field = this.element.querySelector(\"#selected-field\").value;\n    let condition = this.element.querySelector(\"#condition\").value;\n    let content = tinymce.get(\"content\").getContent();\n    let value = this.element.querySelector(\"#value\").value;\n\n    if (!field) {\n      alert(\"Please select a field\");\n      return;\n    }\n\n    if (!condition) {\n      alert(\"Please select a condition\");\n      return;\n    }\n\n    if (!content) {\n      alert(\"Please enter content\");\n      return;\n    }\n\n    if (!this.valueContainerTarget.classList.contains(\"d-none\") && !value) {\n      alert(\"Please enter a value\");\n      return;\n    }\n\n    // Send a message back to the main TinyMCE instance\n    window.parent.postMessage({\n      mceAction: \"insertDynamicContent\",\n      data: {},\n    });\n  }\n}\n", "const setupReportTemplateFieldTag = (win, doc, editor) => {\n  const template = doc.createElement(\"template\");\n  template.innerHTML = `\n    <style>\n      :host {}\n      :host(:hover) {\n        background-color: rgba(0, 108, 231, 0.1);\n      }\n      :host([contentEditable=\"false\"][data-mce-selected]) {\n        cursor: not-allowed;\n        outline: 3px solid #b4d7ff;\n      }\n      \n      .report-template-field-affix {\n        background-color: rgba(0, 108, 231, 0.1);\n        color: #006ce7;\n      }\n    </style>\n\n    <span>\n      <slot>field-not-defined</slot>\n    </span>\n  `;\n\n  class ReportTemplateFieldTag extends win.HTMLElement {\n    constructor() {\n      super();\n\n      const shadowRoot = this.attachShadow({ mode: \"open\" });\n\n      let prefixElement = document.createElement(\"span\");\n      prefixElement.classList.add(\"report-template-field-affix\");\n      prefixElement.innerHTML = \"{*\";\n\n      this.shadowRoot.appendChild(prefixElement);\n\n      this.shadowRoot.appendChild(template.content.cloneNode(true));\n\n      let affixElement = document.createElement(\"span\");\n      affixElement.classList.add(\"report-template-field-affix\");\n      affixElement.innerHTML = \"*}\";\n\n      this.shadowRoot.appendChild(affixElement);\n    }\n\n    connectedCallback() {\n      this.setAttribute(\"contentEditable\", false);\n\n      if (editor) {\n        this.addEventListener(\"dblclick\", (e) => {\n          let allowEdit = false;\n\n          if (this.getAttribute(\"data-field-predefined\")) {\n            if (\n              this.getAttribute(\"data-field-variant\") ||\n              this.getAttribute(\"data-field-case-type\")\n            ) {\n              allowEdit = true;\n            }\n          } else {\n            allowEdit = true;\n          }\n\n          if (allowEdit) {\n            const event = new CustomEvent(\"field-dialog:open\", {\n              detail: {\n                fieldId: this.getAttribute(\"data-id\"),\n                displayOptions: this.attributes,\n              },\n            });\n\n            editor.getDoc().dispatchEvent(event);\n          }\n        });\n      }\n    }\n\n    static get observedAttributes() {\n      return [\n        \"data-id\",\n        \"data-field-name\",\n        \"data-field-predefined\",\n        \"data-field-type\",\n        \"data-field-case-type\",\n        \"data-field-variant\",\n        \"data-field-list-type\",\n        \"data-field-default-text\",\n      ];\n    }\n  }\n\n  win.customElements.define(\"report-template-field\", ReportTemplateFieldTag);\n};\n\nexport { setupReportTemplateFieldTag };\n", "const setupReportTemplateDynamicContentTag = (win, doc, editor) => {\n  const template = doc.createElement(\"template\");\n  template.innerHTML = `\n    <style>\n      :host {}\n      :host(:hover) {\n        background-color: rgba(0, 108, 231, 0.1);\n      }\n      :host([contentEditable=\"false\"][data-mce-selected]) {\n        cursor: not-allowed;\n        outline: 3px solid #b4d7ff;\n      }\n      \n      .report-template-field-affix {\n        background-color: rgba(0, 108, 231, 0.1);\n        color: #006ce7;\n      }\n    </style>\n\n    <span>\n      <span class=\"report-template-field-affix\">{* if <span id=\"condition\"></span> *}</span>\n      <span class=\"content\">\n        <slot></slot>\n      </span>\n      <span class=\"report-template-field-affix\">{* end *}</span>\n    </span>\n  `;\n\n  class ReportTemplateDynamicContentTag extends win.HTMLElement {\n    constructor() {\n      super();\n\n      this.attachShadow({ mode: \"open\" });\n      this.shadowRoot.appendChild(template.content.cloneNode(true));\n    }\n\n    connectedCallback() {\n      this.setAttribute(\"contentEditable\", false);\n\n      const cleanupContentEditable = () => {\n        if (this.firstChild.contentEditable !== \"true\") {\n          const editableWrapper = document.createElement(\"span\");\n          editableWrapper.setAttribute(\"contentEditable\", true);\n\n          while (this.firstChild) {\n            editableWrapper.appendChild(this.firstChild);\n          }\n\n          this.appendChild(editableWrapper);\n        } else {\n          if (!editor) {\n            this.firstChild.setAttribute(\"contentEditable\", false);\n          }\n        }\n      };\n\n      cleanupContentEditable();\n\n      if (editor) {\n        this.addEventListener(\"dblclick\", (e) => {\n          if (e.target == e.currentTarget) {\n            const event = new CustomEvent(\"dynamic-content-dialog:open\", {\n              detail: {\n                fieldId: this.getAttribute(\"data-id\"),\n                dynamicContentNode: this,\n              },\n            });\n\n            editor.getDoc().dispatchEvent(event);\n          }\n        });\n      }\n\n      // Prevent the element from being completely deleted\n      this.addEventListener(\"input\", () => {\n        const content = this.shadowRoot.querySelector(\"span\");\n        console.log(content);\n\n        if (content && content.textContent.trim() === \"\") {\n          // Insert a non-breaking space or other placeholder\n          content.innerHTML = \"&#8203;\"; // Zero-width space\n        }\n      });\n    }\n\n    attributeChangedCallback(name, oldValue, newValue) {\n      if (name === \"data-condition-text\") {\n        this.shadowRoot.querySelector(\"#condition\").textContent = newValue;\n      }\n    }\n\n    static get observedAttributes() {\n      return [\n        \"data-field-id\",\n        \"data-condition\",\n        \"data-value\",\n        \"data-condition-text\",\n      ];\n    }\n  }\n\n  win.customElements.define(\n    \"report-template-dynamic-content\",\n    ReportTemplateDynamicContentTag,\n  );\n};\n\nexport { setupReportTemplateDynamicContentTag };\n", "import { FetchRequest } from \"@rails/request.js\";\n\nexport const makeRequest = async (url) => {\n  const request = new FetchRequest(\"get\", url, {\n    responseKind: \"json\",\n    contentType: \"application/json\",\n  });\n\n  const response = await request.perform();\n  const json = await response.json;\n\n  return json;\n};\n", "export default class FieldDialog {\n  // Variables\n  editor;\n  field;\n  dialog;\n  isPredefinedField;\n\n  constructor(editor, field, initialData = null) {\n    this.editor = editor;\n    this.field = field;\n    this.isPredefinedField = field.predefined_field || false;\n\n    this.initialData = initialData;\n  }\n\n  show() {\n    this.dialog = this.editor.windowManager.open(this.#getDialogConfig());\n  }\n\n  #getDialogConfig() {\n    let panelItems = this.isPredefinedField\n      ? this.#predefinedFieldSettings()\n      : this.#sectionFieldSettings();\n\n    const initialData = {};\n    if (this.initialData) {\n      if (this.initialData[\"data-field-variant\"]) {\n        initialData.variant = this.initialData[\"data-field-variant\"].value;\n      }\n\n      if (this.initialData[\"data-field-case-type\"]) {\n        initialData.caseType = this.initialData[\"data-field-case-type\"].value;\n      }\n\n      if (this.initialData[\"data-field-list-type\"]) {\n        initialData.listType = this.initialData[\"data-field-list-type\"].value;\n      }\n\n      if (this.initialData[\"data-field-default-text\"]) {\n        initialData.defaultText =\n          this.initialData[\"data-field-default-text\"].value;\n      }\n    }\n\n    return {\n      title: this.field.name,\n      body: {\n        type: \"panel\",\n        items: panelItems,\n      },\n      initialData: initialData,\n      buttons: [\n        {\n          type: \"cancel\",\n          name: \"closebutton\",\n          text: \"Cancel\",\n        },\n        {\n          type: \"submit\",\n          name: \"submitbutton\",\n          text: \"OK\",\n          primary: true,\n        },\n      ],\n      onSubmit: (api) => {\n        let data = api.getData();\n        let filters = [];\n\n        // Add Variant Filter\n        if (data.variant) {\n          filters.push({ filter: \"variant\", value: data.variant });\n        }\n\n        // Add case type filter\n        if (data.caseType) {\n          filters.push({ filter: \"case_type\", value: data.caseType });\n        }\n\n        // Add list type\n        if (data.listType) {\n          filters.push({ filter: \"list_type\", value: data.listType });\n        }\n\n        // Add Default Text\n        if (data.defaultText) {\n          filters.push({ filter: \"default_text\", value: data.defaultText });\n        }\n\n        if (data.dateFormat) {\n          filters.push({ filter: \"date_format\", value: data.dateFormat });\n        }\n\n        let fieldType = \"\";\n\n        switch (this.field.field_type) {\n          case \"Checkbox\":\n            fieldType = \"list\";\n            break;\n          case \"ShortText\":\n          case \"LongText\":\n          case \"Slider\":\n          case \"Radio\":\n            fieldType = \"text\";\n            break;\n          case \"Date\":\n            fieldType = \"date\";\n            break;\n          case \"WYSIWYG\":\n            fieldType = \"rich_text\";\n            break;\n          case \"Medication\":\n            fieldType = \"medication\";\n            break;\n          case \"Signature\":\n            fieldType = \"signature\";\n            break;\n        }\n\n        if (this.isPredefinedField) {\n          fieldType = \"predefined\";\n        }\n\n        let liquid = `{% report_template_field \"${this.field.key}\", field_type: \"${fieldType}\"`;\n\n        for (const filter of filters) {\n          liquid += `, ${filter.filter}: \"${filter.value}\"`;\n        }\n\n        liquid += \" %}\";\n\n        // Insert the liquid tag\n        this.editor.insertContent(liquid);\n\n        // Close the dialog\n        api.close();\n      },\n    };\n  }\n\n  #predefinedFieldSettings() {\n    let panelItems = [];\n\n    if (this.field.variants.length > 0) {\n      panelItems.push({\n        type: \"selectbox\",\n        name: \"variant\",\n        items: this.field.variants.map((variant) => {\n          return {\n            value: variant,\n            text: variant.replaceAll(\"_\", \" \"),\n          };\n        }),\n      });\n    }\n\n    if (this.field.enable_letter_case) {\n      panelItems.push({\n        type: \"selectbox\",\n        name: \"caseType\",\n        label: \"Letter Case\",\n        items: [\n          { value: \"\", text: \"None\" },\n          {\n            value: \"capitalize\",\n            text: \"Capitalize First Letter\",\n          },\n          { value: \"titleize\", text: \"Capitalize First Letter of each Word\" },\n          { value: \"upcase\", text: \"Upper Case\" },\n          { value: \"downcase\", text: \"Lower Case\" },\n        ],\n      });\n    }\n\n    if (this.field.key == \"date_of_evaluation\" || this.field.key == \"patient_date_of_birth\") {\n      panelItems.push({\n        type: \"selectbox\",\n        name: \"dateFormat\",\n        label: \"Date Format\",\n        items: [\n          { value: \"%B %d, %Y\", text: \"January 01, 2025\" },\n          { value: \"%m/%d/%Y\", text: \"01/01/2025\" },\n          { value: \"%m/%d/%y\", text: \"01/01/25\" },\n          { value: \"%Y-%m-%d\", text: \"2025-01-01\" },\n        ]\n      });\n    }\n\n    return panelItems;\n  }\n\n  #sectionFieldSettings() {\n    let panelItems = [\n      {\n        type: \"input\",\n        name: \"defaultText\",\n        label: \"If we find this field empty, what should we put in its place?\",\n      },\n    ];\n\n    if (this.field.field_type != \"Date\") {\n      panelItems.push({\n        type: \"selectbox\",\n        name: \"caseType\",\n        label: \"Letter Case\",\n        items: [\n          { value: \"\", text: \"None\" },\n          {\n            value: \"capitalize\",\n            text: \"Capitalize First Letter\",\n          },\n          { value: \"titleize\", text: \"Capitalize First Letter of each Word\" },\n          { value: \"upcase\", text: \"Upper Case\" },\n          { value: \"downcase\", text: \"Lower Case\" },\n        ],\n      });\n    }\n\n    // If the field has responses and is a checkbox, add the list type\n    if (\n      this.field.values &&\n      this.field.values.length > 0 &&\n      this.field.field_type == \"Checkbox\"\n    ) {\n      panelItems.push({\n        type: \"selectbox\",\n        name: \"listType\",\n        label: \"Would you like to display the field as a list?\",\n        items: [\n          { value: \"comma\", text: \"Comma Separated List\" },\n          { value: \"bullet\", text: \"Bulleted List\" },\n          { value: \"number\", text: \"Numbered List\" },\n          { value: \"checkbox\", text: \"Checkboxes\" },\n        ],\n      });\n    }\n\n    if (this.field.field_type == \"Date\") {\n      panelItems.push({\n        type: \"selectbox\",\n        name: \"dateFormat\",\n        label: \"Choose the date format you would like the date to appear in\",\n        items: [\n          { value: \"%B %d, %Y\", text: \"January 01, 2025\" },\n          { value: \"%m/%d/%Y\", text: \"01/01/2025\" },\n          { value: \"%m/%d/%y\", text: \"01/01/25\" },\n          { value: \"%Y-%m-%d\", text: \"2025-01-01\" },\n        ],\n      });\n    }\n\n    return panelItems;\n  }\n}\n", "export default class DynamicContentDialog {\n  editor;\n  fields;\n  dialog;\n  selectedField;\n  condition;\n  value;\n\n  constructor(editor, fields, dynamicContentNode = null) {\n    this.editor = editor;\n    this.fields = fields;\n    this.selectedField = null;\n    this.condition = null;\n    this.value = null;\n    this.dialog = null;\n    this.innerHTML = null;\n\n    if (dynamicContentNode) {\n      let dynamicContentOptions = dynamicContentNode.attributes;\n\n      if (dynamicContentOptions[\"data-field-id\"]) {\n        let fieldId = dynamicContentOptions[\"data-field-id\"].value;\n        this.selectedField =\n          this.fields.find((field) => field.id === parseInt(fieldId)) || null;\n      }\n\n      if (dynamicContentOptions[\"data-condition\"]) {\n        this.condition = dynamicContentOptions[\"data-condition\"].value;\n      }\n\n      if (dynamicContentOptions[\"data-value\"]) {\n        this.value = dynamicContentOptions[\"data-value\"].value;\n      }\n\n      this.innerHTML = dynamicContentNode.innerHTML;\n    }\n  }\n\n  show() {\n    this.dialog = this.editor.windowManager.open(this.#getDialogConfig());\n  }\n\n  #getDialogConfig() {\n    return {\n      title: \"Dynamic Content\",\n      body: {\n        type: \"panel\",\n        items: [\n          {\n            type: \"bar\",\n            items: this.#generateConditionBarItems(),\n          },\n        ],\n      },\n      initialData: {\n        selectedField: this.selectedField\n          ? this.selectedField.id.toString()\n          : \"\",\n        condition: this.condition ? this.condition : \"IS_BLANK\",\n        value: this.value ? this.value : \"\",\n      },\n      buttons: [\n        {\n          type: \"cancel\",\n          name: \"closebutton\",\n          text: \"Cancel\",\n        },\n        {\n          type: \"submit\",\n          name: \"submitbutton\",\n          text: \"OK\",\n          primary: true,\n        },\n      ],\n      onChange: (api) => {\n        let data = api.getData();\n\n        if (data.selectedField) {\n          this.selectedField =\n            this.fields.find(\n              (field) => field.id === parseInt(data.selectedField),\n            ) || null;\n\n          this.condition = data.condition;\n          this.value = data.value;\n\n          this.dialog.redial(this.#getDialogConfig());\n        } else {\n          this.selectedField = null;\n          this.condition = \"IS_BLANK\";\n          this.value = null;\n        }\n      },\n      onSubmit: (api) => {\n        let data = api.getData();\n\n        let node = document.createElement(\"report-template-dynamic-content\");\n        node.setAttribute(\"data-field-id\", data.selectedField);\n        node.setAttribute(\"data-condition\", data.condition);\n        node.setAttribute(\n          \"data-condition-text\",\n          this.#generateConditionText(data),\n        );\n\n        if (data.value) {\n          node.setAttribute(\"data-value\", data.value);\n        }\n\n        if (this.innerHTML) {\n          node.innerHTML = this.innerHTML;\n        } else {\n          node.innerText = \"Dynamic Content\";\n        }\n\n        this.editor.insertContent(node.outerHTML);\n        api.close();\n      },\n    };\n  }\n\n  #generateConditionBarItems() {\n    let fieldOptions = this.fields.map((field) => {\n      return {\n        text: field.name,\n        value: field.id.toString(),\n      };\n    });\n\n    fieldOptions.unshift({\n      text: \"Select a field\",\n      value: \"\",\n    });\n\n    // Create condtion options\n    let conditionOptions = [\n      {\n        text: \"Is Blank\",\n        value: \"IS_BLANK\",\n      },\n      {\n        text: \"Is Not Blank\",\n        value: \"IS_NOT_BLANK\",\n      },\n    ];\n\n    // Add EQUALS AND NOT_EQUALS if the field type\n    // is radio\n    if (\n      this.selectedField &&\n      this.selectedField.values.length > 0 &&\n      this.selectedField.field_type === \"Radio\"\n    ) {\n      conditionOptions.push({\n        text: \"Equals\",\n        value: \"EQUALS\",\n      });\n\n      conditionOptions.push({\n        text: \"Does not equal\",\n        value: \"DOES_NOT_EQUAL\",\n      });\n    }\n\n    let boxItems = [\n      {\n        type: \"selectbox\",\n        name: \"selectedField\",\n        label: \"Field\",\n        items: fieldOptions,\n      },\n      {\n        type: \"selectbox\",\n        name: \"condition\",\n        label: \"Condition\",\n        items: conditionOptions,\n      },\n    ];\n\n    if (\n      this.selectedField &&\n      this.selectedField.values.length > 0 &&\n      this.selectedField.field_type === \"Radio\" &&\n      (this.condition === \"EQUALS\" || this.condition === \"DOES_NOT_EQUAL\")\n    ) {\n      boxItems.push({\n        type: \"selectbox\",\n        name: \"value\",\n        label: \"Value\",\n        items: this.selectedField.values.map((response) => {\n          return {\n            text: response.report_value,\n            value: response.id.toString(),\n          };\n        }),\n      });\n    }\n\n    return boxItems;\n  }\n\n  #generateConditionText(data) {\n    let field =\n      this.fields.find((field) => field.id === parseInt(data.selectedField)) ||\n      null;\n\n    let conditionText = `${field.name} ${data.condition}`;\n\n    if (data.value) {\n      let response =\n        field.values.find((value) => value.id === parseInt(data.value)) || null;\n\n      if (response) {\n        conditionText = `${conditionText} ${response.user_value}`;\n      }\n    }\n\n    return conditionText.toSentenceCase();\n  }\n}\n", "import { makeRequest } from \"../utils\";\nimport FieldDialog from \"./field_dialog\";\nimport DynamicContentDialog from \"./dynamic_content_dialog\";\n\nexport const register = (editor, options) => {\n  editor.ui.registry.addMenuButton(\"report-template-fields\", {\n    text: \"Insert Field\",\n    icon: \"template\",\n    fetch: async (callback) => {\n      let menuItems = [];\n\n      // Add predefined fields\n      const predefinedFields = await makeRequest(\n        options[\"predefinedFieldsUrl\"],\n      );\n\n      menuItems.push({\n        type: \"menuitem\",\n        text: \"Precreated Fields\",\n        getSubmenuItems: () => {\n          return predefinedFields.map((field) => {\n            return {\n              type: \"menuitem\",\n              text: field.name,\n              onAction: () => {\n                // If field has variants or enable_letter_case is set to true, prompt the user for the options\n                // If it doesn't, insert the field into the editor\n                if (field.variants.length > 0 || field.enable_letter_case) {\n                  let dialog = new FieldDialog(editor, field);\n                  dialog.show();\n                } else if (field.key == \"date_of_evaluation\" || field.key == \"patient_date_of_birth\") {\n                  let dialog = new FieldDialog(editor, field);\n                  dialog.show();\n                } else {\n                  // let liquid = `{{ predefined_fields.${field.key} }}`;\n                  let liquid = `{% report_template_field \"${field.key}\", field_type: \"predefined\" %}`;\n                  editor.insertContent(liquid);\n                }\n              },\n            };\n          });\n        },\n      });\n\n      if (options[\"widgetType\"] === \"procedure\") {\n        menuItems.push({\n          type: \"menuitem\",\n          text: \"Procedure Fields\",\n          getSubmenuItems: () => {\n            return [\n              {\n                type: \"menuitem\",\n                text: \"Procedure Location\",\n                onAction: () => {\n                  let field = {\n                    id: \"procedure_location\",\n                    name: \"Procedure Location\",\n                    variants: [],\n                    enable_letter_case: true,\n                    predefined_field: false,\n                    key: \"procedure_location\",\n                  };\n\n                  let dialog = new FieldDialog(editor, field);\n                  dialog.show();\n                },\n              },\n              {\n                type: \"menuitem\",\n                text: \"Procedure Type\",\n                onAction: () => {\n                  let field = {\n                    id: \"procedure_type\",\n                    name: \"Procedure Type\",\n                    variants: [],\n                    enable_letter_case: true,\n                    predefined_field: false,\n                    key: \"procedure_type\",\n                  };\n\n                  let dialog = new FieldDialog(editor, field);\n                  dialog.show();\n                },\n              },\n            ];\n          },\n        });\n      }\n\n      if (options[\"fieldsUrl\"]) {\n        const sectionFields = await makeRequest(options[\"fieldsUrl\"]);\n\n        if (sectionFields.length > 0) {\n          menuItems.push({\n            type: \"menuitem\",\n            text: \"Section Fields\",\n            getSubmenuItems: () => {\n              return sectionFields.map((field) => {\n                return {\n                  type: \"menuitem\",\n                  text: field.name,\n                  onAction: () => {\n                    let dialog = new FieldDialog(editor, field);\n                    dialog.show();\n                  },\n                };\n              });\n            },\n          });\n        }\n      }\n\n      callback(menuItems);\n    },\n  });\n\n  editor.ui.registry.addButton(\"report-template-dynamic-content\", {\n    text: \"Insert Dynamic Content\",\n    icon: \"template\",\n    onAction: async () => {\n      const fields = await makeRequest(options[\"fieldsUrl\"]);\n      const dialog = new DynamicContentDialog(editor, fields);\n      dialog.show();\n    },\n  });\n};\n", "import { setupReportTemplateFieldTag } from \"../../../lib/report-template-field-tag\";\nimport { setupReportTemplateDynamicContentTag } from \"../../../lib/report-template-dynamic-content-tag\";\nimport * as Buttons from \"./ui/buttons\";\nimport FieldDialog from \"./ui/field_dialog\";\nimport { makeRequest } from \"./utils\";\nimport DynamicContentDialog from \"./ui/dynamic_content_dialog\";\n\nconst setup = (editor) => {\n  editor.options.register(\"reportTemplateFieldsOptions\", {\n    processor: \"object\",\n  });\n\n  let predefinedFieldsUrl = editor.options.get(\"reportTemplateFieldsOptions\")[\n    \"predefinedFieldsUrl\"\n  ];\n  let fieldsUrl = editor.options.get(\"reportTemplateFieldsOptions\")[\n    \"fieldsUrl\"\n  ];\n  let fieldUrl = editor.options.get(\"reportTemplateFieldsOptions\")[\"fieldUrl\"];\n\n  let dynamicContentUrl = editor.options.get(\"reportTemplateFieldsOptions\")[\n    \"dynamicContentUrl\"\n  ];\n  let widgetType = editor.options.get(\"reportTemplateFieldsOptions\")[\n    \"widgetType\"\n  ];\n\n  Buttons.register(editor, {\n    predefinedFieldsUrl: predefinedFieldsUrl,\n    fieldsUrl: fieldsUrl,\n    dynamicContentUrl: dynamicContentUrl,\n    widgetType: widgetType,\n  });\n\n  editor.on(\"Init\", () => {\n    const win = editor.getWin();\n    const doc = editor.getDoc();\n\n    setupReportTemplateFieldTag(win, doc, editor);\n    setupReportTemplateDynamicContentTag(win, doc, editor);\n\n    editor.getDoc().addEventListener(\"field-dialog:open\", async (e) => {\n      // TODO: This is a hack, we should eventually fix\n      if (e.detail.fieldId == \"procedure_location\") {\n        const field = {\n          id: \"procedure_location\",\n          name: \"Procedure Location\",\n          variants: [],\n          enable_letter_case: true,\n          predefined_field: true,\n        };\n\n        const dialog = new FieldDialog(editor, field, e.detail.displayOptions);\n        dialog.show();\n\n        return;\n      }\n\n      if (e.detail.fieldId == \"procedure_type\") {\n        const field = {\n          id: \"procedure_type\",\n          name: \"Procedure Type\",\n          variants: [],\n          enable_letter_case: true,\n          predefined_field: true,\n        };\n\n        const dialog = new FieldDialog(editor, field, e.detail.displayOptions);\n        dialog.show();\n\n        return;\n      }\n\n      let url = \"\";\n\n      if (e.detail.displayOptions[\"data-field-predefined\"]) {\n        url = `${predefinedFieldsUrl}/${e.detail.fieldId}.json`;\n      } else {\n        url = `${fieldUrl.replace(\"PLACEHOLDER\", e.detail.fieldId)}.json`;\n      }\n\n      const field = await makeRequest(url);\n      const dialog = new FieldDialog(editor, field, e.detail.displayOptions);\n      dialog.show();\n    });\n\n    editor\n      .getDoc()\n      .addEventListener(\"dynamic-content-dialog:open\", async (e) => {\n        const fields = await makeRequest(fieldsUrl);\n        const dialog = new DynamicContentDialog(\n          editor,\n          fields,\n          e.detail.dynamicContentNode,\n        );\n\n        dialog.show();\n      });\n  });\n\n  editor.on(\"PreInit\", () => {\n    editor.serializer.addNodeFilter(\"report-template-field\", (nodes) => {\n      nodes.forEach((node) => {\n        if (!!node.attr(\"contenteditable\")) {\n          node.attr(\"contenteditable\", null);\n        }\n      });\n    });\n  });\n};\n\nexport default () => {\n  tinymce.PluginManager.add(\"report-template-fields\", setup);\n};\n", "import Plugin from \"./plugin\";\nPlugin();\n", "import WysiwygController from \"../wysiwyg_controller\";\n\nimport \"../../tinymce/plugins/report-template-fields\";\n\n// Connects to data-controller=\"report-templates--widgets\"\nexport default class extends WysiwygController {\n  static values = {\n    predefinedFieldsUrl: String,\n    fieldsUrl: String,\n    fieldUrl: String,\n    dynamicContentUrl: String,\n    widgetType: { type: String, default: \"questionnaire\" },\n  };\n\n  get optionsValue() {\n    let toolbarButtons = \"report-template-fields\";\n\n    return {\n      noneditable_class: \"mceNonEditable\",\n      plugins: \"lists advlist table code report-template-fields image\",\n      toolbar2: toolbarButtons,\n      noneditable_regexp: /(\\{\\{[^\\}]+\\}\\}|\\{%[^%]*(?:%(?!\\})[^%]*)*%\\})/g,\n      setup: (editor) => {\n        editor.on(\"dblclick\", (event) => {\n          if (\n            event.target.nodeName == \"SPAN\" &&\n            event.target.classList.contains(\"mceNonEditable\")\n          ) {\n          }\n        });\n      },\n      reportTemplateFieldsOptions: {\n        predefinedFieldsUrl: this.predefinedFieldsUrlValue,\n        fieldsUrl: this.fieldsUrlValue,\n        fieldUrl: this.fieldUrlValue,\n        dynamicContentUrl: this.dynamicContentUrlValue,\n        widgetType: this.widgetTypeValue,\n      },\n      convert_urls: true,\n      relative_urls: false,\n      remove_script_host: false,\n      // images_upload_url: \"/images\"\n      images_upload_handler: (blobInfo, progress) => {\n        const base64str =\n          \"data:\" +\n            blobInfo.blob().type +\n            \";base64,\" +\n            blobInfo.base64();\n        return Promise.resolve(base64str);\n      }\n    };\n  }\n}\n", "/**! \n * hotkeys-js v3.10.2 \n * A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies. \n * \n * Copyright (c) 2023 kenny wong <wowohoo@qq.com> \n * http://jaywcjlove.github.io/hotkeys \n * Licensed under the MIT license \n */\n\nvar isff = typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase().indexOf('firefox') > 0 : false; // \u7ED1\u5B9A\u4E8B\u4EF6\n\nfunction addEvent(object, event, method, useCapture) {\n  if (object.addEventListener) {\n    object.addEventListener(event, method, useCapture);\n  } else if (object.attachEvent) {\n    object.attachEvent(\"on\".concat(event), function () {\n      method(window.event);\n    });\n  }\n} // \u4FEE\u9970\u952E\u8F6C\u6362\u6210\u5BF9\u5E94\u7684\u952E\u7801\n\n\nfunction getMods(modifier, key) {\n  var mods = key.slice(0, key.length - 1);\n\n  for (var i = 0; i < mods.length; i++) {\n    mods[i] = modifier[mods[i].toLowerCase()];\n  }\n\n  return mods;\n} // \u5904\u7406\u4F20\u7684key\u5B57\u7B26\u4E32\u8F6C\u6362\u6210\u6570\u7EC4\n\n\nfunction getKeys(key) {\n  if (typeof key !== 'string') key = '';\n  key = key.replace(/\\s/g, ''); // \u5339\u914D\u4EFB\u4F55\u7A7A\u767D\u5B57\u7B26,\u5305\u62EC\u7A7A\u683C\u3001\u5236\u8868\u7B26\u3001\u6362\u9875\u7B26\u7B49\u7B49\n\n  var keys = key.split(','); // \u540C\u65F6\u8BBE\u7F6E\u591A\u4E2A\u5FEB\u6377\u952E\uFF0C\u4EE5','\u5206\u5272\n\n  var index = keys.lastIndexOf(''); // \u5FEB\u6377\u952E\u53EF\u80FD\u5305\u542B','\uFF0C\u9700\u7279\u6B8A\u5904\u7406\n\n  for (; index >= 0;) {\n    keys[index - 1] += ',';\n    keys.splice(index, 1);\n    index = keys.lastIndexOf('');\n  }\n\n  return keys;\n} // \u6BD4\u8F83\u4FEE\u9970\u952E\u7684\u6570\u7EC4\n\n\nfunction compareArray(a1, a2) {\n  var arr1 = a1.length >= a2.length ? a1 : a2;\n  var arr2 = a1.length >= a2.length ? a2 : a1;\n  var isIndex = true;\n\n  for (var i = 0; i < arr1.length; i++) {\n    if (arr2.indexOf(arr1[i]) === -1) isIndex = false;\n  }\n\n  return isIndex;\n}\n\nvar _keyMap = {\n  backspace: 8,\n  '\u232B': 8,\n  tab: 9,\n  clear: 12,\n  enter: 13,\n  '\u21A9': 13,\n  return: 13,\n  esc: 27,\n  escape: 27,\n  space: 32,\n  left: 37,\n  up: 38,\n  right: 39,\n  down: 40,\n  del: 46,\n  delete: 46,\n  ins: 45,\n  insert: 45,\n  home: 36,\n  end: 35,\n  pageup: 33,\n  pagedown: 34,\n  capslock: 20,\n  num_0: 96,\n  num_1: 97,\n  num_2: 98,\n  num_3: 99,\n  num_4: 100,\n  num_5: 101,\n  num_6: 102,\n  num_7: 103,\n  num_8: 104,\n  num_9: 105,\n  num_multiply: 106,\n  num_add: 107,\n  num_enter: 108,\n  num_subtract: 109,\n  num_decimal: 110,\n  num_divide: 111,\n  '\u21EA': 20,\n  ',': 188,\n  '.': 190,\n  '/': 191,\n  '`': 192,\n  '-': isff ? 173 : 189,\n  '=': isff ? 61 : 187,\n  ';': isff ? 59 : 186,\n  '\\'': 222,\n  '[': 219,\n  ']': 221,\n  '\\\\': 220\n}; // Modifier Keys\n\nvar _modifier = {\n  // shiftKey\n  '\u21E7': 16,\n  shift: 16,\n  // altKey\n  '\u2325': 18,\n  alt: 18,\n  option: 18,\n  // ctrlKey\n  '\u2303': 17,\n  ctrl: 17,\n  control: 17,\n  // metaKey\n  '\u2318': 91,\n  cmd: 91,\n  command: 91\n};\nvar modifierMap = {\n  16: 'shiftKey',\n  18: 'altKey',\n  17: 'ctrlKey',\n  91: 'metaKey',\n  shiftKey: 16,\n  ctrlKey: 17,\n  altKey: 18,\n  metaKey: 91\n};\nvar _mods = {\n  16: false,\n  18: false,\n  17: false,\n  91: false\n};\nvar _handlers = {}; // F1~F12 special key\n\nfor (var k = 1; k < 20; k++) {\n  _keyMap[\"f\".concat(k)] = 111 + k;\n}\n\nvar _downKeys = []; // \u8BB0\u5F55\u6441\u4E0B\u7684\u7ED1\u5B9A\u952E\n\nvar winListendFocus = false; // window\u662F\u5426\u5DF2\u7ECF\u76D1\u542C\u4E86focus\u4E8B\u4EF6\n\nvar _scope = 'all'; // \u9ED8\u8BA4\u70ED\u952E\u8303\u56F4\n\nvar elementHasBindEvent = []; // \u5DF2\u7ED1\u5B9A\u4E8B\u4EF6\u7684\u8282\u70B9\u8BB0\u5F55\n// \u8FD4\u56DE\u952E\u7801\n\nvar code = function code(x) {\n  return _keyMap[x.toLowerCase()] || _modifier[x.toLowerCase()] || x.toUpperCase().charCodeAt(0);\n};\n\nvar getKey = function getKey(x) {\n  return Object.keys(_keyMap).find(function (k) {\n    return _keyMap[k] === x;\n  });\n};\n\nvar getModifier = function getModifier(x) {\n  return Object.keys(_modifier).find(function (k) {\n    return _modifier[k] === x;\n  });\n}; // \u8BBE\u7F6E\u83B7\u53D6\u5F53\u524D\u8303\u56F4\uFF08\u9ED8\u8BA4\u4E3A'\u6240\u6709'\uFF09\n\n\nfunction setScope(scope) {\n  _scope = scope || 'all';\n} // \u83B7\u53D6\u5F53\u524D\u8303\u56F4\n\n\nfunction getScope() {\n  return _scope || 'all';\n} // \u83B7\u53D6\u6441\u4E0B\u7ED1\u5B9A\u952E\u7684\u952E\u503C\n\n\nfunction getPressedKeyCodes() {\n  return _downKeys.slice(0);\n}\n\nfunction getPressedKeyString() {\n  return _downKeys.map(function (c) {\n    return getKey(c) || getModifier(c) || String.fromCharCode(c);\n  });\n} // \u8868\u5355\u63A7\u4EF6\u63A7\u4EF6\u5224\u65AD \u8FD4\u56DE Boolean\n// hotkey is effective only when filter return true\n\n\nfunction filter(event) {\n  var target = event.target || event.srcElement;\n  var tagName = target.tagName;\n  var flag = true; // ignore: isContentEditable === 'true', <input> and <textarea> when readOnly state is false, <select>\n\n  if (target.isContentEditable || (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') && !target.readOnly) {\n    flag = false;\n  }\n\n  return flag;\n} // \u5224\u65AD\u6441\u4E0B\u7684\u952E\u662F\u5426\u4E3A\u67D0\u4E2A\u952E\uFF0C\u8FD4\u56DEtrue\u6216\u8005false\n\n\nfunction isPressed(keyCode) {\n  if (typeof keyCode === 'string') {\n    keyCode = code(keyCode); // \u8F6C\u6362\u6210\u952E\u7801\n  }\n\n  return _downKeys.indexOf(keyCode) !== -1;\n} // \u5FAA\u73AF\u5220\u9664handlers\u4E2D\u7684\u6240\u6709 scope(\u8303\u56F4)\n\n\nfunction deleteScope(scope, newScope) {\n  var handlers;\n  var i; // \u6CA1\u6709\u6307\u5B9Ascope\uFF0C\u83B7\u53D6scope\n\n  if (!scope) scope = getScope();\n\n  for (var key in _handlers) {\n    if (Object.prototype.hasOwnProperty.call(_handlers, key)) {\n      handlers = _handlers[key];\n\n      for (i = 0; i < handlers.length;) {\n        if (handlers[i].scope === scope) handlers.splice(i, 1);else i++;\n      }\n    }\n  } // \u5982\u679Cscope\u88AB\u5220\u9664\uFF0C\u5C06scope\u91CD\u7F6E\u4E3Aall\n\n\n  if (getScope() === scope) setScope(newScope || 'all');\n} // \u6E05\u9664\u4FEE\u9970\u952E\n\n\nfunction clearModifier(event) {\n  var key = event.keyCode || event.which || event.charCode;\n\n  var i = _downKeys.indexOf(key); // \u4ECE\u5217\u8868\u4E2D\u6E05\u9664\u6309\u538B\u8FC7\u7684\u952E\n\n\n  if (i >= 0) {\n    _downKeys.splice(i, 1);\n  } // \u7279\u6B8A\u5904\u7406 cmmand \u952E\uFF0C\u5728 cmmand \u7EC4\u5408\u5FEB\u6377\u952E keyup \u53EA\u6267\u884C\u4E00\u6B21\u7684\u95EE\u9898\n\n\n  if (event.key && event.key.toLowerCase() === 'meta') {\n    _downKeys.splice(0, _downKeys.length);\n  } // \u4FEE\u9970\u952E shiftKey altKey ctrlKey (command||metaKey) \u6E05\u9664\n\n\n  if (key === 93 || key === 224) key = 91;\n\n  if (key in _mods) {\n    _mods[key] = false; // \u5C06\u4FEE\u9970\u952E\u91CD\u7F6E\u4E3Afalse\n\n    for (var k in _modifier) {\n      if (_modifier[k] === key) hotkeys[k] = false;\n    }\n  }\n}\n\nfunction unbind(keysInfo) {\n  // unbind(), unbind all keys\n  if (typeof keysInfo === 'undefined') {\n    Object.keys(_handlers).forEach(function (key) {\n      return delete _handlers[key];\n    });\n  } else if (Array.isArray(keysInfo)) {\n    // support like : unbind([{key: 'ctrl+a', scope: 's1'}, {key: 'ctrl-a', scope: 's2', splitKey: '-'}])\n    keysInfo.forEach(function (info) {\n      if (info.key) eachUnbind(info);\n    });\n  } else if (typeof keysInfo === 'object') {\n    // support like unbind({key: 'ctrl+a, ctrl+b', scope:'abc'})\n    if (keysInfo.key) eachUnbind(keysInfo);\n  } else if (typeof keysInfo === 'string') {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    // support old method\n    // eslint-disable-line\n    var scope = args[0],\n        method = args[1];\n\n    if (typeof scope === 'function') {\n      method = scope;\n      scope = '';\n    }\n\n    eachUnbind({\n      key: keysInfo,\n      scope: scope,\n      method: method,\n      splitKey: '+'\n    });\n  }\n} // \u89E3\u9664\u7ED1\u5B9A\u67D0\u4E2A\u8303\u56F4\u7684\u5FEB\u6377\u952E\n\n\nvar eachUnbind = function eachUnbind(_ref) {\n  var key = _ref.key,\n      scope = _ref.scope,\n      method = _ref.method,\n      _ref$splitKey = _ref.splitKey,\n      splitKey = _ref$splitKey === void 0 ? '+' : _ref$splitKey;\n  var multipleKeys = getKeys(key);\n  multipleKeys.forEach(function (originKey) {\n    var unbindKeys = originKey.split(splitKey);\n    var len = unbindKeys.length;\n    var lastKey = unbindKeys[len - 1];\n    var keyCode = lastKey === '*' ? '*' : code(lastKey);\n    if (!_handlers[keyCode]) return; // \u5224\u65AD\u662F\u5426\u4F20\u5165\u8303\u56F4\uFF0C\u6CA1\u6709\u5C31\u83B7\u53D6\u8303\u56F4\n\n    if (!scope) scope = getScope();\n    var mods = len > 1 ? getMods(_modifier, unbindKeys) : [];\n    _handlers[keyCode] = _handlers[keyCode].filter(function (record) {\n      // \u901A\u8FC7\u51FD\u6570\u5224\u65AD\uFF0C\u662F\u5426\u89E3\u9664\u7ED1\u5B9A\uFF0C\u51FD\u6570\u76F8\u7B49\u76F4\u63A5\u8FD4\u56DE\n      var isMatchingMethod = method ? record.method === method : true;\n      return !(isMatchingMethod && record.scope === scope && compareArray(record.mods, mods));\n    });\n  });\n}; // \u5BF9\u76D1\u542C\u5BF9\u5E94\u5FEB\u6377\u952E\u7684\u56DE\u8C03\u51FD\u6570\u8FDB\u884C\u5904\u7406\n\n\nfunction eventHandler(event, handler, scope, element) {\n  if (handler.element !== element) {\n    return;\n  }\n\n  var modifiersMatch; // \u770B\u5B83\u662F\u5426\u5728\u5F53\u524D\u8303\u56F4\n\n  if (handler.scope === scope || handler.scope === 'all') {\n    // \u68C0\u67E5\u662F\u5426\u5339\u914D\u4FEE\u9970\u7B26\uFF08\u5982\u679C\u6709\u8FD4\u56DEtrue\uFF09\n    modifiersMatch = handler.mods.length > 0;\n\n    for (var y in _mods) {\n      if (Object.prototype.hasOwnProperty.call(_mods, y)) {\n        if (!_mods[y] && handler.mods.indexOf(+y) > -1 || _mods[y] && handler.mods.indexOf(+y) === -1) {\n          modifiersMatch = false;\n        }\n      }\n    } // \u8C03\u7528\u5904\u7406\u7A0B\u5E8F\uFF0C\u5982\u679C\u662F\u4FEE\u9970\u952E\u4E0D\u505A\u5904\u7406\n\n\n    if (handler.mods.length === 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91] || modifiersMatch || handler.shortcut === '*') {\n      if (handler.method(event, handler) === false) {\n        if (event.preventDefault) event.preventDefault();else event.returnValue = false;\n        if (event.stopPropagation) event.stopPropagation();\n        if (event.cancelBubble) event.cancelBubble = true;\n      }\n    }\n  }\n} // \u5904\u7406keydown\u4E8B\u4EF6\n\n\nfunction dispatch(event, element) {\n  var asterisk = _handlers['*'];\n  var key = event.keyCode || event.which || event.charCode; // \u8868\u5355\u63A7\u4EF6\u8FC7\u6EE4 \u9ED8\u8BA4\u8868\u5355\u63A7\u4EF6\u4E0D\u89E6\u53D1\u5FEB\u6377\u952E\n\n  if (!hotkeys.filter.call(this, event)) return; // Gecko(Firefox)\u7684command\u952E\u503C224\uFF0C\u5728Webkit(Chrome)\u4E2D\u4FDD\u6301\u4E00\u81F4\n  // Webkit\u5DE6\u53F3 command \u952E\u503C\u4E0D\u4E00\u6837\n\n  if (key === 93 || key === 224) key = 91;\n  /**\n   * Collect bound keys\n   * If an Input Method Editor is processing key input and the event is keydown, return 229.\n   * https://stackoverflow.com/questions/25043934/is-it-ok-to-ignore-keydown-events-with-keycode-229\n   * http://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html\n   */\n\n  if (_downKeys.indexOf(key) === -1 && key !== 229) _downKeys.push(key);\n  /**\n   * Jest test cases are required.\n   * ===============================\n   */\n\n  ['ctrlKey', 'altKey', 'shiftKey', 'metaKey'].forEach(function (keyName) {\n    var keyNum = modifierMap[keyName];\n\n    if (event[keyName] && _downKeys.indexOf(keyNum) === -1) {\n      _downKeys.push(keyNum);\n    } else if (!event[keyName] && _downKeys.indexOf(keyNum) > -1) {\n      _downKeys.splice(_downKeys.indexOf(keyNum), 1);\n    } else if (keyName === 'metaKey' && event[keyName] && _downKeys.length === 3) {\n      /**\n       * Fix if Command is pressed:\n       * ===============================\n       */\n      if (!(event.ctrlKey || event.shiftKey || event.altKey)) {\n        _downKeys = _downKeys.slice(_downKeys.indexOf(keyNum));\n      }\n    }\n  });\n  /**\n   * -------------------------------\n   */\n\n  if (key in _mods) {\n    _mods[key] = true; // \u5C06\u7279\u6B8A\u5B57\u7B26\u7684key\u6CE8\u518C\u5230 hotkeys \u4E0A\n\n    for (var k in _modifier) {\n      if (_modifier[k] === key) hotkeys[k] = true;\n    }\n\n    if (!asterisk) return;\n  } // \u5C06 modifierMap \u91CC\u9762\u7684\u4FEE\u9970\u952E\u7ED1\u5B9A\u5230 event \u4E2D\n\n\n  for (var e in _mods) {\n    if (Object.prototype.hasOwnProperty.call(_mods, e)) {\n      _mods[e] = event[modifierMap[e]];\n    }\n  }\n  /**\n   * https://github.com/jaywcjlove/hotkeys/pull/129\n   * This solves the issue in Firefox on Windows where hotkeys corresponding to special characters would not trigger.\n   * An example of this is ctrl+alt+m on a Swedish keyboard which is used to type \u03BC.\n   * Browser support: https://caniuse.com/#feat=keyboardevent-getmodifierstate\n   */\n\n\n  if (event.getModifierState && !(event.altKey && !event.ctrlKey) && event.getModifierState('AltGraph')) {\n    if (_downKeys.indexOf(17) === -1) {\n      _downKeys.push(17);\n    }\n\n    if (_downKeys.indexOf(18) === -1) {\n      _downKeys.push(18);\n    }\n\n    _mods[17] = true;\n    _mods[18] = true;\n  } // \u83B7\u53D6\u8303\u56F4 \u9ED8\u8BA4\u4E3A `all`\n\n\n  var scope = getScope(); // \u5BF9\u4EFB\u4F55\u5FEB\u6377\u952E\u90FD\u9700\u8981\u505A\u7684\u5904\u7406\n\n  if (asterisk) {\n    for (var i = 0; i < asterisk.length; i++) {\n      if (asterisk[i].scope === scope && (event.type === 'keydown' && asterisk[i].keydown || event.type === 'keyup' && asterisk[i].keyup)) {\n        eventHandler(event, asterisk[i], scope, element);\n      }\n    }\n  } // key \u4E0D\u5728 _handlers \u4E2D\u8FD4\u56DE\n\n\n  if (!(key in _handlers)) return;\n\n  for (var _i = 0; _i < _handlers[key].length; _i++) {\n    if (event.type === 'keydown' && _handlers[key][_i].keydown || event.type === 'keyup' && _handlers[key][_i].keyup) {\n      if (_handlers[key][_i].key) {\n        var record = _handlers[key][_i];\n        var splitKey = record.splitKey;\n        var keyShortcut = record.key.split(splitKey);\n        var _downKeysCurrent = []; // \u8BB0\u5F55\u5F53\u524D\u6309\u952E\u952E\u503C\n\n        for (var a = 0; a < keyShortcut.length; a++) {\n          _downKeysCurrent.push(code(keyShortcut[a]));\n        }\n\n        if (_downKeysCurrent.sort().join('') === _downKeys.sort().join('')) {\n          // \u627E\u5230\u5904\u7406\u5185\u5BB9\n          eventHandler(event, record, scope, element);\n        }\n      }\n    }\n  }\n} // \u5224\u65AD element \u662F\u5426\u5DF2\u7ECF\u7ED1\u5B9A\u4E8B\u4EF6\n\n\nfunction isElementBind(element) {\n  return elementHasBindEvent.indexOf(element) > -1;\n}\n\nfunction hotkeys(key, option, method) {\n  _downKeys = [];\n  var keys = getKeys(key); // \u9700\u8981\u5904\u7406\u7684\u5FEB\u6377\u952E\u5217\u8868\n\n  var mods = [];\n  var scope = 'all'; // scope\u9ED8\u8BA4\u4E3Aall\uFF0C\u6240\u6709\u8303\u56F4\u90FD\u6709\u6548\n\n  var element = document; // \u5FEB\u6377\u952E\u4E8B\u4EF6\u7ED1\u5B9A\u8282\u70B9\n\n  var i = 0;\n  var keyup = false;\n  var keydown = true;\n  var splitKey = '+';\n  var capture = false; // \u5BF9\u4E3A\u8BBE\u5B9A\u8303\u56F4\u7684\u5224\u65AD\n\n  if (method === undefined && typeof option === 'function') {\n    method = option;\n  }\n\n  if (Object.prototype.toString.call(option) === '[object Object]') {\n    if (option.scope) scope = option.scope; // eslint-disable-line\n\n    if (option.element) element = option.element; // eslint-disable-line\n\n    if (option.keyup) keyup = option.keyup; // eslint-disable-line\n\n    if (option.keydown !== undefined) keydown = option.keydown; // eslint-disable-line\n\n    if (option.capture !== undefined) capture = option.capture; // eslint-disable-line\n\n    if (typeof option.splitKey === 'string') splitKey = option.splitKey; // eslint-disable-line\n  }\n\n  if (typeof option === 'string') scope = option; // \u5BF9\u4E8E\u6BCF\u4E2A\u5FEB\u6377\u952E\u8FDB\u884C\u5904\u7406\n\n  for (; i < keys.length; i++) {\n    key = keys[i].split(splitKey); // \u6309\u952E\u5217\u8868\n\n    mods = []; // \u5982\u679C\u662F\u7EC4\u5408\u5FEB\u6377\u952E\u53D6\u5F97\u7EC4\u5408\u5FEB\u6377\u952E\n\n    if (key.length > 1) mods = getMods(_modifier, key); // \u5C06\u975E\u4FEE\u9970\u952E\u8F6C\u5316\u4E3A\u952E\u7801\n\n    key = key[key.length - 1];\n    key = key === '*' ? '*' : code(key); // *\u8868\u793A\u5339\u914D\u6240\u6709\u5FEB\u6377\u952E\n    // \u5224\u65ADkey\u662F\u5426\u5728_handlers\u4E2D\uFF0C\u4E0D\u5728\u5C31\u8D4B\u4E00\u4E2A\u7A7A\u6570\u7EC4\n\n    if (!(key in _handlers)) _handlers[key] = [];\n\n    _handlers[key].push({\n      keyup: keyup,\n      keydown: keydown,\n      scope: scope,\n      mods: mods,\n      shortcut: keys[i],\n      method: method,\n      key: keys[i],\n      splitKey: splitKey,\n      element: element\n    });\n  } // \u5728\u5168\u5C40document\u4E0A\u8BBE\u7F6E\u5FEB\u6377\u952E\n\n\n  if (typeof element !== 'undefined' && !isElementBind(element) && window) {\n    elementHasBindEvent.push(element);\n    addEvent(element, 'keydown', function (e) {\n      dispatch(e, element);\n    }, capture);\n\n    if (!winListendFocus) {\n      winListendFocus = true;\n      addEvent(window, 'focus', function () {\n        _downKeys = [];\n      }, capture);\n    }\n\n    addEvent(element, 'keyup', function (e) {\n      dispatch(e, element);\n      clearModifier(e);\n    }, capture);\n  }\n}\n\nfunction trigger(shortcut) {\n  var scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'all';\n  Object.keys(_handlers).forEach(function (key) {\n    var dataList = _handlers[key].filter(function (item) {\n      return item.scope === scope && item.shortcut === shortcut;\n    });\n\n    dataList.forEach(function (data) {\n      if (data && data.method) {\n        data.method();\n      }\n    });\n  });\n}\n\nvar _api = {\n  getPressedKeyString: getPressedKeyString,\n  setScope: setScope,\n  getScope: getScope,\n  deleteScope: deleteScope,\n  getPressedKeyCodes: getPressedKeyCodes,\n  isPressed: isPressed,\n  filter: filter,\n  trigger: trigger,\n  unbind: unbind,\n  keyMap: _keyMap,\n  modifier: _modifier,\n  modifierMap: modifierMap\n};\n\nfor (var a in _api) {\n  if (Object.prototype.hasOwnProperty.call(_api, a)) {\n    hotkeys[a] = _api[a];\n  }\n}\n\nif (typeof window !== 'undefined') {\n  var _hotkeys = window.hotkeys;\n\n  hotkeys.noConflict = function (deep) {\n    if (deep && window.hotkeys === hotkeys) {\n      window.hotkeys = _hotkeys;\n    }\n\n    return hotkeys;\n  };\n\n  window.hotkeys = hotkeys;\n}\n\nexport { hotkeys as default };\n", "/*\nStimulus-Use 0.51.3\n*/\nimport { Controller } from '@hotwired/stimulus';\nimport hotkeys from 'hotkeys-js';\n\nconst method = (controller, methodName) => {\n    const method = controller[methodName];\n    if (typeof method == 'function') {\n        return method;\n    }\n    else {\n        return (...args) => { };\n    }\n};\nconst composeEventName = (name, controller, eventPrefix) => {\n    let composedName = name;\n    if (eventPrefix === true) {\n        composedName = `${controller.identifier}:${name}`;\n    }\n    else if (typeof eventPrefix === 'string') {\n        composedName = `${eventPrefix}:${name}`;\n    }\n    return composedName;\n};\nconst extendedEvent = (type, event, detail) => {\n    const { bubbles, cancelable, composed } = event || { bubbles: true, cancelable: true, composed: true };\n    if (event) {\n        Object.assign(detail, { originalEvent: event });\n    }\n    const customEvent = new CustomEvent(type, {\n        bubbles,\n        cancelable,\n        composed,\n        detail\n    });\n    return customEvent;\n};\nfunction isElementInViewport(el) {\n    const rect = el.getBoundingClientRect();\n    const windowHeight = window.innerHeight || document.documentElement.clientHeight;\n    const windowWidth = window.innerWidth || document.documentElement.clientWidth;\n    const vertInView = rect.top <= windowHeight && rect.top + rect.height > 0;\n    const horInView = rect.left <= windowWidth && rect.left + rect.width > 0;\n    return vertInView && horInView;\n}\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\n\nconst defaultOptions$8 = {\n    dispatchEvent: true,\n    eventPrefix: true,\n    visibleAttribute: 'isVisible'\n};\nconst useIntersection = (composableController, options = {}) => {\n    const controller = composableController;\n    const { dispatchEvent, eventPrefix, visibleAttribute } = Object.assign({}, defaultOptions$8, options);\n    const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n    if (!controller.intersectionElements)\n        controller.intersectionElements = [];\n    controller.intersectionElements.push(targetElement);\n    const callback = (entries) => {\n        const [entry] = entries;\n        if (entry.isIntersecting) {\n            dispatchAppear(entry);\n        }\n        else if (targetElement.hasAttribute(visibleAttribute)) {\n            dispatchDisappear(entry);\n        }\n    };\n    const dispatchAppear = (entry) => {\n        targetElement.setAttribute(visibleAttribute, 'true');\n        method(controller, 'appear').call(controller, entry);\n        if (dispatchEvent) {\n            const eventName = composeEventName('appear', controller, eventPrefix);\n            const appearEvent = extendedEvent(eventName, null, { controller, entry });\n            targetElement.dispatchEvent(appearEvent);\n        }\n    };\n    const dispatchDisappear = (entry) => {\n        targetElement.removeAttribute(visibleAttribute);\n        method(controller, 'disappear').call(controller, entry);\n        if (dispatchEvent) {\n            const eventName = composeEventName('disappear', controller, eventPrefix);\n            const disappearEvent = extendedEvent(eventName, null, { controller, entry });\n            targetElement.dispatchEvent(disappearEvent);\n        }\n    };\n    const controllerDisconnect = controller.disconnect.bind(controller);\n    const observer = new IntersectionObserver(callback, options);\n    const observe = () => {\n        observer.observe(targetElement);\n    };\n    const unobserve = () => {\n        observer.unobserve(targetElement);\n    };\n    const noneVisible = () => {\n        return controller.intersectionElements.filter(element => element.hasAttribute(visibleAttribute)).length === 0;\n    };\n    const oneVisible = () => {\n        return controller.intersectionElements.filter(element => element.hasAttribute(visibleAttribute)).length === 1;\n    };\n    const atLeastOneVisible = () => {\n        return controller.intersectionElements.some(element => element.hasAttribute(visibleAttribute));\n    };\n    const allVisible = () => {\n        return controller.intersectionElements.every(element => element.hasAttribute(visibleAttribute));\n    };\n    const isVisible = allVisible;\n    Object.assign(controller, {\n        isVisible,\n        noneVisible,\n        oneVisible,\n        atLeastOneVisible,\n        allVisible,\n        disconnect() {\n            unobserve();\n            controllerDisconnect();\n        }\n    });\n    observe();\n    return [observe, unobserve];\n};\n\nclass IntersectionComposableController extends Controller {\n}\nclass IntersectionController extends IntersectionComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useIntersection(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nconst useLazyLoad = (controller, options) => {\n    const callback = (entries) => {\n        const [entry] = entries;\n        if (entry.isIntersecting && !controller.isLoaded) {\n            handleAppear();\n        }\n    };\n    const handleAppear = (entry) => {\n        const src = controller.data.get('src');\n        if (!src)\n            return;\n        const imageElement = controller.element;\n        controller.isLoading = true;\n        method(controller, 'loading').call(controller, src);\n        imageElement.onload = () => {\n            handleLoaded(src);\n        };\n        imageElement.src = src;\n    };\n    const handleLoaded = (src) => {\n        controller.isLoading = false;\n        controller.isLoaded = true;\n        method(controller, 'loaded').call(controller, src);\n    };\n    const controllerDisconnect = controller.disconnect.bind(controller);\n    const observer = new IntersectionObserver(callback, options);\n    const observe = () => {\n        observer.observe(controller.element);\n    };\n    const unobserve = () => {\n        observer.unobserve(controller.element);\n    };\n    Object.assign(controller, {\n        isVisible: false,\n        disconnect() {\n            unobserve();\n            controllerDisconnect();\n        }\n    });\n    observe();\n    return [observe, unobserve];\n};\n\nclass LazyLoadComposableController extends Controller {\n    constructor() {\n        super(...arguments);\n        this.isLoading = false;\n        this.isLoaded = false;\n    }\n}\nclass LazyLoadController extends LazyLoadComposableController {\n    constructor(context) {\n        super(context);\n        this.options = { rootMargin: '10%' };\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useLazyLoad(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nconst defaultOptions$7 = {\n    dispatchEvent: true,\n    eventPrefix: true\n};\nconst useResize = (composableController, options = {}) => {\n    const controller = composableController;\n    const { dispatchEvent, eventPrefix } = Object.assign({}, defaultOptions$7, options);\n    const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n    const callback = (entries) => {\n        const [entry] = entries;\n        method(controller, 'resize').call(controller, entry.contentRect);\n        if (dispatchEvent) {\n            const eventName = composeEventName('resize', controller, eventPrefix);\n            const appearEvent = extendedEvent(eventName, null, {\n                controller,\n                entry\n            });\n            targetElement.dispatchEvent(appearEvent);\n        }\n    };\n    const controllerDisconnect = controller.disconnect.bind(controller);\n    const observer = new ResizeObserver(callback);\n    const observe = () => {\n        observer.observe(targetElement);\n    };\n    const unobserve = () => {\n        observer.unobserve(targetElement);\n    };\n    Object.assign(controller, {\n        disconnect() {\n            unobserve();\n            controllerDisconnect();\n        }\n    });\n    observe();\n    return [observe, unobserve];\n};\n\nclass ResizeComposableController extends Controller {\n}\nclass ResizeController extends ResizeComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useResize(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nconst defaultOptions$6 = {\n    events: ['click', 'touchend'],\n    onlyVisible: true,\n    dispatchEvent: true,\n    eventPrefix: true\n};\nconst useClickOutside = (composableController, options = {}) => {\n    const controller = composableController;\n    const { onlyVisible, dispatchEvent, events, eventPrefix } = Object.assign({}, defaultOptions$6, options);\n    const onEvent = (event) => {\n        const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n        if (targetElement.contains(event.target) || (!isElementInViewport(targetElement) && onlyVisible)) {\n            return;\n        }\n        if (controller.clickOutside) {\n            controller.clickOutside(event);\n        }\n        if (dispatchEvent) {\n            const eventName = composeEventName('click:outside', controller, eventPrefix);\n            const clickOutsideEvent = extendedEvent(eventName, event, { controller });\n            targetElement.dispatchEvent(clickOutsideEvent);\n        }\n    };\n    const observe = () => {\n        events === null || events === void 0 ? void 0 : events.forEach(event => {\n            window.addEventListener(event, onEvent, false);\n        });\n    };\n    const unobserve = () => {\n        events === null || events === void 0 ? void 0 : events.forEach(event => {\n            window.removeEventListener(event, onEvent, false);\n        });\n    };\n    const controllerDisconnect = controller.disconnect.bind(controller);\n    Object.assign(controller, {\n        disconnect() {\n            unobserve();\n            controllerDisconnect();\n        }\n    });\n    observe();\n    return [observe, unobserve];\n};\n\nclass ClickOutsideComposableController extends Controller {\n}\nclass ClickOutsideController extends ClickOutsideComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useClickOutside(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\n\nconst defaultOptions$5 = {\n    debug: false,\n    logger: console,\n    dispatchEvent: true,\n    eventPrefix: true\n};\nclass StimulusUse {\n    constructor(controller, options = {}) {\n        var _a, _b, _c;\n        this.log = (functionName, args) => {\n            if (!this.debug)\n                return;\n            this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${functionName}`, 'color: #3B82F6', 'color: unset');\n            this.logger.log(Object.assign({ controllerId: this.controllerId }, args));\n            this.logger.groupEnd();\n        };\n        this.warn = (message) => {\n            this.logger.warn(`%c${this.controller.identifier} %c${message}`, 'color: #3B82F6; font-weight: bold', 'color: unset');\n        };\n        this.dispatch = (eventName, details = {}) => {\n            if (this.dispatchEvent) {\n                const { event } = details, eventDetails = __rest(details, [\"event\"]);\n                const customEvent = this.extendedEvent(eventName, event || null, eventDetails);\n                this.targetElement.dispatchEvent(customEvent);\n                this.log('dispatchEvent', Object.assign({ eventName: customEvent.type }, eventDetails));\n            }\n        };\n        this.call = (methodName, args = {}) => {\n            const method = this.controller[methodName];\n            if (typeof method == 'function') {\n                return method.call(this.controller, args);\n            }\n        };\n        this.extendedEvent = (name, event, detail) => {\n            const { bubbles, cancelable, composed } = event || { bubbles: true, cancelable: true, composed: true };\n            if (event) {\n                Object.assign(detail, { originalEvent: event });\n            }\n            const customEvent = new CustomEvent(this.composeEventName(name), {\n                bubbles,\n                cancelable,\n                composed,\n                detail\n            });\n            return customEvent;\n        };\n        this.composeEventName = (name) => {\n            let composedName = name;\n            if (this.eventPrefix === true) {\n                composedName = `${this.controller.identifier}:${name}`;\n            }\n            else if (typeof this.eventPrefix === 'string') {\n                composedName = `${this.eventPrefix}:${name}`;\n            }\n            return composedName;\n        };\n        this.debug = (_b = (_a = options === null || options === void 0 ? void 0 : options.debug) !== null && _a !== void 0 ? _a : controller.application.stimulusUseDebug) !== null && _b !== void 0 ? _b : defaultOptions$5.debug;\n        this.logger = (_c = options === null || options === void 0 ? void 0 : options.logger) !== null && _c !== void 0 ? _c : defaultOptions$5.logger;\n        this.controller = controller;\n        this.controllerId = controller.element.id || controller.element.dataset.id;\n        this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n        const { dispatchEvent, eventPrefix } = Object.assign({}, defaultOptions$5, options);\n        Object.assign(this, { dispatchEvent, eventPrefix });\n        this.controllerInitialize = controller.initialize.bind(controller);\n        this.controllerConnect = controller.connect.bind(controller);\n        this.controllerDisconnect = controller.disconnect.bind(controller);\n    }\n}\n\nconst defaultOptions$4 = {\n    eventPrefix: true,\n    bubbles: true,\n    cancelable: true\n};\nclass UseDispatch extends StimulusUse {\n    constructor(controller, options = {}) {\n        var _a, _b, _c, _d;\n        super(controller, options);\n        this.dispatch = (eventName, detail = {}) => {\n            const { controller, targetElement, eventPrefix, bubbles, cancelable, log, warn } = this;\n            Object.assign(detail, { controller });\n            const eventNameWithPrefix = composeEventName(eventName, this.controller, eventPrefix);\n            const event = new CustomEvent(eventNameWithPrefix, {\n                detail,\n                bubbles,\n                cancelable\n            });\n            targetElement.dispatchEvent(event);\n            warn('`useDispatch()` is deprecated. Please use the built-in `this.dispatch()` function from Stimulus. You can find more information on how to upgrade at: https://stimulus-use.github.io/stimulus-use/#/use-dispatch');\n            log('dispatch', { eventName: eventNameWithPrefix, detail, bubbles, cancelable });\n            return event;\n        };\n        this.targetElement = (_a = options.element) !== null && _a !== void 0 ? _a : controller.element;\n        this.eventPrefix = (_b = options.eventPrefix) !== null && _b !== void 0 ? _b : defaultOptions$4.eventPrefix;\n        this.bubbles = (_c = options.bubbles) !== null && _c !== void 0 ? _c : defaultOptions$4.bubbles;\n        this.cancelable = (_d = options.cancelable) !== null && _d !== void 0 ? _d : defaultOptions$4.cancelable;\n        this.enhanceController();\n    }\n    enhanceController() {\n        Object.assign(this.controller, { dispatch: this.dispatch });\n    }\n}\nconst useDispatch = (controller, options = {}) => {\n    return new UseDispatch(controller, options);\n};\n\nconst defaultOptions$3 = {\n    overwriteDispatch: true\n};\nconst useApplication = (controller, options = {}) => {\n    const { overwriteDispatch } = Object.assign({}, defaultOptions$3, options);\n    Object.defineProperty(controller, 'isPreview', {\n        get() {\n            return (document.documentElement.hasAttribute('data-turbolinks-preview') ||\n                document.documentElement.hasAttribute('data-turbo-preview'));\n        }\n    });\n    Object.defineProperty(controller, 'isConnected', {\n        get() {\n            return !!Array.from(this.context.module.connectedContexts).find(c => c === this.context);\n        }\n    });\n    Object.defineProperty(controller, 'csrfToken', {\n        get() {\n            return this.metaValue('csrf-token');\n        }\n    });\n    if (overwriteDispatch) {\n        useDispatch(controller, options);\n    }\n    Object.assign(controller, {\n        metaValue(name) {\n            const element = document.head.querySelector(`meta[name=\"${name}\"]`);\n            return element && element.getAttribute('content');\n        }\n    });\n};\n\nclass ApplicationController extends Controller {\n    constructor(context) {\n        super(context);\n        this.isPreview = false;\n        this.isConnected = false;\n        this.csrfToken = '';\n        useApplication(this, this.options);\n    }\n}\n\nconst defaultEvents = ['mousemove', 'mousedown', 'resize', 'keydown', 'touchstart', 'wheel'];\nconst oneMinute = 60e3;\nconst defaultOptions$2 = {\n    ms: oneMinute,\n    initialState: false,\n    events: defaultEvents,\n    dispatchEvent: true,\n    eventPrefix: true\n};\nconst useIdle = (composableController, options = {}) => {\n    const controller = composableController;\n    const { ms, initialState, events, dispatchEvent, eventPrefix } = Object.assign({}, defaultOptions$2, options);\n    let isIdle = initialState;\n    let timeout = setTimeout(() => {\n        isIdle = true;\n        dispatchAway();\n    }, ms);\n    const dispatchAway = (event) => {\n        const eventName = composeEventName('away', controller, eventPrefix);\n        controller.isIdle = true;\n        method(controller, 'away').call(controller, event);\n        if (dispatchEvent) {\n            const clickOutsideEvent = extendedEvent(eventName, event || null, { controller });\n            controller.element.dispatchEvent(clickOutsideEvent);\n        }\n    };\n    const dispatchBack = (event) => {\n        const eventName = composeEventName('back', controller, eventPrefix);\n        controller.isIdle = false;\n        method(controller, 'back').call(controller, event);\n        if (dispatchEvent) {\n            const clickOutsideEvent = extendedEvent(eventName, event || null, { controller });\n            controller.element.dispatchEvent(clickOutsideEvent);\n        }\n    };\n    const onEvent = (event) => {\n        if (isIdle)\n            dispatchBack(event);\n        isIdle = false;\n        clearTimeout(timeout);\n        timeout = setTimeout(() => {\n            isIdle = true;\n            dispatchAway(event);\n        }, ms);\n    };\n    const onVisibility = (event) => {\n        if (!document.hidden)\n            onEvent(event);\n    };\n    if (isIdle) {\n        dispatchAway();\n    }\n    else {\n        dispatchBack();\n    }\n    const controllerDisconnect = controller.disconnect.bind(controller);\n    const observe = () => {\n        events.forEach(event => {\n            window.addEventListener(event, onEvent);\n        });\n        document.addEventListener('visibilitychange', onVisibility);\n    };\n    const unobserve = () => {\n        clearTimeout(timeout);\n        events.forEach(event => {\n            window.removeEventListener(event, onEvent);\n        });\n        document.removeEventListener('visibilitychange', onVisibility);\n    };\n    Object.assign(controller, {\n        disconnect() {\n            unobserve();\n            controllerDisconnect();\n        }\n    });\n    observe();\n    return [observe, unobserve];\n};\n\nclass IdleComposableController extends Controller {\n    constructor() {\n        super(...arguments);\n        this.isIdle = false;\n    }\n}\nclass IdleController extends IdleComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useIdle(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nclass UseVisibility extends StimulusUse {\n    constructor(controller, options = {}) {\n        super(controller, options);\n        this.observe = () => {\n            this.controller.isVisible = !document.hidden;\n            document.addEventListener('visibilitychange', this.handleVisibilityChange);\n            this.handleVisibilityChange();\n        };\n        this.unobserve = () => {\n            document.removeEventListener('visibilitychange', this.handleVisibilityChange);\n        };\n        this.becomesInvisible = (event) => {\n            this.controller.isVisible = false;\n            this.call('invisible', event);\n            this.log('invisible', { isVisible: false });\n            this.dispatch('invisible', { event, isVisible: false });\n        };\n        this.becomesVisible = (event) => {\n            this.controller.isVisible = true;\n            this.call('visible', event);\n            this.log('visible', { isVisible: true });\n            this.dispatch('visible', { event, isVisible: true });\n        };\n        this.handleVisibilityChange = (event) => {\n            if (document.hidden) {\n                this.becomesInvisible(event);\n            }\n            else {\n                this.becomesVisible(event);\n            }\n        };\n        this.controller = controller;\n        this.enhanceController();\n        this.observe();\n    }\n    enhanceController() {\n        const controllerDisconnect = this.controllerDisconnect;\n        const disconnect = () => {\n            this.unobserve();\n            controllerDisconnect();\n        };\n        Object.assign(this.controller, { disconnect });\n    }\n}\nconst useVisibility = (composableController, options = {}) => {\n    const controller = composableController;\n    const observer = new UseVisibility(controller, options);\n    return [observer.observe, observer.unobserve];\n};\n\nclass VisibilityComposableController extends Controller {\n    constructor() {\n        super(...arguments);\n        this.isVisible = false;\n    }\n}\nclass VisibilityController extends VisibilityComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useVisibility(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nclass UseHover extends StimulusUse {\n    constructor(controller, options = {}) {\n        super(controller, options);\n        this.observe = () => {\n            this.targetElement.addEventListener('mouseenter', this.onEnter);\n            this.targetElement.addEventListener('mouseleave', this.onLeave);\n        };\n        this.unobserve = () => {\n            this.targetElement.removeEventListener('mouseenter', this.onEnter);\n            this.targetElement.removeEventListener('mouseleave', this.onLeave);\n        };\n        this.onEnter = (event) => {\n            this.call('mouseEnter', event);\n            this.log('mouseEnter', { hover: true });\n            this.dispatch('mouseEnter', { hover: false });\n        };\n        this.onLeave = (event) => {\n            this.call('mouseLeave', event);\n            this.log('mouseLeave', { hover: false });\n            this.dispatch('mouseLeave', { hover: false });\n        };\n        this.controller = controller;\n        this.enhanceController();\n        this.observe();\n    }\n    enhanceController() {\n        const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n        const disconnect = () => {\n            this.unobserve();\n            controllerDisconnect();\n        };\n        Object.assign(this.controller, { disconnect });\n    }\n}\nconst useHover = (composableController, options = {}) => {\n    const controller = composableController;\n    const observer = new UseHover(controller, options);\n    return [observer.observe, observer.unobserve];\n};\n\nclass HoverComposableController extends Controller {\n}\nclass HoverController extends HoverComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useHover(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nclass UseMutation extends StimulusUse {\n    constructor(controller, options = {}) {\n        super(controller, options);\n        this.observe = () => {\n            try {\n                this.observer.observe(this.targetElement, this.options);\n            }\n            catch (error) {\n                this.controller.application.handleError(error, 'At a minimum, one of childList, attributes, and/or characterData must be true', {});\n            }\n        };\n        this.unobserve = () => {\n            this.observer.disconnect();\n        };\n        this.mutation = (entries) => {\n            this.call('mutate', entries);\n            this.log('mutate', { entries });\n            this.dispatch('mutate', { entries });\n        };\n        this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n        this.controller = controller;\n        this.options = options;\n        this.observer = new MutationObserver(this.mutation);\n        this.enhanceController();\n        this.observe();\n    }\n    enhanceController() {\n        const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n        const disconnect = () => {\n            this.unobserve();\n            controllerDisconnect();\n        };\n        Object.assign(this.controller, { disconnect });\n    }\n}\nconst useMutation = (controller, options = {}) => {\n    const observer = new UseMutation(controller, options);\n    return [observer.observe, observer.unobserve];\n};\n\nclass MutationComposableController extends Controller {\n}\nclass MutationController extends MutationComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useMutation(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nclass UseTargetMutation extends StimulusUse {\n    constructor(controller, options = {}) {\n        super(controller, options);\n        this.observe = () => {\n            this.observer.observe(this.targetElement, {\n                subtree: true,\n                characterData: true,\n                childList: true,\n                attributes: true,\n                attributeOldValue: true,\n                attributeFilter: [this.targetSelector, this.scopedTargetSelector]\n            });\n        };\n        this.unobserve = () => {\n            this.observer.disconnect();\n        };\n        this.mutation = (entries) => {\n            for (const mutation of entries) {\n                switch (mutation.type) {\n                    case 'attributes':\n                        let newValue = mutation.target.getAttribute(mutation.attributeName);\n                        let oldValue = mutation.oldValue;\n                        if (mutation.attributeName === this.targetSelector || mutation.attributeName === this.scopedTargetSelector) {\n                            let oldTargets = this.targetsUsedByThisController(oldValue);\n                            let newTargets = this.targetsUsedByThisController(newValue);\n                            let removedTargets = oldTargets.filter(target => !newTargets.includes(target));\n                            let addedTargets = newTargets.filter(target => !oldTargets.includes(target));\n                            removedTargets.forEach(target => this.targetRemoved(this.stripIdentifierPrefix(target), mutation.target, 'attributeChange'));\n                            addedTargets.forEach(target => this.targetAdded(this.stripIdentifierPrefix(target), mutation.target, 'attributeChange'));\n                        }\n                        break;\n                    case 'characterData':\n                        let nodule = this.findTargetInAncestry(mutation.target);\n                        if (nodule == null) {\n                            return;\n                        }\n                        else {\n                            let supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n                            supportedTargets.forEach((target) => {\n                                this.targetChanged(this.stripIdentifierPrefix(target), nodule, 'domMutation');\n                            });\n                        }\n                        break;\n                    case 'childList':\n                        let { addedNodes, removedNodes } = mutation;\n                        addedNodes.forEach((node) => this.processNodeDOMMutation(node, this.targetAdded));\n                        removedNodes.forEach((node) => this.processNodeDOMMutation(node, this.targetRemoved));\n                        break;\n                }\n            }\n        };\n        this.controller = controller;\n        this.options = options;\n        this.targetElement = controller.element;\n        this.identifier = controller.scope.identifier;\n        this.identifierPrefix = `${this.identifier}.`;\n        this.targetSelector = controller.scope.schema.targetAttribute;\n        this.scopedTargetSelector = `data-${this.identifier}-target`;\n        this.targets = options.targets || controller.constructor.targets;\n        this.prefixedTargets = this.targets.map(target => `${this.identifierPrefix}${target}`);\n        this.observer = new MutationObserver(this.mutation);\n        this.enhanceController();\n        this.observe();\n    }\n    processNodeDOMMutation(node, initialChangeModeAssumption) {\n        let nodule = node;\n        let change = initialChangeModeAssumption;\n        let supportedTargets = [];\n        if (nodule.nodeName == '#text' || this.targetsUsedByThisControllerFromNode(nodule).length == 0) {\n            change = this.targetChanged;\n            nodule = this.findTargetInAncestry(node);\n        }\n        else {\n            supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n        }\n        if (nodule == null) {\n            return;\n        }\n        else if (supportedTargets.length == 0) {\n            supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n        }\n        supportedTargets.forEach((target) => {\n            change.call(this, this.stripIdentifierPrefix(target), nodule, 'domMutation');\n        });\n    }\n    findTargetInAncestry(node) {\n        let nodule = node;\n        let supportedTargets = [];\n        if (nodule.nodeName != '#text') {\n            supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n        }\n        while (nodule.parentNode !== null && nodule.parentNode != this.targetElement && supportedTargets.length == 0) {\n            nodule = nodule.parentNode;\n            if (nodule.nodeName !== '#text') {\n                let supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n                if (supportedTargets.length > 0) {\n                    return nodule;\n                }\n            }\n        }\n        if (nodule.nodeName == '#text') {\n            return null;\n        }\n        if (nodule.parentNode == null) {\n            return null;\n        }\n        if (nodule.parentNode == this.targetElement) {\n            if (this.targetsUsedByThisControllerFromNode(nodule).length > 0) {\n                return nodule;\n            }\n            return null;\n        }\n        return null;\n    }\n    targetAdded(name, node, trigger) {\n        let targetCallback = `${name}TargetAdded`;\n        this.controller[targetCallback] && method(this.controller, targetCallback).call(this.controller, node);\n        this.log('targetAdded', { target: name, node, trigger });\n    }\n    targetRemoved(name, node, trigger) {\n        let targetCallback = `${name}TargetRemoved`;\n        this.controller[targetCallback] && method(this.controller, targetCallback).call(this.controller, node);\n        this.log('targetRemoved', { target: name, node, trigger });\n    }\n    targetChanged(name, node, trigger) {\n        let targetCallback = `${name}TargetChanged`;\n        this.controller[targetCallback] && method(this.controller, targetCallback).call(this.controller, node);\n        this.log('targetChanged', { target: name, node, trigger });\n    }\n    targetsUsedByThisControllerFromNode(node) {\n        if (node.nodeName == '#text' || node.nodeName == '#comment') {\n            return [];\n        }\n        let nodeElement = node;\n        return this.targetsUsedByThisController(nodeElement.getAttribute(this.scopedTargetSelector) || nodeElement.getAttribute(this.targetSelector));\n    }\n    targetsUsedByThisController(targetStr) {\n        targetStr = targetStr || '';\n        let targetsToCheck = this.stripIdentifierPrefix(targetStr).split(' ');\n        return this.targets.filter(n => targetsToCheck.indexOf(n) !== -1);\n    }\n    stripIdentifierPrefix(target) {\n        return target.replace(new RegExp(this.identifierPrefix, 'g'), '');\n    }\n    enhanceController() {\n        const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n        const disconnect = () => {\n            this.unobserve();\n            controllerDisconnect();\n        };\n        Object.assign(this.controller, { disconnect });\n    }\n}\nconst useTargetMutation = (composableController, options = {}) => {\n    const controller = composableController;\n    const observer = new UseTargetMutation(controller, options);\n    return [observer.observe, observer.unobserve];\n};\n\nclass TargetMutationComposableController extends Controller {\n}\nclass TargetMutationController extends TargetMutationComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useTargetMutation(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nconst useWindowResize = (composableController) => {\n    const controller = composableController;\n    const callback = (event) => {\n        const { innerWidth, innerHeight } = window;\n        const payload = {\n            height: innerHeight || Infinity,\n            width: innerWidth || Infinity,\n            event\n        };\n        method(controller, 'windowResize').call(controller, payload);\n    };\n    const controllerDisconnect = controller.disconnect.bind(controller);\n    const observe = () => {\n        window.addEventListener('resize', callback);\n        callback();\n    };\n    const unobserve = () => {\n        window.removeEventListener('resize', callback);\n    };\n    Object.assign(controller, {\n        disconnect() {\n            unobserve();\n            controllerDisconnect();\n        }\n    });\n    observe();\n    return [observe, unobserve];\n};\n\nclass WindowResizeComposableController extends Controller {\n}\nclass WindowResizeController extends WindowResizeComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useWindowResize(this);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nconst memoize = (controller, name, value) => {\n    Object.defineProperty(controller, name, { value });\n    return value;\n};\nconst useMemo = (controller) => {\n    var _a;\n    (_a = controller.constructor.memos) === null || _a === void 0 ? void 0 : _a.forEach((getter) => {\n        memoize(controller, getter, controller[getter]);\n    });\n};\n\nclass DebounceController extends Controller {\n}\nDebounceController.debounces = [];\nconst defaultWait$1 = 200;\nconst debounce = (fn, wait = defaultWait$1) => {\n    let timeoutId = null;\n    return function () {\n        const args = Array.from(arguments);\n        const context = this;\n        const params = args.map(arg => arg.params);\n        const callback = () => {\n            args.forEach((arg, index) => (arg.params = params[index]));\n            return fn.apply(context, args);\n        };\n        if (timeoutId) {\n            clearTimeout(timeoutId);\n        }\n        timeoutId = setTimeout(callback, wait);\n    };\n};\nconst useDebounce = (composableController, options) => {\n    const controller = composableController;\n    const constructor = controller.constructor;\n    constructor.debounces.forEach((func) => {\n        if (typeof func === 'string') {\n            controller[func] = debounce(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n        }\n        if (typeof func === 'object') {\n            const { name, wait } = func;\n            if (!name)\n                return;\n            controller[name] = debounce(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n        }\n    });\n};\n\nclass ThrottleController extends Controller {\n}\nThrottleController.throttles = [];\nconst defaultWait = 200;\nfunction throttle(func, wait = defaultWait) {\n    let inThrottle;\n    return function () {\n        const args = arguments;\n        const context = this;\n        if (!inThrottle) {\n            inThrottle = true;\n            func.apply(context, args);\n            setTimeout(() => (inThrottle = false), wait);\n        }\n    };\n}\nconst useThrottle = (composableController, options = {}) => {\n    var _a;\n    const controller = composableController;\n    const constructor = controller.constructor;\n    (_a = constructor.throttles) === null || _a === void 0 ? void 0 : _a.forEach((func) => {\n        if (typeof func === 'string') {\n            controller[func] = throttle(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n        }\n        if (typeof func === 'object') {\n            const { name, wait } = func;\n            if (!name)\n                return;\n            controller[name] = throttle(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n        }\n    });\n};\n\nconst defineMetaGetter = (controller, metaName, suffix) => {\n    const getterName = suffix ? `${camelize(metaName)}Meta` : camelize(metaName);\n    Object.defineProperty(controller, getterName, {\n        get() {\n            return typeCast(metaValue(metaName));\n        }\n    });\n};\nfunction metaValue(name) {\n    const element = document.head.querySelector(`meta[name=\"${name}\"]`);\n    return element && element.getAttribute('content');\n}\nfunction typeCast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\nconst useMeta = (controller, options = { suffix: true }) => {\n    const metaNames = controller.constructor.metaNames;\n    const suffix = options.suffix;\n    metaNames === null || metaNames === void 0 ? void 0 : metaNames.forEach((metaName) => {\n        defineMetaGetter(controller, metaName, suffix);\n    });\n    Object.defineProperty(controller, 'metas', {\n        get() {\n            const result = {};\n            metaNames === null || metaNames === void 0 ? void 0 : metaNames.forEach((metaName) => {\n                const value = typeCast(metaValue(metaName));\n                if (value !== undefined && value !== null) {\n                    result[camelize(metaName)] = value;\n                }\n            });\n            return result;\n        }\n    });\n};\n\nconst alpineNames = {\n    enterFromClass: 'enter',\n    enterActiveClass: 'enterStart',\n    enterToClass: 'enterEnd',\n    leaveFromClass: 'leave',\n    leaveActiveClass: 'leaveStart',\n    leaveToClass: 'leaveEnd'\n};\nconst defaultOptions$1 = {\n    transitioned: false,\n    hiddenClass: 'hidden',\n    preserveOriginalClass: true,\n    removeToClasses: true\n};\nconst useTransition = (composableController, options = {}) => {\n    var _a, _b, _c;\n    const controller = composableController;\n    const targetName = controller.element.dataset.transitionTarget;\n    let targetFromAttribute;\n    if (targetName) {\n        targetFromAttribute = controller[`${targetName}Target`];\n    }\n    const targetElement = (options === null || options === void 0 ? void 0 : options.element) || targetFromAttribute || controller.element;\n    if (!(targetElement instanceof HTMLElement || targetElement instanceof SVGElement))\n        return;\n    const dataset = targetElement.dataset;\n    const leaveAfter = parseInt(dataset.leaveAfter || '') || options.leaveAfter || 0;\n    const { transitioned, hiddenClass, preserveOriginalClass, removeToClasses } = Object.assign({}, defaultOptions$1, options);\n    const controllerEnter = (_a = controller.enter) === null || _a === void 0 ? void 0 : _a.bind(controller);\n    const controllerLeave = (_b = controller.leave) === null || _b === void 0 ? void 0 : _b.bind(controller);\n    const controllerToggleTransition = (_c = controller.toggleTransition) === null || _c === void 0 ? void 0 : _c.bind(controller);\n    async function enter(event) {\n        if (controller.transitioned)\n            return;\n        controller.transitioned = true;\n        controllerEnter && controllerEnter(event);\n        const enterFromClasses = getAttribute('enterFrom', options, dataset);\n        const enterActiveClasses = getAttribute('enterActive', options, dataset);\n        const enterToClasses = getAttribute('enterTo', options, dataset);\n        const leaveToClasses = getAttribute('leaveTo', options, dataset);\n        if (!!hiddenClass) {\n            targetElement.classList.remove(hiddenClass);\n        }\n        if (!removeToClasses) {\n            removeClasses(targetElement, leaveToClasses);\n        }\n        await transition(targetElement, enterFromClasses, enterActiveClasses, enterToClasses, hiddenClass, preserveOriginalClass, removeToClasses);\n        if (leaveAfter > 0) {\n            setTimeout(() => {\n                leave(event);\n            }, leaveAfter);\n        }\n    }\n    async function leave(event) {\n        if (!controller.transitioned)\n            return;\n        controller.transitioned = false;\n        controllerLeave && controllerLeave(event);\n        const leaveFromClasses = getAttribute('leaveFrom', options, dataset);\n        const leaveActiveClasses = getAttribute('leaveActive', options, dataset);\n        const leaveToClasses = getAttribute('leaveTo', options, dataset);\n        const enterToClasses = getAttribute('enterTo', options, dataset);\n        if (!removeToClasses) {\n            removeClasses(targetElement, enterToClasses);\n        }\n        await transition(targetElement, leaveFromClasses, leaveActiveClasses, leaveToClasses, hiddenClass, preserveOriginalClass, removeToClasses);\n        if (!!hiddenClass) {\n            targetElement.classList.add(hiddenClass);\n        }\n    }\n    function toggleTransition(event) {\n        controllerToggleTransition && controllerToggleTransition(event);\n        if (controller.transitioned) {\n            leave();\n        }\n        else {\n            enter();\n        }\n    }\n    async function transition(element, initialClasses, activeClasses, endClasses, hiddenClass, preserveOriginalClass, removeEndClasses) {\n        const stashedClasses = [];\n        if (preserveOriginalClass) {\n            initialClasses.forEach(cls => element.classList.contains(cls) && cls !== hiddenClass && stashedClasses.push(cls));\n            activeClasses.forEach(cls => element.classList.contains(cls) && cls !== hiddenClass && stashedClasses.push(cls));\n            endClasses.forEach(cls => element.classList.contains(cls) && cls !== hiddenClass && stashedClasses.push(cls));\n        }\n        addClasses(element, initialClasses);\n        removeClasses(element, stashedClasses);\n        addClasses(element, activeClasses);\n        await nextAnimationFrame();\n        removeClasses(element, initialClasses);\n        addClasses(element, endClasses);\n        await afterTransition(element);\n        removeClasses(element, activeClasses);\n        if (removeEndClasses) {\n            removeClasses(element, endClasses);\n        }\n        addClasses(element, stashedClasses);\n    }\n    function initialState() {\n        controller.transitioned = transitioned;\n        if (transitioned) {\n            if (!!hiddenClass) {\n                targetElement.classList.remove(hiddenClass);\n            }\n            enter();\n        }\n        else {\n            if (!!hiddenClass) {\n                targetElement.classList.add(hiddenClass);\n            }\n            leave();\n        }\n    }\n    function addClasses(element, classes) {\n        if (classes.length > 0) {\n            element.classList.add(...classes);\n        }\n    }\n    function removeClasses(element, classes) {\n        if (classes.length > 0) {\n            element.classList.remove(...classes);\n        }\n    }\n    initialState();\n    Object.assign(controller, { enter, leave, toggleTransition });\n    return [enter, leave, toggleTransition];\n};\nfunction getAttribute(name, options, dataset) {\n    const datasetName = `transition${name[0].toUpperCase()}${name.substr(1)}`;\n    const datasetAlpineName = alpineNames[name];\n    const classes = options[name] || dataset[datasetName] || dataset[datasetAlpineName] || ' ';\n    return isEmpty(classes) ? [] : classes.split(' ');\n}\nasync function afterTransition(element) {\n    return new Promise(resolve => {\n        const duration = Number(getComputedStyle(element).transitionDuration.split(',')[0].replace('s', '')) * 1000;\n        setTimeout(() => {\n            resolve(duration);\n        }, duration);\n    });\n}\nasync function nextAnimationFrame() {\n    return new Promise(resolve => {\n        requestAnimationFrame(() => {\n            requestAnimationFrame(resolve);\n        });\n    });\n}\nfunction isEmpty(str) {\n    return str.length === 0 || !str.trim();\n}\n\nclass TransitionComposableController extends Controller {\n    constructor() {\n        super(...arguments);\n        this.transitioned = false;\n    }\n}\nclass TransitionController extends TransitionComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            useTransition(this, this.options);\n        });\n    }\n}\n\nclass UseHotkeys extends StimulusUse {\n    constructor(controller, hotkeysOptions) {\n        super(controller, hotkeysOptions);\n        this.bind = () => {\n            for (const [hotkey, definition] of Object.entries(this.hotkeysOptions.hotkeys)) {\n                const handler = definition.handler.bind(this.controller);\n                hotkeys(hotkey, definition.options, (e) => handler(e, e));\n            }\n        };\n        this.unbind = () => {\n            for (const hotkey in this.hotkeysOptions.hotkeys) {\n                hotkeys.unbind(hotkey);\n            }\n        };\n        this.controller = controller;\n        this.hotkeysOptions = hotkeysOptions;\n        this.enhanceController();\n        this.bind();\n    }\n    enhanceController() {\n        if (this.hotkeysOptions.filter) {\n            hotkeys.filter = this.hotkeysOptions.filter;\n        }\n        const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n        const disconnect = () => {\n            this.unbind();\n            controllerDisconnect();\n        };\n        Object.assign(this.controller, { disconnect });\n    }\n}\nconst convertSimpleHotkeyDefinition = (definition) => {\n    return {\n        handler: definition[0],\n        options: {\n            element: definition[1]\n        }\n    };\n};\nconst coerceOptions = (options) => {\n    if (!options.hotkeys) {\n        const hotkeys = {};\n        Object.entries(options).forEach(([hotkey, definition]) => {\n            Object.defineProperty(hotkeys, hotkey, {\n                value: convertSimpleHotkeyDefinition(definition),\n                writable: false,\n                enumerable: true\n            });\n        });\n        options = {\n            hotkeys\n        };\n    }\n    return options;\n};\nconst useHotkeys = (controller, options) => {\n    return new UseHotkeys(controller, coerceOptions(options));\n};\n\nconst defaultOptions = {\n    mediaQueries: {},\n    dispatchEvent: true,\n    eventPrefix: true,\n    debug: false\n};\nclass UseMatchMedia extends StimulusUse {\n    constructor(controller, options = {}) {\n        var _a, _b, _c, _d;\n        super(controller, options);\n        this.matches = [];\n        this.callback = (event) => {\n            const name = Object.keys(this.mediaQueries).find(name => this.mediaQueries[name] === event.media);\n            if (!name)\n                return;\n            const { media, matches } = event;\n            this.changed({ name, media, matches, event });\n        };\n        this.changed = (payload) => {\n            const { name } = payload;\n            if (payload.event) {\n                this.call(camelize(`${name}_changed`), payload);\n                this.dispatch(`${name}:changed`, payload);\n                this.log(`media query \"${name}\" changed`, payload);\n            }\n            if (payload.matches) {\n                this.call(camelize(`is_${name}`), payload);\n                this.dispatch(`is:${name}`, payload);\n            }\n            else {\n                this.call(camelize(`not_${name}`), payload);\n                this.dispatch(`not:${name}`, payload);\n            }\n        };\n        this.observe = () => {\n            Object.keys(this.mediaQueries).forEach(name => {\n                const media = this.mediaQueries[name];\n                const match = window.matchMedia(media);\n                match.addListener(this.callback);\n                this.matches.push(match);\n                this.changed({ name, media, matches: match.matches });\n            });\n        };\n        this.unobserve = () => {\n            this.matches.forEach(match => match.removeListener(this.callback));\n        };\n        this.controller = controller;\n        this.mediaQueries = (_a = options.mediaQueries) !== null && _a !== void 0 ? _a : defaultOptions.mediaQueries;\n        this.dispatchEvent = (_b = options.dispatchEvent) !== null && _b !== void 0 ? _b : defaultOptions.dispatchEvent;\n        this.eventPrefix = (_c = options.eventPrefix) !== null && _c !== void 0 ? _c : defaultOptions.eventPrefix;\n        this.debug = (_d = options.debug) !== null && _d !== void 0 ? _d : defaultOptions.debug;\n        if (!window.matchMedia) {\n            console.error('window.matchMedia() is not available');\n            return;\n        }\n        this.enhanceController();\n        this.observe();\n    }\n    enhanceController() {\n        const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n        const disconnect = () => {\n            this.unobserve();\n            controllerDisconnect();\n        };\n        Object.assign(this.controller, { disconnect });\n    }\n}\nconst useMatchMedia = (controller, options = {}) => {\n    const observer = new UseMatchMedia(controller, options);\n    return [observer.observe, observer.unobserve];\n};\n\nclass UseWindowFocus extends StimulusUse {\n    constructor(controller, options = {}) {\n        super(controller, options);\n        this.observe = () => {\n            if (document.hasFocus()) {\n                this.becomesFocused();\n            }\n            else {\n                this.becomesUnfocused();\n            }\n            this.interval = setInterval(() => {\n                this.handleWindowFocusChange();\n            }, this.intervalDuration);\n        };\n        this.unobserve = () => {\n            clearInterval(this.interval);\n        };\n        this.becomesUnfocused = (event) => {\n            this.controller.hasFocus = false;\n            this.call('unfocus', event);\n            this.log('unfocus', { hasFocus: false });\n            this.dispatch('unfocus', { event, hasFocus: false });\n        };\n        this.becomesFocused = (event) => {\n            this.controller.hasFocus = true;\n            this.call('focus', event);\n            this.log('focus', { hasFocus: true });\n            this.dispatch('focus', { event, hasFocus: true });\n        };\n        this.handleWindowFocusChange = (event) => {\n            if (document.hasFocus() && !this.controller.hasFocus) {\n                this.becomesFocused(event);\n            }\n            else if (!document.hasFocus() && this.controller.hasFocus) {\n                this.becomesUnfocused(event);\n            }\n        };\n        this.controller = controller;\n        this.intervalDuration = options.interval || 200;\n        this.enhanceController();\n        this.observe();\n    }\n    enhanceController() {\n        const controllerDisconnect = this.controllerDisconnect;\n        const disconnect = () => {\n            this.unobserve();\n            controllerDisconnect();\n        };\n        Object.assign(this.controller, { disconnect });\n    }\n}\nconst useWindowFocus = (composableController, options = {}) => {\n    const controller = composableController;\n    const observer = new UseWindowFocus(controller, options);\n    return [observer.observe, observer.unobserve];\n};\n\nclass WindowFocusComposableController extends Controller {\n    constructor() {\n        super(...arguments);\n        this.hasFocus = false;\n    }\n}\nclass WindowFocusController extends WindowFocusComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useWindowFocus(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nexport { ApplicationController, ClickOutsideController, HoverController, IdleController, IntersectionController, LazyLoadController, MutationController, ResizeController, TargetMutationController, TransitionController, UseHover, UseMutation, UseTargetMutation, UseVisibility, VisibilityController, WindowFocusController, WindowResizeController, useApplication, useClickOutside, useDebounce, useDispatch, useHotkeys, useHover, useIdle, useIntersection, useLazyLoad, useMatchMedia, useMemo, useMeta, useMutation, useResize, useTargetMutation, useThrottle, useTransition, useVisibility, useWindowFocus, useWindowResize };\n", "import { ApplicationController, useDebounce } from \"stimulus-use\";\n\nexport default class extends ApplicationController {\n  static targets = [\"sliderInputs\", \"responsesContainer\", \"keyInput\"];\n\n  static debounces = [\"fieldNameChanged\"];\n\n  connect() {\n    useDebounce(this);\n  }\n\n  fieldTypeChanged(e) {\n    if (e.target.value === \"Slider\") {\n      this.sliderInputsTarget.classList.remove(\"d-none\");\n    } else {\n      this.sliderInputsTarget.classList.add(\"d-none\");\n    }\n\n    if (\n      e.target.value === \"Radio\" ||\n      e.target.value === \"Checkbox\" ||\n      e.target.value === \"Medication\"\n    ) {\n      this.responsesContainerTarget.classList.remove(\"d-none\");\n    } else {\n      this.responsesContainerTarget.classList.add(\"d-none\");\n    }\n  }\n\n  fieldNameChanged(e) {\n    let inputValue = e.target.value;\n    if (inputValue) {\n      const key = inputValue.replace(/[^a-z0-9]+/gi, \"_\").toLowerCase();\n      this.keyInputTarget.value = key;\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { get } from \"@rails/request.js\"\n\nexport default class extends Controller {\n  static targets = ['reportTemplateSelect', 'sectionSelect', 'fieldSelect']\n  static values = {\n    sectionsUrl: String,\n    fieldsUrl: String\n  }\n\n  connect() {\n    if (this.reportTemplateSelectTarget.value)\n      this.loadSections()\n  }\n\n  async loadSections() {\n    let value = this.reportTemplateSelectTarget.value\n\n    if (value) {\n      let url = this.sectionsUrlValue.replace(':report_template_id', value)\n\n      let response = await get(url, {\n        responseKind: 'json'\n      })\n\n      if (response.ok) {\n        let data = await response.json\n        let blankOption = document.createElement('option')\n\n        this.sectionSelectTarget.innerHTML = ''\n        this.sectionSelectTarget.appendChild(blankOption)\n\n        data.forEach(section => {\n          let optGroup = document.createElement('optgroup')\n          optGroup.label = section.name\n\n          section.children.forEach(child => {\n            let option = document.createElement('option')\n            option.value = child.id\n            option.innerText = child.name\n\n            optGroup.appendChild(option)\n          })\n\n          this.sectionSelectTarget.appendChild(optGroup)\n        })\n\n        let selectedValue = this.sectionSelectTarget.dataset.selectedValue\n        if (selectedValue) {\n          this.sectionSelectTarget.value = selectedValue\n          this.loadFields()\n        }\n      }\n    }\n  }\n\n  async loadFields() {\n    let reportTemplateId = this.reportTemplateSelectTarget.value\n    let reportTemplateSectionId = this.sectionSelectTarget.value\n\n    if (reportTemplateId && reportTemplateSectionId) {\n      let url = this.fieldsUrlValue.replace(':report_template_section_id', reportTemplateSectionId).replace(':report_template_id', reportTemplateId)\n\n      let response = await get(url, {\n        responseKind: 'json'\n      })\n\n      if (response.ok) {\n        let data = await response.json\n        let blankOption = document.createElement('option')\n\n        this.fieldSelectTarget.innerHTML = ''\n        this.fieldSelectTarget.appendChild(blankOption)\n\n        data.forEach(field => {\n          let option = document.createElement('option')\n          option.value = field.id\n          option.innerText = field.name\n          this.fieldSelectTarget.appendChild(option)\n        })\n\n        let selectedValue = this.fieldSelectTarget.dataset.selectedValue\n        if (selectedValue) {\n          this.fieldSelectTarget.value = selectedValue\n        }\n      }\n    }\n  }\n}", "import { Controller } from \"@hotwired/stimulus\";\nimport { get } from \"@rails/request.js\";\n\n// Connects to data-controller=\"report-templates--references\"\nexport default class extends Controller {\n  static targets = [\n    \"reportTemplateSelect\",\n    \"reportTemplateCategorySelect\",\n    \"reportTemplateSectionSelect\",\n  ];\n\n  static values = {\n    url: String,\n  };\n\n  async connect() {\n    // Check if report template select has a value\n    if (this.reportTemplateSelectTarget.value) {\n      await this.setupCategories(this.reportTemplateSelectTarget.value);\n    }\n  }\n\n  async reportTemplateChanged(event) {\n    if (!event.target.value) return;\n\n    await this.setupCategories(event.target.value);\n  }\n\n  async setupCategories(reportTemplateId) {\n    this.reportTemplateId = reportTemplateId;\n    let url = this.urlValue.replace(\":id\", this.reportTemplateId);\n\n    let shouldSetupSections = false;\n\n    const response = await get(`${url}/categories`, {\n      responseKind: \"json\",\n    });\n\n    if (response.ok) {\n      const body = await response.json;\n      const selectedId = this.reportTemplateCategorySelectTarget.dataset.id;\n\n      this.reportTemplateCategorySelectTarget.innerHTML = \"\";\n\n      let blankOption = document.createElement(\"option\");\n      blankOption.value = \"\";\n      blankOption.innerText = \"Select Category\";\n      this.reportTemplateCategorySelectTarget.appendChild(blankOption);\n\n      for (const category of body) {\n        let option = document.createElement(\"option\");\n        option.value = category.id;\n        option.innerText = category.name;\n\n        if (selectedId && selectedId == category.id.toString()) {\n          option.selected = true;\n          shouldSetupSections = true;\n        }\n\n        this.reportTemplateCategorySelectTarget.appendChild(option);\n      }\n\n      if (shouldSetupSections) {\n        await this.setupSections(selectedId);\n      }\n    }\n  }\n\n  async reportTemplateCategoryChanged(event) {\n    if (!event.target.value) return;\n\n    await this.setupSections(event.target.value);\n  }\n\n  async setupSections(categoryId) {\n    let url = this.urlValue.replace(\":id\", this.reportTemplateId);\n\n    const response = await get(`${url}/sections?category_id=${categoryId}`, {\n      responseKind: \"json\",\n    });\n\n    if (response.ok) {\n      const body = await response.json;\n      const selectedId = this.reportTemplateSectionSelectTarget.dataset.id;\n\n      this.reportTemplateSectionSelectTarget.innerHTML = \"\";\n\n      let blankOption = document.createElement(\"option\");\n      blankOption.value = \"\";\n      blankOption.innerText = \"Select Section\";\n      this.reportTemplateSectionSelectTarget.appendChild(blankOption);\n\n      for (const section of body) {\n        let option = document.createElement(\"option\");\n        option.value = section.id;\n        option.innerText = section.name;\n\n        if (selectedId && selectedId == section.id.toString()) {\n          option.selected = true;\n        }\n\n        this.reportTemplateSectionSelectTarget.appendChild(option);\n      }\n    }\n  }\n}\n", "/**!\n * Sortable 1.15.0\n * @author\tRubaXa   <trash@rubaxa.org>\n * @author\towenm    <owen23355@gmail.com>\n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n\n    if (enumerableOnly) {\n      symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n    }\n\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n\n  var target = _objectWithoutPropertiesLoose(source, excluded);\n\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.0\";\n\nfunction userAgent(pattern) {\n  if (typeof window !== 'undefined' && window.navigator) {\n    return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n  }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n  capture: false,\n  passive: false\n};\n\nfunction on(el, event, fn) {\n  el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n  el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n  if (!selector) return;\n  selector[0] === '>' && (selector = selector.substring(1));\n\n  if (el) {\n    try {\n      if (el.matches) {\n        return el.matches(selector);\n      } else if (el.msMatchesSelector) {\n        return el.msMatchesSelector(selector);\n      } else if (el.webkitMatchesSelector) {\n        return el.webkitMatchesSelector(selector);\n      }\n    } catch (_) {\n      return false;\n    }\n  }\n\n  return false;\n}\n\nfunction getParentOrHost(el) {\n  return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n  if (el) {\n    ctx = ctx || document;\n\n    do {\n      if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n        return el;\n      }\n\n      if (el === ctx) break;\n      /* jshint boss:true */\n    } while (el = getParentOrHost(el));\n  }\n\n  return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n  if (el && name) {\n    if (el.classList) {\n      el.classList[state ? 'add' : 'remove'](name);\n    } else {\n      var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n      el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n    }\n  }\n}\n\nfunction css(el, prop, val) {\n  var style = el && el.style;\n\n  if (style) {\n    if (val === void 0) {\n      if (document.defaultView && document.defaultView.getComputedStyle) {\n        val = document.defaultView.getComputedStyle(el, '');\n      } else if (el.currentStyle) {\n        val = el.currentStyle;\n      }\n\n      return prop === void 0 ? val : val[prop];\n    } else {\n      if (!(prop in style) && prop.indexOf('webkit') === -1) {\n        prop = '-webkit-' + prop;\n      }\n\n      style[prop] = val + (typeof val === 'string' ? '' : 'px');\n    }\n  }\n}\n\nfunction matrix(el, selfOnly) {\n  var appliedTransforms = '';\n\n  if (typeof el === 'string') {\n    appliedTransforms = el;\n  } else {\n    do {\n      var transform = css(el, 'transform');\n\n      if (transform && transform !== 'none') {\n        appliedTransforms = transform + ' ' + appliedTransforms;\n      }\n      /* jshint boss:true */\n\n    } while (!selfOnly && (el = el.parentNode));\n  }\n\n  var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n  /*jshint -W056 */\n\n  return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n  if (ctx) {\n    var list = ctx.getElementsByTagName(tagName),\n        i = 0,\n        n = list.length;\n\n    if (iterator) {\n      for (; i < n; i++) {\n        iterator(list[i], i);\n      }\n    }\n\n    return list;\n  }\n\n  return [];\n}\n\nfunction getWindowScrollingElement() {\n  var scrollingElement = document.scrollingElement;\n\n  if (scrollingElement) {\n    return scrollingElement;\n  } else {\n    return document.documentElement;\n  }\n}\n/**\n * Returns the \"bounding client rect\" of given element\n * @param  {HTMLElement} el                       The element whose boundingClientRect is wanted\n * @param  {[Boolean]} relativeToContainingBlock  Whether the rect should be relative to the containing block of (including) the container\n * @param  {[Boolean]} relativeToNonStaticParent  Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param  {[Boolean]} undoScale                  Whether the container's scale() should be undone\n * @param  {[HTMLElement]} container              The parent the element will be placed in\n * @return {Object}                               The boundingClientRect of el, with specified adjustments\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n  if (!el.getBoundingClientRect && el !== window) return;\n  var elRect, top, left, bottom, right, height, width;\n\n  if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n    elRect = el.getBoundingClientRect();\n    top = elRect.top;\n    left = elRect.left;\n    bottom = elRect.bottom;\n    right = elRect.right;\n    height = elRect.height;\n    width = elRect.width;\n  } else {\n    top = 0;\n    left = 0;\n    bottom = window.innerHeight;\n    right = window.innerWidth;\n    height = window.innerHeight;\n    width = window.innerWidth;\n  }\n\n  if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n    // Adjust for translate()\n    container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n    // Not needed on <= IE11\n\n    if (!IE11OrLess) {\n      do {\n        if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n          var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n          top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n          left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n          bottom = top + elRect.height;\n          right = left + elRect.width;\n          break;\n        }\n        /* jshint boss:true */\n\n      } while (container = container.parentNode);\n    }\n  }\n\n  if (undoScale && el !== window) {\n    // Adjust for scale()\n    var elMatrix = matrix(container || el),\n        scaleX = elMatrix && elMatrix.a,\n        scaleY = elMatrix && elMatrix.d;\n\n    if (elMatrix) {\n      top /= scaleY;\n      left /= scaleX;\n      width /= scaleX;\n      height /= scaleY;\n      bottom = top + height;\n      right = left + width;\n    }\n  }\n\n  return {\n    top: top,\n    left: left,\n    bottom: bottom,\n    right: right,\n    width: width,\n    height: height\n  };\n}\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param  {HTMLElement}  el           The element who's side being scrolled out of view is in question\n * @param  {String}       elSide       Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param  {String}       parentSide   Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement}               The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n  var parent = getParentAutoScrollElement(el, true),\n      elSideVal = getRect(el)[elSide];\n  /* jshint boss:true */\n\n  while (parent) {\n    var parentSideVal = getRect(parent)[parentSide],\n        visible = void 0;\n\n    if (parentSide === 'top' || parentSide === 'left') {\n      visible = elSideVal >= parentSideVal;\n    } else {\n      visible = elSideVal <= parentSideVal;\n    }\n\n    if (!visible) return parent;\n    if (parent === getWindowScrollingElement()) break;\n    parent = getParentAutoScrollElement(parent, false);\n  }\n\n  return false;\n}\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param  {HTMLElement} el       The parent element\n * @param  {Number} childNum      The index of the child\n * @param  {Object} options       Parent Sortable's options\n * @return {HTMLElement}          The child at index childNum, or null if not found\n */\n\n\nfunction getChild(el, childNum, options, includeDragEl) {\n  var currentChild = 0,\n      i = 0,\n      children = el.children;\n\n  while (i < children.length) {\n    if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n      if (currentChild === childNum) {\n        return children[i];\n      }\n\n      currentChild++;\n    }\n\n    i++;\n  }\n\n  return null;\n}\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param  {HTMLElement} el       Parent element\n * @param  {selector} selector    Any other elements that should be ignored\n * @return {HTMLElement}          The last child, ignoring ghostEl\n */\n\n\nfunction lastChild(el, selector) {\n  var last = el.lastElementChild;\n\n  while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n    last = last.previousElementSibling;\n  }\n\n  return last || null;\n}\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param  {HTMLElement} el\n * @param  {selector} selector\n * @return {number}\n */\n\n\nfunction index(el, selector) {\n  var index = 0;\n\n  if (!el || !el.parentNode) {\n    return -1;\n  }\n  /* jshint boss:true */\n\n\n  while (el = el.previousElementSibling) {\n    if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n      index++;\n    }\n  }\n\n  return index;\n}\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param  {HTMLElement} el\n * @return {Array}             Offsets in the format of [left, top]\n */\n\n\nfunction getRelativeScrollOffset(el) {\n  var offsetLeft = 0,\n      offsetTop = 0,\n      winScroller = getWindowScrollingElement();\n\n  if (el) {\n    do {\n      var elMatrix = matrix(el),\n          scaleX = elMatrix.a,\n          scaleY = elMatrix.d;\n      offsetLeft += el.scrollLeft * scaleX;\n      offsetTop += el.scrollTop * scaleY;\n    } while (el !== winScroller && (el = el.parentNode));\n  }\n\n  return [offsetLeft, offsetTop];\n}\n/**\n * Returns the index of the object within the given array\n * @param  {Array} arr   Array that may or may not hold the object\n * @param  {Object} obj  An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\n * @return {Number}      The index of the object in the array, or -1\n */\n\n\nfunction indexOfObject(arr, obj) {\n  for (var i in arr) {\n    if (!arr.hasOwnProperty(i)) continue;\n\n    for (var key in obj) {\n      if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n    }\n  }\n\n  return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n  // skip to window\n  if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n  var elem = el;\n  var gotSelf = false;\n\n  do {\n    // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n    if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n      var elemCSS = css(elem);\n\n      if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n        if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n        if (gotSelf || includeSelf) return elem;\n        gotSelf = true;\n      }\n    }\n    /* jshint boss:true */\n\n  } while (elem = elem.parentNode);\n\n  return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n  if (dst && src) {\n    for (var key in src) {\n      if (src.hasOwnProperty(key)) {\n        dst[key] = src[key];\n      }\n    }\n  }\n\n  return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n  return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n  return function () {\n    if (!_throttleTimeout) {\n      var args = arguments,\n          _this = this;\n\n      if (args.length === 1) {\n        callback.call(_this, args[0]);\n      } else {\n        callback.apply(_this, args);\n      }\n\n      _throttleTimeout = setTimeout(function () {\n        _throttleTimeout = void 0;\n      }, ms);\n    }\n  };\n}\n\nfunction cancelThrottle() {\n  clearTimeout(_throttleTimeout);\n  _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n  el.scrollLeft += x;\n  el.scrollTop += y;\n}\n\nfunction clone(el) {\n  var Polymer = window.Polymer;\n  var $ = window.jQuery || window.Zepto;\n\n  if (Polymer && Polymer.dom) {\n    return Polymer.dom(el).cloneNode(true);\n  } else if ($) {\n    return $(el).clone(true)[0];\n  } else {\n    return el.cloneNode(true);\n  }\n}\n\nfunction setRect(el, rect) {\n  css(el, 'position', 'absolute');\n  css(el, 'top', rect.top);\n  css(el, 'left', rect.left);\n  css(el, 'width', rect.width);\n  css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n  css(el, 'position', '');\n  css(el, 'top', '');\n  css(el, 'left', '');\n  css(el, 'width', '');\n  css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n  var animationStates = [],\n      animationCallbackId;\n  return {\n    captureAnimationState: function captureAnimationState() {\n      animationStates = [];\n      if (!this.options.animation) return;\n      var children = [].slice.call(this.el.children);\n      children.forEach(function (child) {\n        if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n        animationStates.push({\n          target: child,\n          rect: getRect(child)\n        });\n\n        var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n        if (child.thisAnimationDuration) {\n          var childMatrix = matrix(child, true);\n\n          if (childMatrix) {\n            fromRect.top -= childMatrix.f;\n            fromRect.left -= childMatrix.e;\n          }\n        }\n\n        child.fromRect = fromRect;\n      });\n    },\n    addAnimationState: function addAnimationState(state) {\n      animationStates.push(state);\n    },\n    removeAnimationState: function removeAnimationState(target) {\n      animationStates.splice(indexOfObject(animationStates, {\n        target: target\n      }), 1);\n    },\n    animateAll: function animateAll(callback) {\n      var _this = this;\n\n      if (!this.options.animation) {\n        clearTimeout(animationCallbackId);\n        if (typeof callback === 'function') callback();\n        return;\n      }\n\n      var animating = false,\n          animationTime = 0;\n      animationStates.forEach(function (state) {\n        var time = 0,\n            target = state.target,\n            fromRect = target.fromRect,\n            toRect = getRect(target),\n            prevFromRect = target.prevFromRect,\n            prevToRect = target.prevToRect,\n            animatingRect = state.rect,\n            targetMatrix = matrix(target, true);\n\n        if (targetMatrix) {\n          // Compensate for current animation\n          toRect.top -= targetMatrix.f;\n          toRect.left -= targetMatrix.e;\n        }\n\n        target.toRect = toRect;\n\n        if (target.thisAnimationDuration) {\n          // Could also check if animatingRect is between fromRect and toRect\n          if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n          (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n            // If returning to same place as started from animation and on same axis\n            time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n          }\n        } // if fromRect != toRect: animate\n\n\n        if (!isRectEqual(toRect, fromRect)) {\n          target.prevFromRect = fromRect;\n          target.prevToRect = toRect;\n\n          if (!time) {\n            time = _this.options.animation;\n          }\n\n          _this.animate(target, animatingRect, toRect, time);\n        }\n\n        if (time) {\n          animating = true;\n          animationTime = Math.max(animationTime, time);\n          clearTimeout(target.animationResetTimer);\n          target.animationResetTimer = setTimeout(function () {\n            target.animationTime = 0;\n            target.prevFromRect = null;\n            target.fromRect = null;\n            target.prevToRect = null;\n            target.thisAnimationDuration = null;\n          }, time);\n          target.thisAnimationDuration = time;\n        }\n      });\n      clearTimeout(animationCallbackId);\n\n      if (!animating) {\n        if (typeof callback === 'function') callback();\n      } else {\n        animationCallbackId = setTimeout(function () {\n          if (typeof callback === 'function') callback();\n        }, animationTime);\n      }\n\n      animationStates = [];\n    },\n    animate: function animate(target, currentRect, toRect, duration) {\n      if (duration) {\n        css(target, 'transition', '');\n        css(target, 'transform', '');\n        var elMatrix = matrix(this.el),\n            scaleX = elMatrix && elMatrix.a,\n            scaleY = elMatrix && elMatrix.d,\n            translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n            translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n        target.animatingX = !!translateX;\n        target.animatingY = !!translateY;\n        css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n        this.forRepaintDummy = repaint(target); // repaint\n\n        css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n        css(target, 'transform', 'translate3d(0,0,0)');\n        typeof target.animated === 'number' && clearTimeout(target.animated);\n        target.animated = setTimeout(function () {\n          css(target, 'transition', '');\n          css(target, 'transform', '');\n          target.animated = false;\n          target.animatingX = false;\n          target.animatingY = false;\n        }, duration);\n      }\n    }\n  };\n}\n\nfunction repaint(target) {\n  return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n  return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n  initializeByDefault: true\n};\nvar PluginManager = {\n  mount: function mount(plugin) {\n    // Set default static properties\n    for (var option in defaults) {\n      if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n        plugin[option] = defaults[option];\n      }\n    }\n\n    plugins.forEach(function (p) {\n      if (p.pluginName === plugin.pluginName) {\n        throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n      }\n    });\n    plugins.push(plugin);\n  },\n  pluginEvent: function pluginEvent(eventName, sortable, evt) {\n    var _this = this;\n\n    this.eventCanceled = false;\n\n    evt.cancel = function () {\n      _this.eventCanceled = true;\n    };\n\n    var eventNameGlobal = eventName + 'Global';\n    plugins.forEach(function (plugin) {\n      if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n      if (sortable[plugin.pluginName][eventNameGlobal]) {\n        sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n          sortable: sortable\n        }, evt));\n      } // Only fire plugin event if plugin is enabled in this sortable,\n      // and plugin has event defined\n\n\n      if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n        sortable[plugin.pluginName][eventName](_objectSpread2({\n          sortable: sortable\n        }, evt));\n      }\n    });\n  },\n  initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n    plugins.forEach(function (plugin) {\n      var pluginName = plugin.pluginName;\n      if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n      var initialized = new plugin(sortable, el, sortable.options);\n      initialized.sortable = sortable;\n      initialized.options = sortable.options;\n      sortable[pluginName] = initialized; // Add default options from plugin\n\n      _extends(defaults, initialized.defaults);\n    });\n\n    for (var option in sortable.options) {\n      if (!sortable.options.hasOwnProperty(option)) continue;\n      var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n      if (typeof modified !== 'undefined') {\n        sortable.options[option] = modified;\n      }\n    }\n  },\n  getEventProperties: function getEventProperties(name, sortable) {\n    var eventProperties = {};\n    plugins.forEach(function (plugin) {\n      if (typeof plugin.eventProperties !== 'function') return;\n\n      _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n    });\n    return eventProperties;\n  },\n  modifyOption: function modifyOption(sortable, name, value) {\n    var modifiedValue;\n    plugins.forEach(function (plugin) {\n      // Plugin must exist on the Sortable\n      if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n      if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n        modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n      }\n    });\n    return modifiedValue;\n  }\n};\n\nfunction dispatchEvent(_ref) {\n  var sortable = _ref.sortable,\n      rootEl = _ref.rootEl,\n      name = _ref.name,\n      targetEl = _ref.targetEl,\n      cloneEl = _ref.cloneEl,\n      toEl = _ref.toEl,\n      fromEl = _ref.fromEl,\n      oldIndex = _ref.oldIndex,\n      newIndex = _ref.newIndex,\n      oldDraggableIndex = _ref.oldDraggableIndex,\n      newDraggableIndex = _ref.newDraggableIndex,\n      originalEvent = _ref.originalEvent,\n      putSortable = _ref.putSortable,\n      extraEventProperties = _ref.extraEventProperties;\n  sortable = sortable || rootEl && rootEl[expando];\n  if (!sortable) return;\n  var evt,\n      options = sortable.options,\n      onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n  if (window.CustomEvent && !IE11OrLess && !Edge) {\n    evt = new CustomEvent(name, {\n      bubbles: true,\n      cancelable: true\n    });\n  } else {\n    evt = document.createEvent('Event');\n    evt.initEvent(name, true, true);\n  }\n\n  evt.to = toEl || rootEl;\n  evt.from = fromEl || rootEl;\n  evt.item = targetEl || rootEl;\n  evt.clone = cloneEl;\n  evt.oldIndex = oldIndex;\n  evt.newIndex = newIndex;\n  evt.oldDraggableIndex = oldDraggableIndex;\n  evt.newDraggableIndex = newDraggableIndex;\n  evt.originalEvent = originalEvent;\n  evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n  var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n\n  for (var option in allEventProperties) {\n    evt[option] = allEventProperties[option];\n  }\n\n  if (rootEl) {\n    rootEl.dispatchEvent(evt);\n  }\n\n  if (options[onName]) {\n    options[onName].call(sortable, evt);\n  }\n}\n\nvar _excluded = [\"evt\"];\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n  var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n      originalEvent = _ref.evt,\n      data = _objectWithoutProperties(_ref, _excluded);\n\n  PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n    dragEl: dragEl,\n    parentEl: parentEl,\n    ghostEl: ghostEl,\n    rootEl: rootEl,\n    nextEl: nextEl,\n    lastDownEl: lastDownEl,\n    cloneEl: cloneEl,\n    cloneHidden: cloneHidden,\n    dragStarted: moved,\n    putSortable: putSortable,\n    activeSortable: Sortable.active,\n    originalEvent: originalEvent,\n    oldIndex: oldIndex,\n    oldDraggableIndex: oldDraggableIndex,\n    newIndex: newIndex,\n    newDraggableIndex: newDraggableIndex,\n    hideGhostForTarget: _hideGhostForTarget,\n    unhideGhostForTarget: _unhideGhostForTarget,\n    cloneNowHidden: function cloneNowHidden() {\n      cloneHidden = true;\n    },\n    cloneNowShown: function cloneNowShown() {\n      cloneHidden = false;\n    },\n    dispatchSortableEvent: function dispatchSortableEvent(name) {\n      _dispatchEvent({\n        sortable: sortable,\n        name: name,\n        originalEvent: originalEvent\n      });\n    }\n  }, data));\n};\n\nfunction _dispatchEvent(info) {\n  dispatchEvent(_objectSpread2({\n    putSortable: putSortable,\n    cloneEl: cloneEl,\n    targetEl: dragEl,\n    rootEl: rootEl,\n    oldIndex: oldIndex,\n    oldDraggableIndex: oldDraggableIndex,\n    newIndex: newIndex,\n    newDraggableIndex: newDraggableIndex\n  }, info));\n}\n\nvar dragEl,\n    parentEl,\n    ghostEl,\n    rootEl,\n    nextEl,\n    lastDownEl,\n    cloneEl,\n    cloneHidden,\n    oldIndex,\n    newIndex,\n    oldDraggableIndex,\n    newDraggableIndex,\n    activeGroup,\n    putSortable,\n    awaitingDragStarted = false,\n    ignoreNextClick = false,\n    sortables = [],\n    tapEvt,\n    touchEvt,\n    lastDx,\n    lastDy,\n    tapDistanceLeft,\n    tapDistanceTop,\n    moved,\n    lastTarget,\n    lastDirection,\n    pastFirstInvertThresh = false,\n    isCircumstantialInvert = false,\n    targetMoveDistance,\n    // For positioning ghost absolutely\nghostRelativeParent,\n    ghostRelativeParentInitialScroll = [],\n    // (left, top)\n_silent = false,\n    savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n    PositionGhostAbsolutely = IOS,\n    CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n    // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n    supportCssPointerEvents = function () {\n  if (!documentExists) return; // false when <= IE11\n\n  if (IE11OrLess) {\n    return false;\n  }\n\n  var el = document.createElement('x');\n  el.style.cssText = 'pointer-events:auto';\n  return el.style.pointerEvents === 'auto';\n}(),\n    _detectDirection = function _detectDirection(el, options) {\n  var elCSS = css(el),\n      elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n      child1 = getChild(el, 0, options),\n      child2 = getChild(el, 1, options),\n      firstChildCSS = child1 && css(child1),\n      secondChildCSS = child2 && css(child2),\n      firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n      secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n  if (elCSS.display === 'flex') {\n    return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n  }\n\n  if (elCSS.display === 'grid') {\n    return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n  }\n\n  if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n    var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n    return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n  }\n\n  return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n    _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n  var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n      dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n      dragElOppLength = vertical ? dragRect.width : dragRect.height,\n      targetS1Opp = vertical ? targetRect.left : targetRect.top,\n      targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n      targetOppLength = vertical ? targetRect.width : targetRect.height;\n  return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param  {Number} x      X position\r\n * @param  {Number} y      Y position\r\n * @return {HTMLElement}   Element of the first found nearest Sortable\r\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n  var ret;\n  sortables.some(function (sortable) {\n    var threshold = sortable[expando].options.emptyInsertThreshold;\n    if (!threshold || lastChild(sortable)) return;\n    var rect = getRect(sortable),\n        insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n        insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n    if (insideHorizontally && insideVertically) {\n      return ret = sortable;\n    }\n  });\n  return ret;\n},\n    _prepareGroup = function _prepareGroup(options) {\n  function toFn(value, pull) {\n    return function (to, from, dragEl, evt) {\n      var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n      if (value == null && (pull || sameGroup)) {\n        // Default pull value\n        // Default pull and put value if same group\n        return true;\n      } else if (value == null || value === false) {\n        return false;\n      } else if (pull && value === 'clone') {\n        return value;\n      } else if (typeof value === 'function') {\n        return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n      } else {\n        var otherGroup = (pull ? to : from).options.group.name;\n        return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n      }\n    };\n  }\n\n  var group = {};\n  var originalGroup = options.group;\n\n  if (!originalGroup || _typeof(originalGroup) != 'object') {\n    originalGroup = {\n      name: originalGroup\n    };\n  }\n\n  group.name = originalGroup.name;\n  group.checkPull = toFn(originalGroup.pull, true);\n  group.checkPut = toFn(originalGroup.put);\n  group.revertClone = originalGroup.revertClone;\n  options.group = group;\n},\n    _hideGhostForTarget = function _hideGhostForTarget() {\n  if (!supportCssPointerEvents && ghostEl) {\n    css(ghostEl, 'display', 'none');\n  }\n},\n    _unhideGhostForTarget = function _unhideGhostForTarget() {\n  if (!supportCssPointerEvents && ghostEl) {\n    css(ghostEl, 'display', '');\n  }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists && !ChromeForAndroid) {\n  document.addEventListener('click', function (evt) {\n    if (ignoreNextClick) {\n      evt.preventDefault();\n      evt.stopPropagation && evt.stopPropagation();\n      evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n      ignoreNextClick = false;\n      return false;\n    }\n  }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n  if (dragEl) {\n    evt = evt.touches ? evt.touches[0] : evt;\n\n    var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n    if (nearest) {\n      // Create imitation event\n      var event = {};\n\n      for (var i in evt) {\n        if (evt.hasOwnProperty(i)) {\n          event[i] = evt[i];\n        }\n      }\n\n      event.target = event.rootEl = nearest;\n      event.preventDefault = void 0;\n      event.stopPropagation = void 0;\n\n      nearest[expando]._onDragOver(event);\n    }\n  }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n  if (dragEl) {\n    dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n  }\n};\n/**\r\n * @class  Sortable\r\n * @param  {HTMLElement}  el\r\n * @param  {Object}       [options]\r\n */\n\n\nfunction Sortable(el, options) {\n  if (!(el && el.nodeType && el.nodeType === 1)) {\n    throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n  }\n\n  this.el = el; // root element\n\n  this.options = options = _extends({}, options); // Export instance\n\n  el[expando] = this;\n  var defaults = {\n    group: null,\n    sort: true,\n    disabled: false,\n    store: null,\n    handle: null,\n    draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n    swapThreshold: 1,\n    // percentage; 0 <= x <= 1\n    invertSwap: false,\n    // invert always\n    invertedSwapThreshold: null,\n    // will be set to same as swapThreshold if default\n    removeCloneOnHide: true,\n    direction: function direction() {\n      return _detectDirection(el, this.options);\n    },\n    ghostClass: 'sortable-ghost',\n    chosenClass: 'sortable-chosen',\n    dragClass: 'sortable-drag',\n    ignore: 'a, img',\n    filter: null,\n    preventOnFilter: true,\n    animation: 0,\n    easing: null,\n    setData: function setData(dataTransfer, dragEl) {\n      dataTransfer.setData('Text', dragEl.textContent);\n    },\n    dropBubble: false,\n    dragoverBubble: false,\n    dataIdAttr: 'data-id',\n    delay: 0,\n    delayOnTouchOnly: false,\n    touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n    forceFallback: false,\n    fallbackClass: 'sortable-fallback',\n    fallbackOnBody: false,\n    fallbackTolerance: 0,\n    fallbackOffset: {\n      x: 0,\n      y: 0\n    },\n    supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n    emptyInsertThreshold: 5\n  };\n  PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n  for (var name in defaults) {\n    !(name in options) && (options[name] = defaults[name]);\n  }\n\n  _prepareGroup(options); // Bind all private methods\n\n\n  for (var fn in this) {\n    if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n      this[fn] = this[fn].bind(this);\n    }\n  } // Setup drag mode\n\n\n  this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n  if (this.nativeDraggable) {\n    // Touch start threshold cannot be greater than the native dragstart threshold\n    this.options.touchStartThreshold = 1;\n  } // Bind events\n\n\n  if (options.supportPointer) {\n    on(el, 'pointerdown', this._onTapStart);\n  } else {\n    on(el, 'mousedown', this._onTapStart);\n    on(el, 'touchstart', this._onTapStart);\n  }\n\n  if (this.nativeDraggable) {\n    on(el, 'dragover', this);\n    on(el, 'dragenter', this);\n  }\n\n  sortables.push(this.el); // Restore sorting\n\n  options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n  _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n  constructor: Sortable,\n  _isOutsideThisEl: function _isOutsideThisEl(target) {\n    if (!this.el.contains(target) && target !== this.el) {\n      lastTarget = null;\n    }\n  },\n  _getDirection: function _getDirection(evt, target) {\n    return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n  },\n  _onTapStart: function _onTapStart(\n  /** Event|TouchEvent */\n  evt) {\n    if (!evt.cancelable) return;\n\n    var _this = this,\n        el = this.el,\n        options = this.options,\n        preventOnFilter = options.preventOnFilter,\n        type = evt.type,\n        touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n        target = (touch || evt).target,\n        originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n        filter = options.filter;\n\n    _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n    if (dragEl) {\n      return;\n    }\n\n    if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n      return; // only left button and enabled\n    } // cancel dnd if original target is content editable\n\n\n    if (originalTarget.isContentEditable) {\n      return;\n    } // Safari ignores further event handling after mousedown\n\n\n    if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n      return;\n    }\n\n    target = closest(target, options.draggable, el, false);\n\n    if (target && target.animated) {\n      return;\n    }\n\n    if (lastDownEl === target) {\n      // Ignoring duplicate `down`\n      return;\n    } // Get the index of the dragged element within its parent\n\n\n    oldIndex = index(target);\n    oldDraggableIndex = index(target, options.draggable); // Check filter\n\n    if (typeof filter === 'function') {\n      if (filter.call(this, evt, target, this)) {\n        _dispatchEvent({\n          sortable: _this,\n          rootEl: originalTarget,\n          name: 'filter',\n          targetEl: target,\n          toEl: el,\n          fromEl: el\n        });\n\n        pluginEvent('filter', _this, {\n          evt: evt\n        });\n        preventOnFilter && evt.cancelable && evt.preventDefault();\n        return; // cancel dnd\n      }\n    } else if (filter) {\n      filter = filter.split(',').some(function (criteria) {\n        criteria = closest(originalTarget, criteria.trim(), el, false);\n\n        if (criteria) {\n          _dispatchEvent({\n            sortable: _this,\n            rootEl: criteria,\n            name: 'filter',\n            targetEl: target,\n            fromEl: el,\n            toEl: el\n          });\n\n          pluginEvent('filter', _this, {\n            evt: evt\n          });\n          return true;\n        }\n      });\n\n      if (filter) {\n        preventOnFilter && evt.cancelable && evt.preventDefault();\n        return; // cancel dnd\n      }\n    }\n\n    if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n      return;\n    } // Prepare `dragstart`\n\n\n    this._prepareDragStart(evt, touch, target);\n  },\n  _prepareDragStart: function _prepareDragStart(\n  /** Event */\n  evt,\n  /** Touch */\n  touch,\n  /** HTMLElement */\n  target) {\n    var _this = this,\n        el = _this.el,\n        options = _this.options,\n        ownerDocument = el.ownerDocument,\n        dragStartFn;\n\n    if (target && !dragEl && target.parentNode === el) {\n      var dragRect = getRect(target);\n      rootEl = el;\n      dragEl = target;\n      parentEl = dragEl.parentNode;\n      nextEl = dragEl.nextSibling;\n      lastDownEl = target;\n      activeGroup = options.group;\n      Sortable.dragged = dragEl;\n      tapEvt = {\n        target: dragEl,\n        clientX: (touch || evt).clientX,\n        clientY: (touch || evt).clientY\n      };\n      tapDistanceLeft = tapEvt.clientX - dragRect.left;\n      tapDistanceTop = tapEvt.clientY - dragRect.top;\n      this._lastX = (touch || evt).clientX;\n      this._lastY = (touch || evt).clientY;\n      dragEl.style['will-change'] = 'all';\n\n      dragStartFn = function dragStartFn() {\n        pluginEvent('delayEnded', _this, {\n          evt: evt\n        });\n\n        if (Sortable.eventCanceled) {\n          _this._onDrop();\n\n          return;\n        } // Delayed drag has been triggered\n        // we can re-enable the events: touchmove/mousemove\n\n\n        _this._disableDelayedDragEvents();\n\n        if (!FireFox && _this.nativeDraggable) {\n          dragEl.draggable = true;\n        } // Bind the events: dragstart/dragend\n\n\n        _this._triggerDragStart(evt, touch); // Drag start event\n\n\n        _dispatchEvent({\n          sortable: _this,\n          name: 'choose',\n          originalEvent: evt\n        }); // Chosen item\n\n\n        toggleClass(dragEl, options.chosenClass, true);\n      }; // Disable \"draggable\"\n\n\n      options.ignore.split(',').forEach(function (criteria) {\n        find(dragEl, criteria.trim(), _disableDraggable);\n      });\n      on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n      on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n      on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n      on(ownerDocument, 'mouseup', _this._onDrop);\n      on(ownerDocument, 'touchend', _this._onDrop);\n      on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n      if (FireFox && this.nativeDraggable) {\n        this.options.touchStartThreshold = 4;\n        dragEl.draggable = true;\n      }\n\n      pluginEvent('delayStart', this, {\n        evt: evt\n      }); // Delay is impossible for native DnD in Edge or IE\n\n      if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n        if (Sortable.eventCanceled) {\n          this._onDrop();\n\n          return;\n        } // If the user moves the pointer or let go the click or touch\n        // before the delay has been reached:\n        // disable the delayed drag\n\n\n        on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n        on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n        on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n        on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n        on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n        options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n        _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n      } else {\n        dragStartFn();\n      }\n    }\n  },\n  _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n  /** TouchEvent|PointerEvent **/\n  e) {\n    var touch = e.touches ? e.touches[0] : e;\n\n    if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n      this._disableDelayedDrag();\n    }\n  },\n  _disableDelayedDrag: function _disableDelayedDrag() {\n    dragEl && _disableDraggable(dragEl);\n    clearTimeout(this._dragStartTimer);\n\n    this._disableDelayedDragEvents();\n  },\n  _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n    var ownerDocument = this.el.ownerDocument;\n    off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n    off(ownerDocument, 'touchend', this._disableDelayedDrag);\n    off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n    off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n    off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n    off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n  },\n  _triggerDragStart: function _triggerDragStart(\n  /** Event */\n  evt,\n  /** Touch */\n  touch) {\n    touch = touch || evt.pointerType == 'touch' && evt;\n\n    if (!this.nativeDraggable || touch) {\n      if (this.options.supportPointer) {\n        on(document, 'pointermove', this._onTouchMove);\n      } else if (touch) {\n        on(document, 'touchmove', this._onTouchMove);\n      } else {\n        on(document, 'mousemove', this._onTouchMove);\n      }\n    } else {\n      on(dragEl, 'dragend', this);\n      on(rootEl, 'dragstart', this._onDragStart);\n    }\n\n    try {\n      if (document.selection) {\n        // Timeout neccessary for IE9\n        _nextTick(function () {\n          document.selection.empty();\n        });\n      } else {\n        window.getSelection().removeAllRanges();\n      }\n    } catch (err) {}\n  },\n  _dragStarted: function _dragStarted(fallback, evt) {\n\n    awaitingDragStarted = false;\n\n    if (rootEl && dragEl) {\n      pluginEvent('dragStarted', this, {\n        evt: evt\n      });\n\n      if (this.nativeDraggable) {\n        on(document, 'dragover', _checkOutsideTargetEl);\n      }\n\n      var options = this.options; // Apply effect\n\n      !fallback && toggleClass(dragEl, options.dragClass, false);\n      toggleClass(dragEl, options.ghostClass, true);\n      Sortable.active = this;\n      fallback && this._appendGhost(); // Drag start event\n\n      _dispatchEvent({\n        sortable: this,\n        name: 'start',\n        originalEvent: evt\n      });\n    } else {\n      this._nulling();\n    }\n  },\n  _emulateDragOver: function _emulateDragOver() {\n    if (touchEvt) {\n      this._lastX = touchEvt.clientX;\n      this._lastY = touchEvt.clientY;\n\n      _hideGhostForTarget();\n\n      var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n      var parent = target;\n\n      while (target && target.shadowRoot) {\n        target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n        if (target === parent) break;\n        parent = target;\n      }\n\n      dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n      if (parent) {\n        do {\n          if (parent[expando]) {\n            var inserted = void 0;\n            inserted = parent[expando]._onDragOver({\n              clientX: touchEvt.clientX,\n              clientY: touchEvt.clientY,\n              target: target,\n              rootEl: parent\n            });\n\n            if (inserted && !this.options.dragoverBubble) {\n              break;\n            }\n          }\n\n          target = parent; // store last element\n        }\n        /* jshint boss:true */\n        while (parent = parent.parentNode);\n      }\n\n      _unhideGhostForTarget();\n    }\n  },\n  _onTouchMove: function _onTouchMove(\n  /**TouchEvent*/\n  evt) {\n    if (tapEvt) {\n      var options = this.options,\n          fallbackTolerance = options.fallbackTolerance,\n          fallbackOffset = options.fallbackOffset,\n          touch = evt.touches ? evt.touches[0] : evt,\n          ghostMatrix = ghostEl && matrix(ghostEl, true),\n          scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n          scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n          relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n          dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n          dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n      if (!Sortable.active && !awaitingDragStarted) {\n        if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n          return;\n        }\n\n        this._onDragStart(evt, true);\n      }\n\n      if (ghostEl) {\n        if (ghostMatrix) {\n          ghostMatrix.e += dx - (lastDx || 0);\n          ghostMatrix.f += dy - (lastDy || 0);\n        } else {\n          ghostMatrix = {\n            a: 1,\n            b: 0,\n            c: 0,\n            d: 1,\n            e: dx,\n            f: dy\n          };\n        }\n\n        var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n        css(ghostEl, 'webkitTransform', cssMatrix);\n        css(ghostEl, 'mozTransform', cssMatrix);\n        css(ghostEl, 'msTransform', cssMatrix);\n        css(ghostEl, 'transform', cssMatrix);\n        lastDx = dx;\n        lastDy = dy;\n        touchEvt = touch;\n      }\n\n      evt.cancelable && evt.preventDefault();\n    }\n  },\n  _appendGhost: function _appendGhost() {\n    // Bug if using scale(): https://stackoverflow.com/questions/2637058\n    // Not being adjusted for\n    if (!ghostEl) {\n      var container = this.options.fallbackOnBody ? document.body : rootEl,\n          rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n          options = this.options; // Position absolutely\n\n      if (PositionGhostAbsolutely) {\n        // Get relatively positioned parent\n        ghostRelativeParent = container;\n\n        while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n          ghostRelativeParent = ghostRelativeParent.parentNode;\n        }\n\n        if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n          if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n          rect.top += ghostRelativeParent.scrollTop;\n          rect.left += ghostRelativeParent.scrollLeft;\n        } else {\n          ghostRelativeParent = getWindowScrollingElement();\n        }\n\n        ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n      }\n\n      ghostEl = dragEl.cloneNode(true);\n      toggleClass(ghostEl, options.ghostClass, false);\n      toggleClass(ghostEl, options.fallbackClass, true);\n      toggleClass(ghostEl, options.dragClass, true);\n      css(ghostEl, 'transition', '');\n      css(ghostEl, 'transform', '');\n      css(ghostEl, 'box-sizing', 'border-box');\n      css(ghostEl, 'margin', 0);\n      css(ghostEl, 'top', rect.top);\n      css(ghostEl, 'left', rect.left);\n      css(ghostEl, 'width', rect.width);\n      css(ghostEl, 'height', rect.height);\n      css(ghostEl, 'opacity', '0.8');\n      css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n      css(ghostEl, 'zIndex', '100000');\n      css(ghostEl, 'pointerEvents', 'none');\n      Sortable.ghost = ghostEl;\n      container.appendChild(ghostEl); // Set transform-origin\n\n      css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n    }\n  },\n  _onDragStart: function _onDragStart(\n  /**Event*/\n  evt,\n  /**boolean*/\n  fallback) {\n    var _this = this;\n\n    var dataTransfer = evt.dataTransfer;\n    var options = _this.options;\n    pluginEvent('dragStart', this, {\n      evt: evt\n    });\n\n    if (Sortable.eventCanceled) {\n      this._onDrop();\n\n      return;\n    }\n\n    pluginEvent('setupClone', this);\n\n    if (!Sortable.eventCanceled) {\n      cloneEl = clone(dragEl);\n      cloneEl.removeAttribute(\"id\");\n      cloneEl.draggable = false;\n      cloneEl.style['will-change'] = '';\n\n      this._hideClone();\n\n      toggleClass(cloneEl, this.options.chosenClass, false);\n      Sortable.clone = cloneEl;\n    } // #1143: IFrame support workaround\n\n\n    _this.cloneId = _nextTick(function () {\n      pluginEvent('clone', _this);\n      if (Sortable.eventCanceled) return;\n\n      if (!_this.options.removeCloneOnHide) {\n        rootEl.insertBefore(cloneEl, dragEl);\n      }\n\n      _this._hideClone();\n\n      _dispatchEvent({\n        sortable: _this,\n        name: 'clone'\n      });\n    });\n    !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n    if (fallback) {\n      ignoreNextClick = true;\n      _this._loopId = setInterval(_this._emulateDragOver, 50);\n    } else {\n      // Undo what was set in _prepareDragStart before drag started\n      off(document, 'mouseup', _this._onDrop);\n      off(document, 'touchend', _this._onDrop);\n      off(document, 'touchcancel', _this._onDrop);\n\n      if (dataTransfer) {\n        dataTransfer.effectAllowed = 'move';\n        options.setData && options.setData.call(_this, dataTransfer, dragEl);\n      }\n\n      on(document, 'drop', _this); // #1276 fix:\n\n      css(dragEl, 'transform', 'translateZ(0)');\n    }\n\n    awaitingDragStarted = true;\n    _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n    on(document, 'selectstart', _this);\n    moved = true;\n\n    if (Safari) {\n      css(document.body, 'user-select', 'none');\n    }\n  },\n  // Returns true - if no further action is needed (either inserted or another condition)\n  _onDragOver: function _onDragOver(\n  /**Event*/\n  evt) {\n    var el = this.el,\n        target = evt.target,\n        dragRect,\n        targetRect,\n        revert,\n        options = this.options,\n        group = options.group,\n        activeSortable = Sortable.active,\n        isOwner = activeGroup === group,\n        canSort = options.sort,\n        fromSortable = putSortable || activeSortable,\n        vertical,\n        _this = this,\n        completedFired = false;\n\n    if (_silent) return;\n\n    function dragOverEvent(name, extra) {\n      pluginEvent(name, _this, _objectSpread2({\n        evt: evt,\n        isOwner: isOwner,\n        axis: vertical ? 'vertical' : 'horizontal',\n        revert: revert,\n        dragRect: dragRect,\n        targetRect: targetRect,\n        canSort: canSort,\n        fromSortable: fromSortable,\n        target: target,\n        completed: completed,\n        onMove: function onMove(target, after) {\n          return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n        },\n        changed: changed\n      }, extra));\n    } // Capture animation state\n\n\n    function capture() {\n      dragOverEvent('dragOverAnimationCapture');\n\n      _this.captureAnimationState();\n\n      if (_this !== fromSortable) {\n        fromSortable.captureAnimationState();\n      }\n    } // Return invocation when dragEl is inserted (or completed)\n\n\n    function completed(insertion) {\n      dragOverEvent('dragOverCompleted', {\n        insertion: insertion\n      });\n\n      if (insertion) {\n        // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n        if (isOwner) {\n          activeSortable._hideClone();\n        } else {\n          activeSortable._showClone(_this);\n        }\n\n        if (_this !== fromSortable) {\n          // Set ghost class to new sortable's ghost class\n          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n          toggleClass(dragEl, options.ghostClass, true);\n        }\n\n        if (putSortable !== _this && _this !== Sortable.active) {\n          putSortable = _this;\n        } else if (_this === Sortable.active && putSortable) {\n          putSortable = null;\n        } // Animation\n\n\n        if (fromSortable === _this) {\n          _this._ignoreWhileAnimating = target;\n        }\n\n        _this.animateAll(function () {\n          dragOverEvent('dragOverAnimationComplete');\n          _this._ignoreWhileAnimating = null;\n        });\n\n        if (_this !== fromSortable) {\n          fromSortable.animateAll();\n          fromSortable._ignoreWhileAnimating = null;\n        }\n      } // Null lastTarget if it is not inside a previously swapped element\n\n\n      if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n        lastTarget = null;\n      } // no bubbling and not fallback\n\n\n      if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n        dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n        !insertion && nearestEmptyInsertDetectEvent(evt);\n      }\n\n      !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n      return completedFired = true;\n    } // Call when dragEl has been inserted\n\n\n    function changed() {\n      newIndex = index(dragEl);\n      newDraggableIndex = index(dragEl, options.draggable);\n\n      _dispatchEvent({\n        sortable: _this,\n        name: 'change',\n        toEl: el,\n        newIndex: newIndex,\n        newDraggableIndex: newDraggableIndex,\n        originalEvent: evt\n      });\n    }\n\n    if (evt.preventDefault !== void 0) {\n      evt.cancelable && evt.preventDefault();\n    }\n\n    target = closest(target, options.draggable, el, true);\n    dragOverEvent('dragOver');\n    if (Sortable.eventCanceled) return completedFired;\n\n    if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n      return completed(false);\n    }\n\n    ignoreNextClick = false;\n\n    if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n    : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n      vertical = this._getDirection(evt, target) === 'vertical';\n      dragRect = getRect(dragEl);\n      dragOverEvent('dragOverValid');\n      if (Sortable.eventCanceled) return completedFired;\n\n      if (revert) {\n        parentEl = rootEl; // actualization\n\n        capture();\n\n        this._hideClone();\n\n        dragOverEvent('revert');\n\n        if (!Sortable.eventCanceled) {\n          if (nextEl) {\n            rootEl.insertBefore(dragEl, nextEl);\n          } else {\n            rootEl.appendChild(dragEl);\n          }\n        }\n\n        return completed(true);\n      }\n\n      var elLastChild = lastChild(el, options.draggable);\n\n      if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n        // Insert to end of list\n        // If already at end of list: Do not insert\n        if (elLastChild === dragEl) {\n          return completed(false);\n        } // if there is a last element, it is the target\n\n\n        if (elLastChild && el === evt.target) {\n          target = elLastChild;\n        }\n\n        if (target) {\n          targetRect = getRect(target);\n        }\n\n        if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n          capture();\n\n          if (elLastChild && elLastChild.nextSibling) {\n            // the last draggable element is not the last node\n            el.insertBefore(dragEl, elLastChild.nextSibling);\n          } else {\n            el.appendChild(dragEl);\n          }\n\n          parentEl = el; // actualization\n\n          changed();\n          return completed(true);\n        }\n      } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n        // Insert to start of list\n        var firstChild = getChild(el, 0, options, true);\n\n        if (firstChild === dragEl) {\n          return completed(false);\n        }\n\n        target = firstChild;\n        targetRect = getRect(target);\n\n        if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n          capture();\n          el.insertBefore(dragEl, firstChild);\n          parentEl = el; // actualization\n\n          changed();\n          return completed(true);\n        }\n      } else if (target.parentNode === el) {\n        targetRect = getRect(target);\n        var direction = 0,\n            targetBeforeFirstSwap,\n            differentLevel = dragEl.parentNode !== el,\n            differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n            side1 = vertical ? 'top' : 'left',\n            scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n            scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n        if (lastTarget !== target) {\n          targetBeforeFirstSwap = targetRect[side1];\n          pastFirstInvertThresh = false;\n          isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n        }\n\n        direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n        var sibling;\n\n        if (direction !== 0) {\n          // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n          var dragIndex = index(dragEl);\n\n          do {\n            dragIndex -= direction;\n            sibling = parentEl.children[dragIndex];\n          } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n        } // If dragEl is already beside target: Do not insert\n\n\n        if (direction === 0 || sibling === target) {\n          return completed(false);\n        }\n\n        lastTarget = target;\n        lastDirection = direction;\n        var nextSibling = target.nextElementSibling,\n            after = false;\n        after = direction === 1;\n\n        var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n        if (moveVector !== false) {\n          if (moveVector === 1 || moveVector === -1) {\n            after = moveVector === 1;\n          }\n\n          _silent = true;\n          setTimeout(_unsilent, 30);\n          capture();\n\n          if (after && !nextSibling) {\n            el.appendChild(dragEl);\n          } else {\n            target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n          } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n          if (scrolledPastTop) {\n            scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n          }\n\n          parentEl = dragEl.parentNode; // actualization\n          // must be done before animation\n\n          if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n            targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n          }\n\n          changed();\n          return completed(true);\n        }\n      }\n\n      if (el.contains(dragEl)) {\n        return completed(false);\n      }\n    }\n\n    return false;\n  },\n  _ignoreWhileAnimating: null,\n  _offMoveEvents: function _offMoveEvents() {\n    off(document, 'mousemove', this._onTouchMove);\n    off(document, 'touchmove', this._onTouchMove);\n    off(document, 'pointermove', this._onTouchMove);\n    off(document, 'dragover', nearestEmptyInsertDetectEvent);\n    off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n    off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n  },\n  _offUpEvents: function _offUpEvents() {\n    var ownerDocument = this.el.ownerDocument;\n    off(ownerDocument, 'mouseup', this._onDrop);\n    off(ownerDocument, 'touchend', this._onDrop);\n    off(ownerDocument, 'pointerup', this._onDrop);\n    off(ownerDocument, 'touchcancel', this._onDrop);\n    off(document, 'selectstart', this);\n  },\n  _onDrop: function _onDrop(\n  /**Event*/\n  evt) {\n    var el = this.el,\n        options = this.options; // Get the index of the dragged element within its parent\n\n    newIndex = index(dragEl);\n    newDraggableIndex = index(dragEl, options.draggable);\n    pluginEvent('drop', this, {\n      evt: evt\n    });\n    parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n    newIndex = index(dragEl);\n    newDraggableIndex = index(dragEl, options.draggable);\n\n    if (Sortable.eventCanceled) {\n      this._nulling();\n\n      return;\n    }\n\n    awaitingDragStarted = false;\n    isCircumstantialInvert = false;\n    pastFirstInvertThresh = false;\n    clearInterval(this._loopId);\n    clearTimeout(this._dragStartTimer);\n\n    _cancelNextTick(this.cloneId);\n\n    _cancelNextTick(this._dragStartId); // Unbind events\n\n\n    if (this.nativeDraggable) {\n      off(document, 'drop', this);\n      off(el, 'dragstart', this._onDragStart);\n    }\n\n    this._offMoveEvents();\n\n    this._offUpEvents();\n\n    if (Safari) {\n      css(document.body, 'user-select', '');\n    }\n\n    css(dragEl, 'transform', '');\n\n    if (evt) {\n      if (moved) {\n        evt.cancelable && evt.preventDefault();\n        !options.dropBubble && evt.stopPropagation();\n      }\n\n      ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n        // Remove clone(s)\n        cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n      }\n\n      if (dragEl) {\n        if (this.nativeDraggable) {\n          off(dragEl, 'dragend', this);\n        }\n\n        _disableDraggable(dragEl);\n\n        dragEl.style['will-change'] = ''; // Remove classes\n        // ghostClass is added in dragStarted\n\n        if (moved && !awaitingDragStarted) {\n          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n        }\n\n        toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n        _dispatchEvent({\n          sortable: this,\n          name: 'unchoose',\n          toEl: parentEl,\n          newIndex: null,\n          newDraggableIndex: null,\n          originalEvent: evt\n        });\n\n        if (rootEl !== parentEl) {\n          if (newIndex >= 0) {\n            // Add event\n            _dispatchEvent({\n              rootEl: parentEl,\n              name: 'add',\n              toEl: parentEl,\n              fromEl: rootEl,\n              originalEvent: evt\n            }); // Remove event\n\n\n            _dispatchEvent({\n              sortable: this,\n              name: 'remove',\n              toEl: parentEl,\n              originalEvent: evt\n            }); // drag from one list and drop into another\n\n\n            _dispatchEvent({\n              rootEl: parentEl,\n              name: 'sort',\n              toEl: parentEl,\n              fromEl: rootEl,\n              originalEvent: evt\n            });\n\n            _dispatchEvent({\n              sortable: this,\n              name: 'sort',\n              toEl: parentEl,\n              originalEvent: evt\n            });\n          }\n\n          putSortable && putSortable.save();\n        } else {\n          if (newIndex !== oldIndex) {\n            if (newIndex >= 0) {\n              // drag & drop within the same list\n              _dispatchEvent({\n                sortable: this,\n                name: 'update',\n                toEl: parentEl,\n                originalEvent: evt\n              });\n\n              _dispatchEvent({\n                sortable: this,\n                name: 'sort',\n                toEl: parentEl,\n                originalEvent: evt\n              });\n            }\n          }\n        }\n\n        if (Sortable.active) {\n          /* jshint eqnull:true */\n          if (newIndex == null || newIndex === -1) {\n            newIndex = oldIndex;\n            newDraggableIndex = oldDraggableIndex;\n          }\n\n          _dispatchEvent({\n            sortable: this,\n            name: 'end',\n            toEl: parentEl,\n            originalEvent: evt\n          }); // Save sorting\n\n\n          this.save();\n        }\n      }\n    }\n\n    this._nulling();\n  },\n  _nulling: function _nulling() {\n    pluginEvent('nulling', this);\n    rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n    savedInputChecked.forEach(function (el) {\n      el.checked = true;\n    });\n    savedInputChecked.length = lastDx = lastDy = 0;\n  },\n  handleEvent: function handleEvent(\n  /**Event*/\n  evt) {\n    switch (evt.type) {\n      case 'drop':\n      case 'dragend':\n        this._onDrop(evt);\n\n        break;\n\n      case 'dragenter':\n      case 'dragover':\n        if (dragEl) {\n          this._onDragOver(evt);\n\n          _globalDragOver(evt);\n        }\n\n        break;\n\n      case 'selectstart':\n        evt.preventDefault();\n        break;\n    }\n  },\n\n  /**\r\n   * Serializes the item into an array of string.\r\n   * @returns {String[]}\r\n   */\n  toArray: function toArray() {\n    var order = [],\n        el,\n        children = this.el.children,\n        i = 0,\n        n = children.length,\n        options = this.options;\n\n    for (; i < n; i++) {\n      el = children[i];\n\n      if (closest(el, options.draggable, this.el, false)) {\n        order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n      }\n    }\n\n    return order;\n  },\n\n  /**\r\n   * Sorts the elements according to the array.\r\n   * @param  {String[]}  order  order of the items\r\n   */\n  sort: function sort(order, useAnimation) {\n    var items = {},\n        rootEl = this.el;\n    this.toArray().forEach(function (id, i) {\n      var el = rootEl.children[i];\n\n      if (closest(el, this.options.draggable, rootEl, false)) {\n        items[id] = el;\n      }\n    }, this);\n    useAnimation && this.captureAnimationState();\n    order.forEach(function (id) {\n      if (items[id]) {\n        rootEl.removeChild(items[id]);\n        rootEl.appendChild(items[id]);\n      }\n    });\n    useAnimation && this.animateAll();\n  },\n\n  /**\r\n   * Save the current sorting\r\n   */\n  save: function save() {\n    var store = this.options.store;\n    store && store.set && store.set(this);\n  },\n\n  /**\r\n   * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n   * @param   {HTMLElement}  el\r\n   * @param   {String}       [selector]  default: `options.draggable`\r\n   * @returns {HTMLElement|null}\r\n   */\n  closest: function closest$1(el, selector) {\n    return closest(el, selector || this.options.draggable, this.el, false);\n  },\n\n  /**\r\n   * Set/get option\r\n   * @param   {string} name\r\n   * @param   {*}      [value]\r\n   * @returns {*}\r\n   */\n  option: function option(name, value) {\n    var options = this.options;\n\n    if (value === void 0) {\n      return options[name];\n    } else {\n      var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n      if (typeof modifiedValue !== 'undefined') {\n        options[name] = modifiedValue;\n      } else {\n        options[name] = value;\n      }\n\n      if (name === 'group') {\n        _prepareGroup(options);\n      }\n    }\n  },\n\n  /**\r\n   * Destroy\r\n   */\n  destroy: function destroy() {\n    pluginEvent('destroy', this);\n    var el = this.el;\n    el[expando] = null;\n    off(el, 'mousedown', this._onTapStart);\n    off(el, 'touchstart', this._onTapStart);\n    off(el, 'pointerdown', this._onTapStart);\n\n    if (this.nativeDraggable) {\n      off(el, 'dragover', this);\n      off(el, 'dragenter', this);\n    } // Remove draggable attributes\n\n\n    Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n      el.removeAttribute('draggable');\n    });\n\n    this._onDrop();\n\n    this._disableDelayedDragEvents();\n\n    sortables.splice(sortables.indexOf(this.el), 1);\n    this.el = el = null;\n  },\n  _hideClone: function _hideClone() {\n    if (!cloneHidden) {\n      pluginEvent('hideClone', this);\n      if (Sortable.eventCanceled) return;\n      css(cloneEl, 'display', 'none');\n\n      if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n        cloneEl.parentNode.removeChild(cloneEl);\n      }\n\n      cloneHidden = true;\n    }\n  },\n  _showClone: function _showClone(putSortable) {\n    if (putSortable.lastPutMode !== 'clone') {\n      this._hideClone();\n\n      return;\n    }\n\n    if (cloneHidden) {\n      pluginEvent('showClone', this);\n      if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n      if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n        rootEl.insertBefore(cloneEl, dragEl);\n      } else if (nextEl) {\n        rootEl.insertBefore(cloneEl, nextEl);\n      } else {\n        rootEl.appendChild(cloneEl);\n      }\n\n      if (this.options.group.revertClone) {\n        this.animate(dragEl, cloneEl);\n      }\n\n      css(cloneEl, 'display', '');\n      cloneHidden = false;\n    }\n  }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n  if (evt.dataTransfer) {\n    evt.dataTransfer.dropEffect = 'move';\n  }\n\n  evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n  var evt,\n      sortable = fromEl[expando],\n      onMoveFn = sortable.options.onMove,\n      retVal; // Support for new CustomEvent feature\n\n  if (window.CustomEvent && !IE11OrLess && !Edge) {\n    evt = new CustomEvent('move', {\n      bubbles: true,\n      cancelable: true\n    });\n  } else {\n    evt = document.createEvent('Event');\n    evt.initEvent('move', true, true);\n  }\n\n  evt.to = toEl;\n  evt.from = fromEl;\n  evt.dragged = dragEl;\n  evt.draggedRect = dragRect;\n  evt.related = targetEl || toEl;\n  evt.relatedRect = targetRect || getRect(toEl);\n  evt.willInsertAfter = willInsertAfter;\n  evt.originalEvent = originalEvent;\n  fromEl.dispatchEvent(evt);\n\n  if (onMoveFn) {\n    retVal = onMoveFn.call(sortable, evt, originalEvent);\n  }\n\n  return retVal;\n}\n\nfunction _disableDraggable(el) {\n  el.draggable = false;\n}\n\nfunction _unsilent() {\n  _silent = false;\n}\n\nfunction _ghostIsFirst(evt, vertical, sortable) {\n  var rect = getRect(getChild(sortable.el, 0, sortable.options, true));\n  var spacer = 10;\n  return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n  var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n  var spacer = 10;\n  return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n  var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n      targetLength = vertical ? targetRect.height : targetRect.width,\n      targetS1 = vertical ? targetRect.top : targetRect.left,\n      targetS2 = vertical ? targetRect.bottom : targetRect.right,\n      invert = false;\n\n  if (!invertSwap) {\n    // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n    if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n      // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n      // check if past first invert threshold on side opposite of lastDirection\n      if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n        // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n        pastFirstInvertThresh = true;\n      }\n\n      if (!pastFirstInvertThresh) {\n        // dragEl shadow (target move distance shadow)\n        if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n        : mouseOnAxis > targetS2 - targetMoveDistance) {\n          return -lastDirection;\n        }\n      } else {\n        invert = true;\n      }\n    } else {\n      // Regular\n      if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n        return _getInsertDirection(target);\n      }\n    }\n  }\n\n  invert = invert || invertSwap;\n\n  if (invert) {\n    // Invert of regular\n    if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n      return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n    }\n  }\n\n  return 0;\n}\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param  {HTMLElement} target       The target whose position dragEl is being inserted at\r\n * @return {Number}                   Direction dragEl must be swapped\r\n */\n\n\nfunction _getInsertDirection(target) {\n  if (index(dragEl) < index(target)) {\n    return 1;\n  } else {\n    return -1;\n  }\n}\n/**\r\n * Generate id\r\n * @param   {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\n\n\nfunction _generateId(el) {\n  var str = el.tagName + el.className + el.src + el.href + el.textContent,\n      i = str.length,\n      sum = 0;\n\n  while (i--) {\n    sum += str.charCodeAt(i);\n  }\n\n  return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n  savedInputChecked.length = 0;\n  var inputs = root.getElementsByTagName('input');\n  var idx = inputs.length;\n\n  while (idx--) {\n    var el = inputs[idx];\n    el.checked && savedInputChecked.push(el);\n  }\n}\n\nfunction _nextTick(fn) {\n  return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n  return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n  on(document, 'touchmove', function (evt) {\n    if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n      evt.preventDefault();\n    }\n  });\n} // Export utils\n\n\nSortable.utils = {\n  on: on,\n  off: off,\n  css: css,\n  find: find,\n  is: function is(el, selector) {\n    return !!closest(el, selector, el, false);\n  },\n  extend: extend,\n  throttle: throttle,\n  closest: closest,\n  toggleClass: toggleClass,\n  clone: clone,\n  index: index,\n  nextTick: _nextTick,\n  cancelNextTick: _cancelNextTick,\n  detectDirection: _detectDirection,\n  getChild: getChild\n};\n/**\r\n * Get the Sortable instance of an element\r\n * @param  {HTMLElement} element The element\r\n * @return {Sortable|undefined}         The instance of Sortable\r\n */\n\nSortable.get = function (element) {\n  return element[expando];\n};\n/**\r\n * Mount a plugin to Sortable\r\n * @param  {...SortablePlugin|SortablePlugin[]} plugins       Plugins being mounted\r\n */\n\n\nSortable.mount = function () {\n  for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n    plugins[_key] = arguments[_key];\n  }\n\n  if (plugins[0].constructor === Array) plugins = plugins[0];\n  plugins.forEach(function (plugin) {\n    if (!plugin.prototype || !plugin.prototype.constructor) {\n      throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n    }\n\n    if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n    PluginManager.mount(plugin);\n  });\n};\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement}  el\r\n * @param {Object}      [options]\r\n */\n\n\nSortable.create = function (el, options) {\n  return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n    scrollEl,\n    scrollRootEl,\n    scrolling = false,\n    lastAutoScrollX,\n    lastAutoScrollY,\n    touchEvt$1,\n    pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n  function AutoScroll() {\n    this.defaults = {\n      scroll: true,\n      forceAutoScrollFallback: false,\n      scrollSensitivity: 30,\n      scrollSpeed: 10,\n      bubbleScroll: true\n    }; // Bind all private methods\n\n    for (var fn in this) {\n      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n        this[fn] = this[fn].bind(this);\n      }\n    }\n  }\n\n  AutoScroll.prototype = {\n    dragStarted: function dragStarted(_ref) {\n      var originalEvent = _ref.originalEvent;\n\n      if (this.sortable.nativeDraggable) {\n        on(document, 'dragover', this._handleAutoScroll);\n      } else {\n        if (this.options.supportPointer) {\n          on(document, 'pointermove', this._handleFallbackAutoScroll);\n        } else if (originalEvent.touches) {\n          on(document, 'touchmove', this._handleFallbackAutoScroll);\n        } else {\n          on(document, 'mousemove', this._handleFallbackAutoScroll);\n        }\n      }\n    },\n    dragOverCompleted: function dragOverCompleted(_ref2) {\n      var originalEvent = _ref2.originalEvent;\n\n      // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n      if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n        this._handleAutoScroll(originalEvent);\n      }\n    },\n    drop: function drop() {\n      if (this.sortable.nativeDraggable) {\n        off(document, 'dragover', this._handleAutoScroll);\n      } else {\n        off(document, 'pointermove', this._handleFallbackAutoScroll);\n        off(document, 'touchmove', this._handleFallbackAutoScroll);\n        off(document, 'mousemove', this._handleFallbackAutoScroll);\n      }\n\n      clearPointerElemChangedInterval();\n      clearAutoScrolls();\n      cancelThrottle();\n    },\n    nulling: function nulling() {\n      touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n      autoScrolls.length = 0;\n    },\n    _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n      this._handleAutoScroll(evt, true);\n    },\n    _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n      var _this = this;\n\n      var x = (evt.touches ? evt.touches[0] : evt).clientX,\n          y = (evt.touches ? evt.touches[0] : evt).clientY,\n          elem = document.elementFromPoint(x, y);\n      touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n      // Edge's autoscroll seems too conditional,\n      // MACOS Safari does not have autoscroll,\n      // Firefox and Chrome are good\n\n      if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n        autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n        var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n        if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n          pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n          pointerElemChangedInterval = setInterval(function () {\n            var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n            if (newElem !== ogElemScroller) {\n              ogElemScroller = newElem;\n              clearAutoScrolls();\n            }\n\n            autoScroll(evt, _this.options, newElem, fallback);\n          }, 10);\n          lastAutoScrollX = x;\n          lastAutoScrollY = y;\n        }\n      } else {\n        // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n        if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n          clearAutoScrolls();\n          return;\n        }\n\n        autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n      }\n    }\n  };\n  return _extends(AutoScroll, {\n    pluginName: 'scroll',\n    initializeByDefault: true\n  });\n}\n\nfunction clearAutoScrolls() {\n  autoScrolls.forEach(function (autoScroll) {\n    clearInterval(autoScroll.pid);\n  });\n  autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n  clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n  // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n  if (!options.scroll) return;\n  var x = (evt.touches ? evt.touches[0] : evt).clientX,\n      y = (evt.touches ? evt.touches[0] : evt).clientY,\n      sens = options.scrollSensitivity,\n      speed = options.scrollSpeed,\n      winScroller = getWindowScrollingElement();\n  var scrollThisInstance = false,\n      scrollCustomFn; // New scroll root, set scrollEl\n\n  if (scrollRootEl !== rootEl) {\n    scrollRootEl = rootEl;\n    clearAutoScrolls();\n    scrollEl = options.scroll;\n    scrollCustomFn = options.scrollFn;\n\n    if (scrollEl === true) {\n      scrollEl = getParentAutoScrollElement(rootEl, true);\n    }\n  }\n\n  var layersOut = 0;\n  var currentParent = scrollEl;\n\n  do {\n    var el = currentParent,\n        rect = getRect(el),\n        top = rect.top,\n        bottom = rect.bottom,\n        left = rect.left,\n        right = rect.right,\n        width = rect.width,\n        height = rect.height,\n        canScrollX = void 0,\n        canScrollY = void 0,\n        scrollWidth = el.scrollWidth,\n        scrollHeight = el.scrollHeight,\n        elCSS = css(el),\n        scrollPosX = el.scrollLeft,\n        scrollPosY = el.scrollTop;\n\n    if (el === winScroller) {\n      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n    } else {\n      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n    }\n\n    var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n    var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n    if (!autoScrolls[layersOut]) {\n      for (var i = 0; i <= layersOut; i++) {\n        if (!autoScrolls[i]) {\n          autoScrolls[i] = {};\n        }\n      }\n    }\n\n    if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n      autoScrolls[layersOut].el = el;\n      autoScrolls[layersOut].vx = vx;\n      autoScrolls[layersOut].vy = vy;\n      clearInterval(autoScrolls[layersOut].pid);\n\n      if (vx != 0 || vy != 0) {\n        scrollThisInstance = true;\n        /* jshint loopfunc:true */\n\n        autoScrolls[layersOut].pid = setInterval(function () {\n          // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n          if (isFallback && this.layer === 0) {\n            Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n          }\n\n          var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n          var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n          if (typeof scrollCustomFn === 'function') {\n            if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n              return;\n            }\n          }\n\n          scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n        }.bind({\n          layer: layersOut\n        }), 24);\n      }\n    }\n\n    layersOut++;\n  } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n  scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n  var originalEvent = _ref.originalEvent,\n      putSortable = _ref.putSortable,\n      dragEl = _ref.dragEl,\n      activeSortable = _ref.activeSortable,\n      dispatchSortableEvent = _ref.dispatchSortableEvent,\n      hideGhostForTarget = _ref.hideGhostForTarget,\n      unhideGhostForTarget = _ref.unhideGhostForTarget;\n  if (!originalEvent) return;\n  var toSortable = putSortable || activeSortable;\n  hideGhostForTarget();\n  var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n  var target = document.elementFromPoint(touch.clientX, touch.clientY);\n  unhideGhostForTarget();\n\n  if (toSortable && !toSortable.el.contains(target)) {\n    dispatchSortableEvent('spill');\n    this.onSpill({\n      dragEl: dragEl,\n      putSortable: putSortable\n    });\n  }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n  startIndex: null,\n  dragStart: function dragStart(_ref2) {\n    var oldDraggableIndex = _ref2.oldDraggableIndex;\n    this.startIndex = oldDraggableIndex;\n  },\n  onSpill: function onSpill(_ref3) {\n    var dragEl = _ref3.dragEl,\n        putSortable = _ref3.putSortable;\n    this.sortable.captureAnimationState();\n\n    if (putSortable) {\n      putSortable.captureAnimationState();\n    }\n\n    var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n    if (nextSibling) {\n      this.sortable.el.insertBefore(dragEl, nextSibling);\n    } else {\n      this.sortable.el.appendChild(dragEl);\n    }\n\n    this.sortable.animateAll();\n\n    if (putSortable) {\n      putSortable.animateAll();\n    }\n  },\n  drop: drop\n};\n\n_extends(Revert, {\n  pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n  onSpill: function onSpill(_ref4) {\n    var dragEl = _ref4.dragEl,\n        putSortable = _ref4.putSortable;\n    var parentSortable = putSortable || this.sortable;\n    parentSortable.captureAnimationState();\n    dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n    parentSortable.animateAll();\n  },\n  drop: drop\n};\n\n_extends(Remove, {\n  pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n  function Swap() {\n    this.defaults = {\n      swapClass: 'sortable-swap-highlight'\n    };\n  }\n\n  Swap.prototype = {\n    dragStart: function dragStart(_ref) {\n      var dragEl = _ref.dragEl;\n      lastSwapEl = dragEl;\n    },\n    dragOverValid: function dragOverValid(_ref2) {\n      var completed = _ref2.completed,\n          target = _ref2.target,\n          onMove = _ref2.onMove,\n          activeSortable = _ref2.activeSortable,\n          changed = _ref2.changed,\n          cancel = _ref2.cancel;\n      if (!activeSortable.options.swap) return;\n      var el = this.sortable.el,\n          options = this.options;\n\n      if (target && target !== el) {\n        var prevSwapEl = lastSwapEl;\n\n        if (onMove(target) !== false) {\n          toggleClass(target, options.swapClass, true);\n          lastSwapEl = target;\n        } else {\n          lastSwapEl = null;\n        }\n\n        if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n          toggleClass(prevSwapEl, options.swapClass, false);\n        }\n      }\n\n      changed();\n      completed(true);\n      cancel();\n    },\n    drop: function drop(_ref3) {\n      var activeSortable = _ref3.activeSortable,\n          putSortable = _ref3.putSortable,\n          dragEl = _ref3.dragEl;\n      var toSortable = putSortable || this.sortable;\n      var options = this.options;\n      lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n      if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n        if (dragEl !== lastSwapEl) {\n          toSortable.captureAnimationState();\n          if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n          swapNodes(dragEl, lastSwapEl);\n          toSortable.animateAll();\n          if (toSortable !== activeSortable) activeSortable.animateAll();\n        }\n      }\n    },\n    nulling: function nulling() {\n      lastSwapEl = null;\n    }\n  };\n  return _extends(Swap, {\n    pluginName: 'swap',\n    eventProperties: function eventProperties() {\n      return {\n        swapItem: lastSwapEl\n      };\n    }\n  });\n}\n\nfunction swapNodes(n1, n2) {\n  var p1 = n1.parentNode,\n      p2 = n2.parentNode,\n      i1,\n      i2;\n  if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n  i1 = index(n1);\n  i2 = index(n2);\n\n  if (p1.isEqualNode(p2) && i1 < i2) {\n    i2++;\n  }\n\n  p1.insertBefore(n2, p1.children[i1]);\n  p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n    multiDragClones = [],\n    lastMultiDragSelect,\n    // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n    initialFolding = false,\n    // Initial multi-drag fold when drag started\nfolding = false,\n    // Folding any other time\ndragStarted = false,\n    dragEl$1,\n    clonesFromRect,\n    clonesHidden;\n\nfunction MultiDragPlugin() {\n  function MultiDrag(sortable) {\n    // Bind all private methods\n    for (var fn in this) {\n      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n        this[fn] = this[fn].bind(this);\n      }\n    }\n\n    if (!sortable.options.avoidImplicitDeselect) {\n      if (sortable.options.supportPointer) {\n        on(document, 'pointerup', this._deselectMultiDrag);\n      } else {\n        on(document, 'mouseup', this._deselectMultiDrag);\n        on(document, 'touchend', this._deselectMultiDrag);\n      }\n    }\n\n    on(document, 'keydown', this._checkKeyDown);\n    on(document, 'keyup', this._checkKeyUp);\n    this.defaults = {\n      selectedClass: 'sortable-selected',\n      multiDragKey: null,\n      avoidImplicitDeselect: false,\n      setData: function setData(dataTransfer, dragEl) {\n        var data = '';\n\n        if (multiDragElements.length && multiDragSortable === sortable) {\n          multiDragElements.forEach(function (multiDragElement, i) {\n            data += (!i ? '' : ', ') + multiDragElement.textContent;\n          });\n        } else {\n          data = dragEl.textContent;\n        }\n\n        dataTransfer.setData('Text', data);\n      }\n    };\n  }\n\n  MultiDrag.prototype = {\n    multiDragKeyDown: false,\n    isMultiDrag: false,\n    delayStartGlobal: function delayStartGlobal(_ref) {\n      var dragged = _ref.dragEl;\n      dragEl$1 = dragged;\n    },\n    delayEnded: function delayEnded() {\n      this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n    },\n    setupClone: function setupClone(_ref2) {\n      var sortable = _ref2.sortable,\n          cancel = _ref2.cancel;\n      if (!this.isMultiDrag) return;\n\n      for (var i = 0; i < multiDragElements.length; i++) {\n        multiDragClones.push(clone(multiDragElements[i]));\n        multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n        multiDragClones[i].draggable = false;\n        multiDragClones[i].style['will-change'] = '';\n        toggleClass(multiDragClones[i], this.options.selectedClass, false);\n        multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n      }\n\n      sortable._hideClone();\n\n      cancel();\n    },\n    clone: function clone(_ref3) {\n      var sortable = _ref3.sortable,\n          rootEl = _ref3.rootEl,\n          dispatchSortableEvent = _ref3.dispatchSortableEvent,\n          cancel = _ref3.cancel;\n      if (!this.isMultiDrag) return;\n\n      if (!this.options.removeCloneOnHide) {\n        if (multiDragElements.length && multiDragSortable === sortable) {\n          insertMultiDragClones(true, rootEl);\n          dispatchSortableEvent('clone');\n          cancel();\n        }\n      }\n    },\n    showClone: function showClone(_ref4) {\n      var cloneNowShown = _ref4.cloneNowShown,\n          rootEl = _ref4.rootEl,\n          cancel = _ref4.cancel;\n      if (!this.isMultiDrag) return;\n      insertMultiDragClones(false, rootEl);\n      multiDragClones.forEach(function (clone) {\n        css(clone, 'display', '');\n      });\n      cloneNowShown();\n      clonesHidden = false;\n      cancel();\n    },\n    hideClone: function hideClone(_ref5) {\n      var _this = this;\n\n      var sortable = _ref5.sortable,\n          cloneNowHidden = _ref5.cloneNowHidden,\n          cancel = _ref5.cancel;\n      if (!this.isMultiDrag) return;\n      multiDragClones.forEach(function (clone) {\n        css(clone, 'display', 'none');\n\n        if (_this.options.removeCloneOnHide && clone.parentNode) {\n          clone.parentNode.removeChild(clone);\n        }\n      });\n      cloneNowHidden();\n      clonesHidden = true;\n      cancel();\n    },\n    dragStartGlobal: function dragStartGlobal(_ref6) {\n      var sortable = _ref6.sortable;\n\n      if (!this.isMultiDrag && multiDragSortable) {\n        multiDragSortable.multiDrag._deselectMultiDrag();\n      }\n\n      multiDragElements.forEach(function (multiDragElement) {\n        multiDragElement.sortableIndex = index(multiDragElement);\n      }); // Sort multi-drag elements\n\n      multiDragElements = multiDragElements.sort(function (a, b) {\n        return a.sortableIndex - b.sortableIndex;\n      });\n      dragStarted = true;\n    },\n    dragStarted: function dragStarted(_ref7) {\n      var _this2 = this;\n\n      var sortable = _ref7.sortable;\n      if (!this.isMultiDrag) return;\n\n      if (this.options.sort) {\n        // Capture rects,\n        // hide multi drag elements (by positioning them absolute),\n        // set multi drag elements rects to dragRect,\n        // show multi drag elements,\n        // animate to rects,\n        // unset rects & remove from DOM\n        sortable.captureAnimationState();\n\n        if (this.options.animation) {\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            css(multiDragElement, 'position', 'absolute');\n          });\n          var dragRect = getRect(dragEl$1, false, true, true);\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            setRect(multiDragElement, dragRect);\n          });\n          folding = true;\n          initialFolding = true;\n        }\n      }\n\n      sortable.animateAll(function () {\n        folding = false;\n        initialFolding = false;\n\n        if (_this2.options.animation) {\n          multiDragElements.forEach(function (multiDragElement) {\n            unsetRect(multiDragElement);\n          });\n        } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n        if (_this2.options.sort) {\n          removeMultiDragElements();\n        }\n      });\n    },\n    dragOver: function dragOver(_ref8) {\n      var target = _ref8.target,\n          completed = _ref8.completed,\n          cancel = _ref8.cancel;\n\n      if (folding && ~multiDragElements.indexOf(target)) {\n        completed(false);\n        cancel();\n      }\n    },\n    revert: function revert(_ref9) {\n      var fromSortable = _ref9.fromSortable,\n          rootEl = _ref9.rootEl,\n          sortable = _ref9.sortable,\n          dragRect = _ref9.dragRect;\n\n      if (multiDragElements.length > 1) {\n        // Setup unfold animation\n        multiDragElements.forEach(function (multiDragElement) {\n          sortable.addAnimationState({\n            target: multiDragElement,\n            rect: folding ? getRect(multiDragElement) : dragRect\n          });\n          unsetRect(multiDragElement);\n          multiDragElement.fromRect = dragRect;\n          fromSortable.removeAnimationState(multiDragElement);\n        });\n        folding = false;\n        insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n      }\n    },\n    dragOverCompleted: function dragOverCompleted(_ref10) {\n      var sortable = _ref10.sortable,\n          isOwner = _ref10.isOwner,\n          insertion = _ref10.insertion,\n          activeSortable = _ref10.activeSortable,\n          parentEl = _ref10.parentEl,\n          putSortable = _ref10.putSortable;\n      var options = this.options;\n\n      if (insertion) {\n        // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n        if (isOwner) {\n          activeSortable._hideClone();\n        }\n\n        initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n        if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n          // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n          var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n            // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n            parentEl.appendChild(multiDragElement);\n          });\n          folding = true;\n        } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n        if (!isOwner) {\n          // Only remove if not folding (folding will remove them anyways)\n          if (!folding) {\n            removeMultiDragElements();\n          }\n\n          if (multiDragElements.length > 1) {\n            var clonesHiddenBefore = clonesHidden;\n\n            activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n            if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n              multiDragClones.forEach(function (clone) {\n                activeSortable.addAnimationState({\n                  target: clone,\n                  rect: clonesFromRect\n                });\n                clone.fromRect = clonesFromRect;\n                clone.thisAnimationDuration = null;\n              });\n            }\n          } else {\n            activeSortable._showClone(sortable);\n          }\n        }\n      }\n    },\n    dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n      var dragRect = _ref11.dragRect,\n          isOwner = _ref11.isOwner,\n          activeSortable = _ref11.activeSortable;\n      multiDragElements.forEach(function (multiDragElement) {\n        multiDragElement.thisAnimationDuration = null;\n      });\n\n      if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n        clonesFromRect = _extends({}, dragRect);\n        var dragMatrix = matrix(dragEl$1, true);\n        clonesFromRect.top -= dragMatrix.f;\n        clonesFromRect.left -= dragMatrix.e;\n      }\n    },\n    dragOverAnimationComplete: function dragOverAnimationComplete() {\n      if (folding) {\n        folding = false;\n        removeMultiDragElements();\n      }\n    },\n    drop: function drop(_ref12) {\n      var evt = _ref12.originalEvent,\n          rootEl = _ref12.rootEl,\n          parentEl = _ref12.parentEl,\n          sortable = _ref12.sortable,\n          dispatchSortableEvent = _ref12.dispatchSortableEvent,\n          oldIndex = _ref12.oldIndex,\n          putSortable = _ref12.putSortable;\n      var toSortable = putSortable || this.sortable;\n      if (!evt) return;\n      var options = this.options,\n          children = parentEl.children; // Multi-drag selection\n\n      if (!dragStarted) {\n        if (options.multiDragKey && !this.multiDragKeyDown) {\n          this._deselectMultiDrag();\n        }\n\n        toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n        if (!~multiDragElements.indexOf(dragEl$1)) {\n          multiDragElements.push(dragEl$1);\n          dispatchEvent({\n            sortable: sortable,\n            rootEl: rootEl,\n            name: 'select',\n            targetEl: dragEl$1,\n            originalEvent: evt\n          }); // Modifier activated, select from last to dragEl\n\n          if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n            var lastIndex = index(lastMultiDragSelect),\n                currentIndex = index(dragEl$1);\n\n            if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n              // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n              // (but previous selection existed)\n              var n, i;\n\n              if (currentIndex > lastIndex) {\n                i = lastIndex;\n                n = currentIndex;\n              } else {\n                i = currentIndex;\n                n = lastIndex + 1;\n              }\n\n              for (; i < n; i++) {\n                if (~multiDragElements.indexOf(children[i])) continue;\n                toggleClass(children[i], options.selectedClass, true);\n                multiDragElements.push(children[i]);\n                dispatchEvent({\n                  sortable: sortable,\n                  rootEl: rootEl,\n                  name: 'select',\n                  targetEl: children[i],\n                  originalEvent: evt\n                });\n              }\n            }\n          } else {\n            lastMultiDragSelect = dragEl$1;\n          }\n\n          multiDragSortable = toSortable;\n        } else {\n          multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n          lastMultiDragSelect = null;\n          dispatchEvent({\n            sortable: sortable,\n            rootEl: rootEl,\n            name: 'deselect',\n            targetEl: dragEl$1,\n            originalEvent: evt\n          });\n        }\n      } // Multi-drag drop\n\n\n      if (dragStarted && this.isMultiDrag) {\n        folding = false; // Do not \"unfold\" after around dragEl if reverted\n\n        if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n          var dragRect = getRect(dragEl$1),\n              multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n          if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n          toSortable.captureAnimationState();\n\n          if (!initialFolding) {\n            if (options.animation) {\n              dragEl$1.fromRect = dragRect;\n              multiDragElements.forEach(function (multiDragElement) {\n                multiDragElement.thisAnimationDuration = null;\n\n                if (multiDragElement !== dragEl$1) {\n                  var rect = folding ? getRect(multiDragElement) : dragRect;\n                  multiDragElement.fromRect = rect; // Prepare unfold animation\n\n                  toSortable.addAnimationState({\n                    target: multiDragElement,\n                    rect: rect\n                  });\n                }\n              });\n            } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n            // properly they must all be removed\n\n\n            removeMultiDragElements();\n            multiDragElements.forEach(function (multiDragElement) {\n              if (children[multiDragIndex]) {\n                parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n              } else {\n                parentEl.appendChild(multiDragElement);\n              }\n\n              multiDragIndex++;\n            }); // If initial folding is done, the elements may have changed position because they are now\n            // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n            // must be fired here as Sortable will not.\n\n            if (oldIndex === index(dragEl$1)) {\n              var update = false;\n              multiDragElements.forEach(function (multiDragElement) {\n                if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n                  update = true;\n                  return;\n                }\n              });\n\n              if (update) {\n                dispatchSortableEvent('update');\n              }\n            }\n          } // Must be done after capturing individual rects (scroll bar)\n\n\n          multiDragElements.forEach(function (multiDragElement) {\n            unsetRect(multiDragElement);\n          });\n          toSortable.animateAll();\n        }\n\n        multiDragSortable = toSortable;\n      } // Remove clones if necessary\n\n\n      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n        multiDragClones.forEach(function (clone) {\n          clone.parentNode && clone.parentNode.removeChild(clone);\n        });\n      }\n    },\n    nullingGlobal: function nullingGlobal() {\n      this.isMultiDrag = dragStarted = false;\n      multiDragClones.length = 0;\n    },\n    destroyGlobal: function destroyGlobal() {\n      this._deselectMultiDrag();\n\n      off(document, 'pointerup', this._deselectMultiDrag);\n      off(document, 'mouseup', this._deselectMultiDrag);\n      off(document, 'touchend', this._deselectMultiDrag);\n      off(document, 'keydown', this._checkKeyDown);\n      off(document, 'keyup', this._checkKeyUp);\n    },\n    _deselectMultiDrag: function _deselectMultiDrag(evt) {\n      if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n      if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n      if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n      if (evt && evt.button !== 0) return;\n\n      while (multiDragElements.length) {\n        var el = multiDragElements[0];\n        toggleClass(el, this.options.selectedClass, false);\n        multiDragElements.shift();\n        dispatchEvent({\n          sortable: this.sortable,\n          rootEl: this.sortable.el,\n          name: 'deselect',\n          targetEl: el,\n          originalEvent: evt\n        });\n      }\n    },\n    _checkKeyDown: function _checkKeyDown(evt) {\n      if (evt.key === this.options.multiDragKey) {\n        this.multiDragKeyDown = true;\n      }\n    },\n    _checkKeyUp: function _checkKeyUp(evt) {\n      if (evt.key === this.options.multiDragKey) {\n        this.multiDragKeyDown = false;\n      }\n    }\n  };\n  return _extends(MultiDrag, {\n    // Static methods & properties\n    pluginName: 'multiDrag',\n    utils: {\n      /**\r\n       * Selects the provided multi-drag item\r\n       * @param  {HTMLElement} el    The element to be selected\r\n       */\n      select: function select(el) {\n        var sortable = el.parentNode[expando];\n        if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n        if (multiDragSortable && multiDragSortable !== sortable) {\n          multiDragSortable.multiDrag._deselectMultiDrag();\n\n          multiDragSortable = sortable;\n        }\n\n        toggleClass(el, sortable.options.selectedClass, true);\n        multiDragElements.push(el);\n      },\n\n      /**\r\n       * Deselects the provided multi-drag item\r\n       * @param  {HTMLElement} el    The element to be deselected\r\n       */\n      deselect: function deselect(el) {\n        var sortable = el.parentNode[expando],\n            index = multiDragElements.indexOf(el);\n        if (!sortable || !sortable.options.multiDrag || !~index) return;\n        toggleClass(el, sortable.options.selectedClass, false);\n        multiDragElements.splice(index, 1);\n      }\n    },\n    eventProperties: function eventProperties() {\n      var _this3 = this;\n\n      var oldIndicies = [],\n          newIndicies = [];\n      multiDragElements.forEach(function (multiDragElement) {\n        oldIndicies.push({\n          multiDragElement: multiDragElement,\n          index: multiDragElement.sortableIndex\n        }); // multiDragElements will already be sorted if folding\n\n        var newIndex;\n\n        if (folding && multiDragElement !== dragEl$1) {\n          newIndex = -1;\n        } else if (folding) {\n          newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n        } else {\n          newIndex = index(multiDragElement);\n        }\n\n        newIndicies.push({\n          multiDragElement: multiDragElement,\n          index: newIndex\n        });\n      });\n      return {\n        items: _toConsumableArray(multiDragElements),\n        clones: [].concat(multiDragClones),\n        oldIndicies: oldIndicies,\n        newIndicies: newIndicies\n      };\n    },\n    optionListeners: {\n      multiDragKey: function multiDragKey(key) {\n        key = key.toLowerCase();\n\n        if (key === 'ctrl') {\n          key = 'Control';\n        } else if (key.length > 1) {\n          key = key.charAt(0).toUpperCase() + key.substr(1);\n        }\n\n        return key;\n      }\n    }\n  });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n  multiDragElements.forEach(function (multiDragElement, i) {\n    var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n    if (target) {\n      rootEl.insertBefore(multiDragElement, target);\n    } else {\n      rootEl.appendChild(multiDragElement);\n    }\n  });\n}\n/**\r\n * Insert multi-drag clones\r\n * @param  {[Boolean]} elementsInserted  Whether the multi-drag elements are inserted\r\n * @param  {HTMLElement} rootEl\r\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n  multiDragClones.forEach(function (clone, i) {\n    var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n    if (target) {\n      rootEl.insertBefore(clone, target);\n    } else {\n      rootEl.appendChild(clone);\n    }\n  });\n}\n\nfunction removeMultiDragElements() {\n  multiDragElements.forEach(function (multiDragElement) {\n    if (multiDragElement === dragEl$1) return;\n    multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n  });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n", "import { Controller } from \"@hotwired/stimulus\";\nimport Sortable from \"sortablejs\";\nimport { FetchRequest } from \"@rails/request.js\";\n\nexport default class extends Controller {\n  static values = {\n    url: String,\n    group: String,\n  };\n\n  connect() {\n    let config = {\n      animation: 150,\n      fallbackOnBody: true,\n      swapThreshold: 0.65,\n      draggable: \".draggable\",\n      handle: \".handle\",\n      onEnd: this._saveOrder.bind(this),\n    };\n\n    if (this.hasGroupValue) {\n      config[\"group\"] = this.groupValue;\n    }\n\n    this.sortable = new Sortable(this.element, config);\n  }\n\n  _saveOrder = async (event) => {\n    let id = event.item.dataset.id;\n    let sortedArray = this.sortable.toArray();\n\n    const request = new FetchRequest(\n      \"patch\",\n      this.urlValue.replace(\":id\", id),\n      {\n        responseKind: \"turbo-stream\",\n        body: { position: event.newIndex + 1, sorted_array: sortedArray },\n      },\n    );\n\n    await request.perform();\n\n    const editor = document.getElementById(\"report-template-widgets\");\n    if (editor) {\n      const src = editor.src;\n      editor.src = null;\n      editor.src = src;\n    }\n  };\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Swal from \"sweetalert2\"\nimport { put } from \"@rails/request.js\"\n\n// Connects to data-controller=\"reports--copy-section\"\nexport default class extends Controller {\n  async copy(event) {\n    event.preventDefault()\n\n    const sectionUrl = event.params.sectionUrl\n\n    Swal.fire({\n      title: \"Warning\",\n      text: \"Copying this section will overwrite any values you have entered. Are you sure you want to continue?\",\n      showDenyButton: true,\n      showCancelButton: true,\n      confirmButtonText: \"Yes\",\n      denyButtonText: \"No\",\n    }).then(async (result) => {\n      if (result.isConfirmed) {\n        const response = await put(`${sectionUrl}.json`, { contentType: 'application/json', responseKind: 'json' })\n        if (response.ok) {\n          Swal.fire({\n            title: \"Success\",\n            text: \"Section copied successfully\",\n          })\n        }\n      }\n    })\n  }\n}\n", "import WysiwygController from \"../wysiwyg_controller\";\n\nconst styles = `\n  @media screen {\n    html {\n      background: #f4f4f4;\n      min-height: 100%;\n    }\n  }\n\n  @media screen {\n    body {\n      background-color: #fff;\n      box-shadow: 0 0 4px rgba(0, 0, 0, 0.15);\n      box-sizing: border-box;\n      margin: 1rem auto 0;\n      max-width: 820px;\n      min-height: calc(100vh - 1rem);\n      padding: 4rem 6rem 6rem 6rem;\n    }\n  }\n`;\n\nexport default class extends WysiwygController {\n  static values = {\n    css: String,\n  };\n\n  connect() {\n    super.connect();\n    console.log(\"Here\");\n  }\n\n  get optionsValue() {\n    return {\n      content_style: styles,\n      content_css: this.cssValue,\n    };\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\nimport Swal from \"sweetalert2\";\n\n// Connects to data-controller=\"reports\"\nexport default class extends Controller {\n  connect() {\n    this.reportStateChanged = false;\n\n    document\n      .querySelector(\"#report-widget-container\")\n      .addEventListener(\"change\", this.reportChanged.bind(this));\n\n    document.querySelectorAll(\".list-group-item-action\").forEach(\n      function (element) {\n        element.addEventListener(\"click\", this.checkReportState.bind(this));\n      }.bind(this),\n    );\n\n    document\n      .querySelector(\"#report-widget-container\")\n      .addEventListener(\"turbo:submit-end\", this.reportSaved.bind(this));\n  }\n\n  reportChanged() {\n    this.reportStateChanged = true;\n  }\n\n  checkReportState(event) {\n    if (this.reportStateChanged) {\n      event.preventDefault();\n\n      Swal.fire({\n        icon: \"error\",\n        text: \"Please save the current section you are working on before continuing\",\n      });\n\n      return;\n    }\n  }\n\n  reportSaved() {\n    this.reportStateChanged = false;\n\n    let currentSelection = document.querySelector(\".current-selected-widget\");\n    currentSelection.classList.remove(\"bg-info\");\n    currentSelection.classList.remove(\"bg-opacity-50\");\n    currentSelection.classList.remove(\"current-selected-widget\");\n\n    currentSelection.classList.add(\"bg-success\");\n    currentSelection.classList.add(\"bg-opacity-75\");\n    currentSelection.classList.add(\"text-white\");\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"reveal\"\nexport default class extends Controller {\n  static targets = [\"item\"];\n  static classes = [\"hidden\"];\n\n  connect() {\n    this.class = this.hasHiddenClass ? this.hiddenClass : \"d-none\";\n  }\n\n  toggle() {\n    this.itemTargets.forEach((item) => {\n      item.classList.toggle(this.class);\n    });\n  }\n\n  show() {\n    this.itemTargets.forEach((item) => {\n      item.classList.remove(this.class);\n    });\n  }\n\n  hide() {\n    this.itemTargets.forEach((item) => {\n      item.classList.add(this.class);\n    });\n  }\n}\n", "import RevealController from \"./reveal_controller\";\n\n// Connects to data-controller=\"reveal-on-input\"\nexport default class extends RevealController {\n  connect() {\n    super.connect();\n\n    console.log(\"connected\");\n  }\n\n  toggle(event) {\n    if (event.target.value === \"true\") {\n      super.show();\n    } else {\n      super.hide();\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"settings--new-pdf-form-field\"\nexport default class extends Controller {\n  static values = { url: String, pageNumber: Number };\n\n  PDF_US_LETTER_WIDTH = 612;\n  PDF_US_LETTER_HEIGHT = 792;\n\n  connect() {}\n\n  prompt(event) {\n    if (event.target.classList.contains(\"new-pdf-form-field-area\")) {\n      const containerRect = event.target.getBoundingClientRect();\n      const relativeX = event.clientX - containerRect.left;\n      const relativeY = event.clientY - containerRect.top;\n\n      const leftPercent = (relativeX / event.target.clientWidth) * 100;\n      const topPercent = (relativeY / event.target.clientHeight) * 100;\n\n      const pdfLeft = (leftPercent / 100) * this.PDF_US_LETTER_WIDTH;\n      const pdfTop =\n        this.PDF_US_LETTER_HEIGHT -\n        (topPercent / 100) * this.PDF_US_LETTER_HEIGHT;\n\n      const url = `${this.urlValue}?top=${pdfTop}&left=${pdfLeft}&page_number=${this.pageNumberValue}`;\n\n      Turbo.visit(`${url}`, { frame: \"modal\" });\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"settings--pdf-form-template-field\"\nexport default class extends Controller {\n  static targets = [\n    \"defaultValueTextInput\",\n    \"defaultValueInputContainer\",\n    \"fieldTypeInput\",\n    \"signerInput\",\n    \"prefilledValueInput\",\n    \"prefillCurrentDateContainer\",\n  ];\n\n  connect() {\n    this.initializeState();\n    this.updateUI();\n  }\n\n  initializeState() {\n    this.textInput = this.defaultValueTextInputTarget;\n    this.inputName = this.defaultValueTextInputTarget.name;\n    this.inputValue = this.defaultValueTextInputTarget.value;\n    this.fieldType = this.fieldTypeInputTarget.value;\n    this.signer = this.signerInputTarget.value;\n  }\n\n  fieldTypeChangedCallback(event) {\n    this.fieldType = event.currentTarget.value;\n    this.updateUI();\n  }\n\n  signerChangedCallback(event) {\n    this.signer = event.currentTarget.value;\n    this.updateUI();\n  }\n\n  updateUI() {\n    this.updateDefaultValueInput();\n    this.updatePrefilledValueInput();\n    this.updateDefaultValueContainer();\n    this.updatePrefillCurrentDateContainer();\n  }\n\n  // Default Value Input Management\n  updateDefaultValueInput() {\n    const inputHandlers = {\n      checkbox: () => this.createSelectInput(),\n      default: () => this.createTextInput(),\n    };\n\n    const handler = inputHandlers[this.fieldType] || inputHandlers.default;\n    handler();\n  }\n\n  createSelectInput() {\n    if (this.defaultValueInputContainerTarget.querySelector(\"select\")) {\n      return;\n    }\n\n    const selectInput = this.buildSelectElement();\n    this.replaceInputElement(selectInput, \"input\");\n  }\n\n  createTextInput() {\n    if (this.defaultValueInputContainerTarget.querySelector(\"input\")) {\n      return;\n    }\n\n    const textInput = this.buildTextInputElement();\n    this.replaceInputElement(textInput, \"select\");\n  }\n\n  buildSelectElement() {\n    const selectInput = document.createElement(\"select\");\n    selectInput.classList.add(\"form-select\");\n    selectInput.name = this.inputName;\n\n    const options = [\n      { text: \"\", value: \"\" },\n      { text: \"Checked\", value: \"true\" },\n      { text: \"Unchecked\", value: \"false\" },\n    ];\n\n    options.forEach((option) => {\n      const optionElement = document.createElement(\"option\");\n      optionElement.innerText = option.text;\n      optionElement.value = option.value;\n      selectInput.appendChild(optionElement);\n    });\n\n    // Set the value after all options are added\n    selectInput.value = this.inputValue;\n\n    return selectInput;\n  }\n\n  buildTextInputElement() {\n    const textInput = document.createElement(\"input\");\n    textInput.classList.add(\"form-control\");\n    textInput.name = this.inputName;\n    textInput.value = this.inputValue;\n    return textInput;\n  }\n\n  replaceInputElement(newElement, oldElementType) {\n    this.defaultValueInputContainerTarget\n      .querySelector(oldElementType)\n      ?.remove();\n    this.defaultValueInputContainerTarget.appendChild(newElement);\n  }\n\n  // Prefilled Value Input Management\n  updatePrefilledValueInput() {\n    if (this.signer === \"prefilled\") {\n      this.showPrefilledValueInput();\n    } else {\n      this.hidePrefilledValueInput();\n    }\n  }\n\n  showPrefilledValueInput() {\n    this.prefilledValueInputTarget.classList.remove(\"d-none\");\n  }\n\n  hidePrefilledValueInput() {\n    this.prefilledValueInputTarget.classList.add(\"d-none\");\n  }\n\n  // Default Value Container Management\n  updateDefaultValueContainer() {\n    if (this.signer === \"prefilled\" || this.fieldType === \"date\") {\n      this.hideDefaultValueContainer();\n    } else {\n      this.showDefaultValueContainer();\n    }\n  }\n\n  showDefaultValueContainer() {\n    this.defaultValueInputContainerTarget.classList.remove(\"d-none\");\n  }\n\n  hideDefaultValueContainer() {\n    this.defaultValueInputContainerTarget.classList.add(\"d-none\");\n  }\n\n  // Prefill Current Date Container Management\n  updatePrefillCurrentDateContainer() {\n    if (this.fieldType === \"date\") {\n      this.showPrefillCurrentDateContainer();\n    } else {\n      this.hidePrefillCurrentDateContainer();\n    }\n  }\n\n  showPrefillCurrentDateContainer() {\n    if (this.hasPrefillCurrentDateContainerTarget) {\n      this.prefillCurrentDateContainerTarget.classList.remove(\"d-none\");\n    }\n  }\n\n  hidePrefillCurrentDateContainer() {\n    if (this.hasPrefillCurrentDateContainerTarget) {\n      this.prefillCurrentDateContainerTarget.classList.add(\"d-none\");\n    }\n  }\n}\n", "// TODO: Convert to generic controller\nimport { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"settings--permissions--row-helper\"\nexport default class extends Controller {\n  static targets = [\"permissions\"];\n\n  connect() {}\n\n  checkAll(e) {\n    e.preventDefault();\n\n    this.permissionsTarget.querySelectorAll(\"input\").forEach((element) => {\n      if (element.type == \"checkbox\") {\n        element.checked = true;\n      }\n    });\n  }\n\n  clear(e) {\n    e.preventDefault();\n\n    this.permissionsTarget.querySelectorAll(\"input\").forEach((element) => {\n      if (element.type == \"checkbox\") {\n        element.checked = false;\n      }\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\nimport SignaturePad from \"signature_pad\";\nimport Swal from \"sweetalert2\";\n\n// Connects to data-controller=\"signature\"\nexport default class extends Controller {\n  static targets = [\"modal\", \"canvas\", \"input\", \"preview\"];\n\n  connect() {}\n\n  show(event) {\n    event.preventDefault();\n\n    this._showModal();\n    this._createSignaturePad();\n  }\n\n  sign(event) {\n    event.preventDefault();\n\n    // Check to see if a signature is present\n    if (!this._signaturePad.isEmpty()) {\n      const signature = this._signaturePad.toDataURL(\"image/svg+xml\");\n      this.inputTarget.value = signature;\n      this._generatePreview(signature);\n\n      this.hide();\n    } else {\n      Swal.fire({\n        icon: \"error\",\n        text: \"A signature is required\",\n      });\n    }\n  }\n\n  resizeSignaturePad() {\n    if (this._signaturePad) {\n      this._signaturePad.clear();\n\n      let ratio = Math.max(window.devicePixelRatio || 1, 1);\n\n      this.canvasTarget.width = this.canvasTarget.offsetWidth * ratio;\n      this.canvasTarget.height = this.canvasTarget.offsetHeight * ratio;\n\n      this.canvasTarget.getContext(\"2d\").scale(ratio, ratio);\n    }\n  }\n\n  hide() {\n    this.modalTarget.style.display = \"none\";\n  }\n\n  _showModal() {\n    this.modalTarget.style.display = \"block\";\n  }\n\n  _createSignaturePad() {\n    this._signaturePad = new SignaturePad(this.canvasTarget, {\n      backgroundColor: \"rgb(0, 0, 0, 0)\",\n    });\n\n    this.resizeSignaturePad();\n  }\n\n  _generatePreview(signature) {\n    let img = document.createElement(\"img\");\n    img.src = signature;\n\n    this.previewTarget.innerHTML = \"\";\n    this.previewTarget.appendChild(img);\n    this.previewTarget.classList.remove(\"d-none\");\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\nimport SignaturePad from \"signature_pad\";\nimport Swal from \"sweetalert2\";\nimport * as bootstrap from \"bootstrap\";\n\n// Connects to data-controller=\"signature-pad\"\nexport default class extends Controller {\n  static values = {\n    backdrop: { type: String, default: \"true\" },\n  };\n\n  static targets = [\"modal\", \"canvas\"];\n  static outlets = [\"signature-pad-receiver\"];\n\n  connect() {\n    this.modal = new bootstrap.Modal(this.modalTarget, {\n      backdrop: this.backdropValue,\n    });\n  }\n\n  show(event) {\n    event.preventDefault();\n\n    this.modal.show();\n    this._createSignaturePad();\n  }\n\n  sign(event) {\n    event.preventDefault();\n\n    // Check to see if a signature is present\n    if (!this._signaturePad.isEmpty()) {\n      this.signaturePadReceiverOutlet.addSignature(\n        this._signaturePad.toDataURL(\"image/svg+xml\")\n      );\n      this.modal.hide();\n    } else {\n      Swal.fire({\n        icon: \"error\",\n        text: \"A signature is required\",\n      });\n    }\n  }\n\n  resizeSignaturePad() {\n    if (this._signaturePad) {\n      this._signaturePad.clear();\n\n      let ratio = Math.max(window.devicePixelRatio || 1, 1);\n\n      this.canvasTarget.width = this.canvasTarget.offsetWidth * ratio;\n      this.canvasTarget.height = this.canvasTarget.offsetHeight * ratio;\n\n      this.canvasTarget.getContext(\"2d\").scale(ratio, ratio);\n    }\n  }\n\n  _createSignaturePad() {\n    this._signaturePad = new SignaturePad(this.canvasTarget, {\n      backgroundColor: \"rgb(0, 0, 0, 0)\",\n    });\n\n    this.resizeSignaturePad();\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"signature-pad-receiver\"\nexport default class extends Controller {\n  static targets = [\"input\", \"preview\"];\n\n  addSignature(signature) {\n    this.inputTarget.value = signature;\n\n    if (this.hasPreviewTarget) this._generateSignature();\n  }\n\n  _generateSignature() {\n    let img = document.createElement(\"img\");\n    img.src = this.inputTarget.value;\n\n    this.previewTarget.innerHTML = \"\";\n    this.previewTarget.appendChild(img);\n    this.previewTarget.classList.remove(\"d-none\");\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"slider-value\"\nexport default class extends Controller {\n  static targets = [\"output\"]\n\n  connect() {\n    // Find the intial value of the slider and set the output to that value\n    this.outputTarget.innerHTML = this.element.querySelector('input').value \n  }\n\n  updateOutput(event) {\n    this.outputTarget.innerHTML = event.target.value\n  }\n}\n", "import WysiwygController from \"./wysiwyg_controller\";\n\nconst styles = `\n  body {\n    padding: 1rem;\n  }\n`;\n\n// Connects to data-controller=\"small-editor\"\nexport default class extends WysiwygController {\n  connect() {\n    super.connect();\n  }\n\n  get optionsValue() {\n    return {\n      menubar: false,\n      height: \"300px\",\n      content_css: false,\n      content_style: styles,\n    };\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\nimport Sortable from \"sortablejs\";\nimport { FetchRequest } from \"@rails/request.js\";\n\nexport default class extends Controller {\n  static values = {\n    url: String,\n    group: String,\n  };\n\n  connect() {\n    let config = {\n      animation: 150,\n      fallbackOnBody: true,\n      swapThreshold: 0.65,\n      draggable: \".draggable\",\n      handle: \".handle\",\n      onEnd: this._saveOrder.bind(this),\n    };\n\n    if (this.hasGroupValue) {\n      config[\"group\"] = this.groupValue;\n    }\n\n    this.sortable = new Sortable(this.element, config);\n  }\n\n  _saveOrder = async (event) => {\n    let id = event.item.dataset.id;\n    let sortedArray = this.sortable.toArray();\n\n    let url = this.urlValue;\n    if (url.includes(\":id\") && id) {\n      url = url.replace(\":id\", id);\n    }\n\n    const request = new FetchRequest(\"patch\", url, {\n      responseKind: \"turbo-stream\",\n      body: { position: event.newIndex + 1, sorted_array: sortedArray },\n    });\n\n    await request.perform();\n  };\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"textarea-limiter\"\nexport default class extends Controller {\n  connect() {}\n\n  check() {\n    const scrollHeight = this.element.scrollHeight;\n    const maxHeight = this.element.clientHeight;\n\n    requestAnimationFrame(() => {\n      if (scrollHeight > maxHeight) {\n        this.element.value = this.element.value.slice(0, -1);\n      }\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nimport TomSelect from \"tom-select/dist/js/tom-select.complete\";\n\n// Connects to data-controller=\"tom-select\"\nexport default class extends Controller {\n  connect() {\n    this.element.classList = \"\";\n    this.tomSelect = new TomSelect(this.element, {});\n\n    this.tomSelect.on(\"item_add\", (value) => {\n      this.dispatch(\"selected\", { detail: { value: value } });\n    });\n  }\n}\n", "// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller or create them with\n// ./bin/rails generate stimulus controllerName\n\nimport { application } from \"./application\"\n\nimport AppointmentRequestFormController from \"./appointment_request_form_controller\"\napplication.register(\"appointment-request-form\", AppointmentRequestFormController)\n\nimport Appointments__Calendar__DatePickerController from \"./appointments/calendar/date_picker_controller\"\napplication.register(\"appointments--calendar--date-picker\", Appointments__Calendar__DatePickerController)\n\nimport Appointments__FormController from \"./appointments/form_controller\"\napplication.register(\"appointments--form\", Appointments__FormController)\n\nimport Appointments__PatientSearchController from \"./appointments/patient_search_controller\"\napplication.register(\"appointments--patient-search\", Appointments__PatientSearchController)\n\nimport ArrayInputController from \"./array_input_controller\"\napplication.register(\"array-input\", ArrayInputController)\n\nimport Billing__AccountReceivablesController from \"./billing/account_receivables_controller\"\napplication.register(\"billing--account-receivables\", Billing__AccountReceivablesController)\n\nimport Billing__PayerFieldController from \"./billing/payer_field_controller\"\napplication.register(\"billing--payer-field\", Billing__PayerFieldController)\n\nimport Claims__TotalCalculatorController from \"./claims/total_calculator_controller\"\napplication.register(\"claims--total-calculator\", Claims__TotalCalculatorController)\n\nimport DenyLinkClickController from \"./deny_link_click_controller\"\napplication.register(\"deny-link-click\", DenyLinkClickController)\n\nimport DocumentsFormController from \"./documents_form_controller\"\napplication.register(\"documents-form\", DocumentsFormController)\n\nimport DynamicSelectController from \"./dynamic_select_controller\"\napplication.register(\"dynamic-select\", DynamicSelectController)\n\nimport InlineSelectEditController from \"./inline_select_edit_controller\"\napplication.register(\"inline-select-edit\", InlineSelectEditController)\n\nimport IntakeDocumentTemplates__ContentController from \"./intake_document_templates/content_controller\"\napplication.register(\"intake-document-templates--content\", IntakeDocumentTemplates__ContentController)\n\nimport IntakeDocumentTemplates__FormController from \"./intake_document_templates/form_controller\"\napplication.register(\"intake-document-templates--form\", IntakeDocumentTemplates__FormController)\n\nimport IntakeDocuments__ConfirmableFieldController from \"./intake_documents/confirmable_field_controller\"\napplication.register(\"intake-documents--confirmable-field\", IntakeDocuments__ConfirmableFieldController)\n\nimport IntakeDocuments__FormController from \"./intake_documents/form_controller\"\napplication.register(\"intake-documents--form\", IntakeDocuments__FormController)\n\nimport IntakeDocuments__PainLocationsController from \"./intake_documents/pain_locations_controller\"\napplication.register(\"intake-documents--pain-locations\", IntakeDocuments__PainLocationsController)\n\nimport MedicalTimeFormatController from \"./medical_time_format_controller\"\napplication.register(\"medical-time-format\", MedicalTimeFormatController)\n\nimport ModalController from \"./modal_controller\"\napplication.register(\"modal\", ModalController)\n\nimport NestedFormController from \"./nested_form_controller\"\napplication.register(\"nested-form\", NestedFormController)\n\nimport PatientCopiesController from \"./patient_copies_controller\"\napplication.register(\"patient-copies\", PatientCopiesController)\n\nimport PatientSearchController from \"./patient_search_controller\"\napplication.register(\"patient-search\", PatientSearchController)\n\nimport PdfFormSignerController from \"./pdf_form_signer_controller\"\napplication.register(\"pdf-form-signer\", PdfFormSignerController)\n\nimport PractitionerInfoController from \"./practitioner_info_controller\"\napplication.register(\"practitioner-info\", PractitionerInfoController)\n\nimport ReportTemplates__DynamicContentController from \"./report_templates/dynamic_content_controller\"\napplication.register(\"report-templates--dynamic-content\", ReportTemplates__DynamicContentController)\n\nimport ReportTemplates__EditorController from \"./report_templates/editor_controller\"\napplication.register(\"report-templates--editor\", ReportTemplates__EditorController)\n\nimport ReportTemplates__FieldFormController from \"./report_templates/field_form_controller\"\napplication.register(\"report-templates--field-form\", ReportTemplates__FieldFormController)\n\nimport ReportTemplates__ReferencedFieldSelectController from \"./report_templates/referenced_field_select_controller\"\napplication.register(\"report-templates--referenced-field-select\", ReportTemplates__ReferencedFieldSelectController)\n\nimport ReportTemplates__ReferencesController from \"./report_templates/references_controller\"\napplication.register(\"report-templates--references\", ReportTemplates__ReferencesController)\n\nimport ReportTemplates__SortableController from \"./report_templates/sortable_controller\"\napplication.register(\"report-templates--sortable\", ReportTemplates__SortableController)\n\nimport Reports__CopySectionController from \"./reports/copy_section_controller\"\napplication.register(\"reports--copy-section\", Reports__CopySectionController)\n\nimport Reports__FinalizeController from \"./reports/finalize_controller\"\napplication.register(\"reports--finalize\", Reports__FinalizeController)\n\nimport ReportsController from \"./reports_controller\"\napplication.register(\"reports\", ReportsController)\n\nimport RevealController from \"./reveal_controller\"\napplication.register(\"reveal\", RevealController)\n\nimport RevealOnInputController from \"./reveal_on_input_controller\"\napplication.register(\"reveal-on-input\", RevealOnInputController)\n\nimport Settings__NewPdfFormFieldController from \"./settings/new_pdf_form_field_controller\"\napplication.register(\"settings--new-pdf-form-field\", Settings__NewPdfFormFieldController)\n\nimport Settings__PdfFormTemplateFieldController from \"./settings/pdf_form_template_field_controller\"\napplication.register(\"settings--pdf-form-template-field\", Settings__PdfFormTemplateFieldController)\n\nimport Settings__Permissions__RowHelperController from \"./settings/permissions/row_helper_controller\"\napplication.register(\"settings--permissions--row-helper\", Settings__Permissions__RowHelperController)\n\nimport SignatureController from \"./signature_controller\"\napplication.register(\"signature\", SignatureController)\n\nimport SignaturePadController from \"./signature_pad_controller\"\napplication.register(\"signature-pad\", SignaturePadController)\n\nimport SignaturePadReceiverController from \"./signature_pad_receiver_controller\"\napplication.register(\"signature-pad-receiver\", SignaturePadReceiverController)\n\nimport SliderValueController from \"./slider_value_controller\"\napplication.register(\"slider-value\", SliderValueController)\n\nimport SmallEditorController from \"./small_editor_controller\"\napplication.register(\"small-editor\", SmallEditorController)\n\nimport SortableController from \"./sortable_controller\"\napplication.register(\"sortable\", SortableController)\n\nimport TextareaLimiterController from \"./textarea_limiter_controller\"\napplication.register(\"textarea-limiter\", TextareaLimiterController)\n\nimport TomSelectController from \"./tom_select_controller\"\napplication.register(\"tom-select\", TomSelectController)\n\nimport WysiwygController from \"./wysiwyg_controller\"\napplication.register(\"wysiwyg\", WysiwygController)\n", "/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nconst NODE_MODE = false;\n\n// Allows minifiers to rename references to globalThis\nconst global = globalThis;\n\n/**\n * Whether the current browser supports `adoptedStyleSheets`.\n */\nexport const supportsAdoptingStyleSheets: boolean =\n  global.ShadowRoot &&\n  (global.ShadyCSS === undefined || global.ShadyCSS.nativeShadow) &&\n  'adoptedStyleSheets' in Document.prototype &&\n  'replace' in CSSStyleSheet.prototype;\n\n/**\n * A CSSResult or native CSSStyleSheet.\n *\n * In browsers that support constructible CSS style sheets, CSSStyleSheet\n * object can be used for styling along side CSSResult from the `css`\n * template tag.\n */\nexport type CSSResultOrNative = CSSResult | CSSStyleSheet;\n\nexport type CSSResultArray = Array<CSSResultOrNative | CSSResultArray>;\n\n/**\n * A single CSSResult, CSSStyleSheet, or an array or nested arrays of those.\n */\nexport type CSSResultGroup = CSSResultOrNative | CSSResultArray;\n\nconst constructionToken = Symbol();\n\nconst cssTagCache = new WeakMap<TemplateStringsArray, CSSStyleSheet>();\n\n/**\n * A container for a string of CSS text, that may be used to create a CSSStyleSheet.\n *\n * CSSResult is the return value of `css`-tagged template literals and\n * `unsafeCSS()`. In order to ensure that CSSResults are only created via the\n * `css` tag and `unsafeCSS()`, CSSResult cannot be constructed directly.\n */\nexport class CSSResult {\n  // This property needs to remain unminified.\n  ['_$cssResult$'] = true;\n  readonly cssText: string;\n  private _styleSheet?: CSSStyleSheet;\n  private _strings: TemplateStringsArray | undefined;\n\n  private constructor(\n    cssText: string,\n    strings: TemplateStringsArray | undefined,\n    safeToken: symbol\n  ) {\n    if (safeToken !== constructionToken) {\n      throw new Error(\n        'CSSResult is not constructable. Use `unsafeCSS` or `css` instead.'\n      );\n    }\n    this.cssText = cssText;\n    this._strings = strings;\n  }\n\n  // This is a getter so that it's lazy. In practice, this means stylesheets\n  // are not created until the first element instance is made.\n  get styleSheet(): CSSStyleSheet | undefined {\n    // If `supportsAdoptingStyleSheets` is true then we assume CSSStyleSheet is\n    // constructable.\n    let styleSheet = this._styleSheet;\n    const strings = this._strings;\n    if (supportsAdoptingStyleSheets && styleSheet === undefined) {\n      const cacheable = strings !== undefined && strings.length === 1;\n      if (cacheable) {\n        styleSheet = cssTagCache.get(strings);\n      }\n      if (styleSheet === undefined) {\n        (this._styleSheet = styleSheet = new CSSStyleSheet()).replaceSync(\n          this.cssText\n        );\n        if (cacheable) {\n          cssTagCache.set(strings, styleSheet);\n        }\n      }\n    }\n    return styleSheet;\n  }\n\n  toString(): string {\n    return this.cssText;\n  }\n}\n\ntype ConstructableCSSResult = CSSResult & {\n  new (\n    cssText: string,\n    strings: TemplateStringsArray | undefined,\n    safeToken: symbol\n  ): CSSResult;\n};\n\nconst textFromCSSResult = (value: CSSResultGroup | number) => {\n  // This property needs to remain unminified.\n  if ((value as CSSResult)['_$cssResult$'] === true) {\n    return (value as CSSResult).cssText;\n  } else if (typeof value === 'number') {\n    return value;\n  } else {\n    throw new Error(\n      `Value passed to 'css' function must be a 'css' function result: ` +\n        `${value}. Use 'unsafeCSS' to pass non-literal values, but take care ` +\n        `to ensure page security.`\n    );\n  }\n};\n\n/**\n * Wrap a value for interpolation in a {@linkcode css} tagged template literal.\n *\n * This is unsafe because untrusted CSS text can be used to phone home\n * or exfiltrate data to an attacker controlled site. Take care to only use\n * this with trusted input.\n */\nexport const unsafeCSS = (value: unknown) =>\n  new (CSSResult as ConstructableCSSResult)(\n    typeof value === 'string' ? value : String(value),\n    undefined,\n    constructionToken\n  );\n\n/**\n * A template literal tag which can be used with LitElement's\n * {@linkcode LitElement.styles} property to set element styles.\n *\n * For security reasons, only literal string values and number may be used in\n * embedded expressions. To incorporate non-literal values {@linkcode unsafeCSS}\n * may be used inside an expression.\n */\nexport const css = (\n  strings: TemplateStringsArray,\n  ...values: (CSSResultGroup | number)[]\n): CSSResult => {\n  const cssText =\n    strings.length === 1\n      ? strings[0]\n      : values.reduce(\n          (acc, v, idx) => acc + textFromCSSResult(v) + strings[idx + 1],\n          strings[0]\n        );\n  return new (CSSResult as ConstructableCSSResult)(\n    cssText,\n    strings,\n    constructionToken\n  );\n};\n\n/**\n * Applies the given styles to a `shadowRoot`. When Shadow DOM is\n * available but `adoptedStyleSheets` is not, styles are appended to the\n * `shadowRoot` to [mimic the native feature](https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot/adoptedStyleSheets).\n * Note, when shimming is used, any styles that are subsequently placed into\n * the shadowRoot should be placed *before* any shimmed adopted styles. This\n * will match spec behavior that gives adopted sheets precedence over styles in\n * shadowRoot.\n */\nexport const adoptStyles = (\n  renderRoot: ShadowRoot,\n  styles: Array<CSSResultOrNative>\n) => {\n  if (supportsAdoptingStyleSheets) {\n    (renderRoot as ShadowRoot).adoptedStyleSheets = styles.map((s) =>\n      s instanceof CSSStyleSheet ? s : s.styleSheet!\n    );\n  } else {\n    for (const s of styles) {\n      const style = document.createElement('style');\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      const nonce = (global as any)['litNonce'];\n      if (nonce !== undefined) {\n        style.setAttribute('nonce', nonce);\n      }\n      style.textContent = (s as CSSResult).cssText;\n      renderRoot.appendChild(style);\n    }\n  }\n};\n\nconst cssResultFromStyleSheet = (sheet: CSSStyleSheet) => {\n  let cssText = '';\n  for (const rule of sheet.cssRules) {\n    cssText += rule.cssText;\n  }\n  return unsafeCSS(cssText);\n};\n\nexport const getCompatibleStyle =\n  supportsAdoptingStyleSheets ||\n  (NODE_MODE && global.CSSStyleSheet === undefined)\n    ? (s: CSSResultOrNative) => s\n    : (s: CSSResultOrNative) =>\n        s instanceof CSSStyleSheet ? cssResultFromStyleSheet(s) : s;\n", "/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\n/**\n * Use this module if you want to create your own base class extending\n * {@link ReactiveElement}.\n * @packageDocumentation\n */\n\nimport {\n  getCompatibleStyle,\n  adoptStyles,\n  CSSResultGroup,\n  CSSResultOrNative,\n} from './css-tag.js';\nimport type {\n  ReactiveController,\n  ReactiveControllerHost,\n} from './reactive-controller.js';\n\n// In the Node build, this import will be injected by Rollup:\n// import {HTMLElement, customElements} from '@lit-labs/ssr-dom-shim';\n\nexport * from './css-tag.js';\nexport type {\n  ReactiveController,\n  ReactiveControllerHost,\n} from './reactive-controller.js';\n\n/**\n * Removes the `readonly` modifier from properties in the union K.\n *\n * This is a safer way to cast a value to a type with a mutable version of a\n * readonly field, than casting to an interface with the field re-declared\n * because it preserves the type of all the fields and warns on typos.\n */\ntype Mutable<T, K extends keyof T> = Omit<T, K> & {\n  -readonly [P in keyof Pick<T, K>]: P extends K ? T[P] : never;\n};\n\n// TODO (justinfagnani): Add `hasOwn` here when we ship ES2022\nconst {\n  is,\n  defineProperty,\n  getOwnPropertyDescriptor,\n  getOwnPropertyNames,\n  getOwnPropertySymbols,\n  getPrototypeOf,\n} = Object;\n\nconst NODE_MODE = false;\n\n// Lets a minifier replace globalThis references with a minified name\nconst global = globalThis;\n\nif (NODE_MODE) {\n  global.customElements ??= customElements;\n}\n\nconst DEV_MODE = true;\n\nlet issueWarning: (code: string, warning: string) => void;\n\nconst trustedTypes = (global as unknown as {trustedTypes?: {emptyScript: ''}})\n  .trustedTypes;\n\n// Temporary workaround for https://crbug.com/993268\n// Currently, any attribute starting with \"on\" is considered to be a\n// TrustedScript source. Such boolean attributes must be set to the equivalent\n// trusted emptyScript value.\nconst emptyStringForBooleanAttribute = trustedTypes\n  ? (trustedTypes.emptyScript as unknown as '')\n  : '';\n\nconst polyfillSupport = DEV_MODE\n  ? global.reactiveElementPolyfillSupportDevMode\n  : global.reactiveElementPolyfillSupport;\n\nif (DEV_MODE) {\n  // Ensure warnings are issued only 1x, even if multiple versions of Lit\n  // are loaded.\n  global.litIssuedWarnings ??= new Set();\n\n  /**\n   * Issue a warning if we haven't already, based either on `code` or `warning`.\n   * Warnings are disabled automatically only by `warning`; disabling via `code`\n   * can be done by users.\n   */\n  issueWarning = (code: string, warning: string) => {\n    warning += ` See https://lit.dev/msg/${code} for more information.`;\n    if (\n      !global.litIssuedWarnings!.has(warning) &&\n      !global.litIssuedWarnings!.has(code)\n    ) {\n      console.warn(warning);\n      global.litIssuedWarnings!.add(warning);\n    }\n  };\n\n  queueMicrotask(() => {\n    issueWarning(\n      'dev-mode',\n      `Lit is in dev mode. Not recommended for production!`\n    );\n\n    // Issue polyfill support warning.\n    if (global.ShadyDOM?.inUse && polyfillSupport === undefined) {\n      issueWarning(\n        'polyfill-support-missing',\n        `Shadow DOM is being polyfilled via \\`ShadyDOM\\` but ` +\n          `the \\`polyfill-support\\` module has not been loaded.`\n      );\n    }\n  });\n}\n\n/**\n * Contains types that are part of the unstable debug API.\n *\n * Everything in this API is not stable and may change or be removed in the future,\n * even on patch releases.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace ReactiveUnstable {\n  /**\n   * When Lit is running in dev mode and `window.emitLitDebugLogEvents` is true,\n   * we will emit 'lit-debug' events to window, with live details about the update and render\n   * lifecycle. These can be useful for writing debug tooling and visualizations.\n   *\n   * Please be aware that running with window.emitLitDebugLogEvents has performance overhead,\n   * making certain operations that are normally very cheap (like a no-op render) much slower,\n   * because we must copy data and dispatch events.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-namespace\n  export namespace DebugLog {\n    export type Entry = Update;\n    export interface Update {\n      kind: 'update';\n    }\n  }\n}\n\ninterface DebugLoggingWindow {\n  // Even in dev mode, we generally don't want to emit these events, as that's\n  // another level of cost, so only emit them when DEV_MODE is true _and_ when\n  // window.emitLitDebugEvents is true.\n  emitLitDebugLogEvents?: boolean;\n}\n\n/**\n * Useful for visualizing and logging insights into what the Lit template system is doing.\n *\n * Compiled out of prod mode builds.\n */\nconst debugLogEvent = DEV_MODE\n  ? (event: ReactiveUnstable.DebugLog.Entry) => {\n      const shouldEmit = (global as unknown as DebugLoggingWindow)\n        .emitLitDebugLogEvents;\n      if (!shouldEmit) {\n        return;\n      }\n      global.dispatchEvent(\n        new CustomEvent<ReactiveUnstable.DebugLog.Entry>('lit-debug', {\n          detail: event,\n        })\n      );\n    }\n  : undefined;\n\n/*\n * When using Closure Compiler, JSCompiler_renameProperty(property, object) is\n * replaced at compile time by the munged name for object[property]. We cannot\n * alias this function, so we have to use a small shim that has the same\n * behavior when not compiling.\n */\n/*@__INLINE__*/\nconst JSCompiler_renameProperty = <P extends PropertyKey>(\n  prop: P,\n  _obj: unknown\n): P => prop;\n\n/**\n * Converts property values to and from attribute values.\n */\nexport interface ComplexAttributeConverter<Type = unknown, TypeHint = unknown> {\n  /**\n   * Called to convert an attribute value to a property\n   * value.\n   */\n  fromAttribute?(value: string | null, type?: TypeHint): Type;\n\n  /**\n   * Called to convert a property value to an attribute\n   * value.\n   *\n   * It returns unknown instead of string, to be compatible with\n   * https://github.com/WICG/trusted-types (and similar efforts).\n   */\n  toAttribute?(value: Type, type?: TypeHint): unknown;\n}\n\ntype AttributeConverter<Type = unknown, TypeHint = unknown> =\n  | ComplexAttributeConverter<Type>\n  | ((value: string | null, type?: TypeHint) => Type);\n\n/**\n * Defines options for a property accessor.\n */\nexport interface PropertyDeclaration<Type = unknown, TypeHint = unknown> {\n  /**\n   * When set to `true`, indicates the property is internal private state. The\n   * property should not be set by users. When using TypeScript, this property\n   * should be marked as `private` or `protected`, and it is also a common\n   * practice to use a leading `_` in the name. The property is not added to\n   * `observedAttributes`.\n   */\n  readonly state?: boolean;\n\n  /**\n   * Indicates how and whether the property becomes an observed attribute.\n   * If the value is `false`, the property is not added to `observedAttributes`.\n   * If true or absent, the lowercased property name is observed (e.g. `fooBar`\n   * becomes `foobar`). If a string, the string value is observed (e.g\n   * `attribute: 'foo-bar'`).\n   */\n  readonly attribute?: boolean | string;\n\n  /**\n   * Indicates the type of the property. This is used only as a hint for the\n   * `converter` to determine how to convert the attribute\n   * to/from a property.\n   */\n  readonly type?: TypeHint;\n\n  /**\n   * Indicates how to convert the attribute to/from a property. If this value\n   * is a function, it is used to convert the attribute value a the property\n   * value. If it's an object, it can have keys for `fromAttribute` and\n   * `toAttribute`. If no `toAttribute` function is provided and\n   * `reflect` is set to `true`, the property value is set directly to the\n   * attribute. A default `converter` is used if none is provided; it supports\n   * `Boolean`, `String`, `Number`, `Object`, and `Array`. Note,\n   * when a property changes and the converter is used to update the attribute,\n   * the property is never updated again as a result of the attribute changing,\n   * and vice versa.\n   */\n  readonly converter?: AttributeConverter<Type, TypeHint>;\n\n  /**\n   * Indicates if the property should reflect to an attribute.\n   * If `true`, when the property is set, the attribute is set using the\n   * attribute name determined according to the rules for the `attribute`\n   * property option and the value of the property converted using the rules\n   * from the `converter` property option.\n   */\n  readonly reflect?: boolean;\n\n  /**\n   * A function that indicates if a property should be considered changed when\n   * it is set. The function should take the `newValue` and `oldValue` and\n   * return `true` if an update should be requested.\n   */\n  hasChanged?(value: Type, oldValue: Type): boolean;\n\n  /**\n   * Indicates whether an accessor will be created for this property. By\n   * default, an accessor will be generated for this property that requests an\n   * update when set. If this flag is `true`, no accessor will be created, and\n   * it will be the user's responsibility to call\n   * `this.requestUpdate(propertyName, oldValue)` to request an update when\n   * the property changes.\n   */\n  readonly noAccessor?: boolean;\n\n  /**\n   * Whether this property is wrapping accessors. This is set by `@property`\n   * to control the initial value change and reflection logic.\n   *\n   * @internal\n   */\n  wrapped?: boolean;\n\n  /**\n   * When `true`, uses the initial value of the property as the default value,\n   * which changes how attributes are handled:\n   *  - The initial value does *not* reflect, even if the `reflect` option is `true`.\n   *    Subsequent changes to the property will reflect, even if they are equal to the\n   *     default value.\n   *  - When the attribute is removed, the property is set to the default value\n   *  - The initial value will not trigger an old value in the `changedProperties` map\n   *    argument to update lifecycle methods.\n   *\n   * When set, properties must be initialized, either with a field initializer, or an\n   * assignment in the constructor. Not initializing the property may lead to\n   * improper handling of subsequent property assignments.\n   *\n   * While this behavior is opt-in, most properties that reflect to attributes should\n   * use `useDefault: true` so that their initial values do not reflect.\n   */\n  useDefault?: boolean;\n}\n\n/**\n * Map of properties to PropertyDeclaration options. For each property an\n * accessor is made, and the property is processed according to the\n * PropertyDeclaration options.\n */\nexport interface PropertyDeclarations {\n  readonly [key: string]: PropertyDeclaration;\n}\n\ntype PropertyDeclarationMap = Map<PropertyKey, PropertyDeclaration>;\n\ntype AttributeMap = Map<string, PropertyKey>;\n\n/**\n * A Map of property keys to values.\n *\n * Takes an optional type parameter T, which when specified as a non-any,\n * non-unknown type, will make the Map more strongly-typed, associating the map\n * keys with their corresponding value type on T.\n *\n * Use `PropertyValues<this>` when overriding ReactiveElement.update() and\n * other lifecycle methods in order to get stronger type-checking on keys\n * and values.\n */\n// This type is conditional so that if the parameter T is not specified, or\n// is `any`, the type will include `Map<PropertyKey, unknown>`. Since T is not\n// given in the uses of PropertyValues in this file, all uses here fallback to\n// meaning `Map<PropertyKey, unknown>`, but if a developer uses\n// `PropertyValues<this>` (or any other value for T) they will get a\n// strongly-typed Map type.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PropertyValues<T = any> = T extends object\n  ? PropertyValueMap<T>\n  : Map<PropertyKey, unknown>;\n\n/**\n * Do not use, instead prefer {@linkcode PropertyValues}.\n */\n// This type must be exported such that JavaScript generated by the Google\n// Closure Compiler can import a type reference.\nexport interface PropertyValueMap<T> extends Map<PropertyKey, unknown> {\n  get<K extends keyof T>(k: K): T[K] | undefined;\n  set<K extends keyof T>(key: K, value: T[K]): this;\n  has<K extends keyof T>(k: K): boolean;\n  delete<K extends keyof T>(k: K): boolean;\n}\n\nexport const defaultConverter: ComplexAttributeConverter = {\n  toAttribute(value: unknown, type?: unknown): unknown {\n    switch (type) {\n      case Boolean:\n        value = value ? emptyStringForBooleanAttribute : null;\n        break;\n      case Object:\n      case Array:\n        // if the value is `null` or `undefined` pass this through\n        // to allow removing/no change behavior.\n        value = value == null ? value : JSON.stringify(value);\n        break;\n    }\n    return value;\n  },\n\n  fromAttribute(value: string | null, type?: unknown) {\n    let fromValue: unknown = value;\n    switch (type) {\n      case Boolean:\n        fromValue = value !== null;\n        break;\n      case Number:\n        fromValue = value === null ? null : Number(value);\n        break;\n      case Object:\n      case Array:\n        // Do *not* generate exception when invalid JSON is set as elements\n        // don't normally complain on being mis-configured.\n        // TODO(sorvell): Do generate exception in *dev mode*.\n        try {\n          // Assert to adhere to Bazel's \"must type assert JSON parse\" rule.\n          fromValue = JSON.parse(value!) as unknown;\n        } catch (e) {\n          fromValue = null;\n        }\n        break;\n    }\n    return fromValue;\n  },\n};\n\nexport interface HasChanged {\n  (value: unknown, old: unknown): boolean;\n}\n\n/**\n * Change function that returns true if `value` is different from `oldValue`.\n * This method is used as the default for a property's `hasChanged` function.\n */\nexport const notEqual: HasChanged = (value: unknown, old: unknown): boolean =>\n  !is(value, old);\n\nconst defaultPropertyDeclaration: PropertyDeclaration = {\n  attribute: true,\n  type: String,\n  converter: defaultConverter,\n  reflect: false,\n  useDefault: false,\n  hasChanged: notEqual,\n};\n\n/**\n * A string representing one of the supported dev mode warning categories.\n */\nexport type WarningKind =\n  | 'change-in-update'\n  | 'migration'\n  | 'async-perform-update';\n\nexport type Initializer = (element: ReactiveElement) => void;\n\n// Temporary, until google3 is on TypeScript 5.2\ndeclare global {\n  interface SymbolConstructor {\n    readonly metadata: unique symbol;\n  }\n}\n\n// Ensure metadata is enabled. TypeScript does not polyfill\n// Symbol.metadata, so we must ensure that it exists.\n(Symbol as {metadata: symbol}).metadata ??= Symbol('metadata');\n\ndeclare global {\n  // This is public global API, do not change!\n  // eslint-disable-next-line no-var\n  var litPropertyMetadata: WeakMap<\n    object,\n    Map<PropertyKey, PropertyDeclaration>\n  >;\n}\n\n// Map from a class's metadata object to property options\n// Note that we must use nullish-coalescing assignment so that we only use one\n// map even if we load multiple version of this module.\nglobal.litPropertyMetadata ??= new WeakMap<\n  object,\n  Map<PropertyKey, PropertyDeclaration>\n>();\n\n/**\n * Base element class which manages element properties and attributes. When\n * properties change, the `update` method is asynchronously called. This method\n * should be supplied by subclasses to render updates as desired.\n * @noInheritDoc\n */\nexport abstract class ReactiveElement\n  // In the Node build, this `extends` clause will be substituted with\n  // `(globalThis.HTMLElement ?? HTMLElement)`.\n  //\n  // This way, we will first prefer any global `HTMLElement` polyfill that the\n  // user has assigned, and then fall back to the `HTMLElement` shim which has\n  // been imported (see note at the top of this file about how this import is\n  // generated by Rollup). Note that the `HTMLElement` variable has been\n  // shadowed by this import, so it no longer refers to the global.\n  extends HTMLElement\n  implements ReactiveControllerHost\n{\n  // Note: these are patched in only in DEV_MODE.\n  /**\n   * Read or set all the enabled warning categories for this class.\n   *\n   * This property is only used in development builds.\n   *\n   * @nocollapse\n   * @category dev-mode\n   */\n  static enabledWarnings?: WarningKind[];\n\n  /**\n   * Enable the given warning category for this class.\n   *\n   * This method only exists in development builds, so it should be accessed\n   * with a guard like:\n   *\n   * ```ts\n   * // Enable for all ReactiveElement subclasses\n   * ReactiveElement.enableWarning?.('migration');\n   *\n   * // Enable for only MyElement and subclasses\n   * MyElement.enableWarning?.('migration');\n   * ```\n   *\n   * @nocollapse\n   * @category dev-mode\n   */\n  static enableWarning?: (warningKind: WarningKind) => void;\n\n  /**\n   * Disable the given warning category for this class.\n   *\n   * This method only exists in development builds, so it should be accessed\n   * with a guard like:\n   *\n   * ```ts\n   * // Disable for all ReactiveElement subclasses\n   * ReactiveElement.disableWarning?.('migration');\n   *\n   * // Disable for only MyElement and subclasses\n   * MyElement.disableWarning?.('migration');\n   * ```\n   *\n   * @nocollapse\n   * @category dev-mode\n   */\n  static disableWarning?: (warningKind: WarningKind) => void;\n\n  /**\n   * Adds an initializer function to the class that is called during instance\n   * construction.\n   *\n   * This is useful for code that runs against a `ReactiveElement`\n   * subclass, such as a decorator, that needs to do work for each\n   * instance, such as setting up a `ReactiveController`.\n   *\n   * ```ts\n   * const myDecorator = (target: typeof ReactiveElement, key: string) => {\n   *   target.addInitializer((instance: ReactiveElement) => {\n   *     // This is run during construction of the element\n   *     new MyController(instance);\n   *   });\n   * }\n   * ```\n   *\n   * Decorating a field will then cause each instance to run an initializer\n   * that adds a controller:\n   *\n   * ```ts\n   * class MyElement extends LitElement {\n   *   @myDecorator foo;\n   * }\n   * ```\n   *\n   * Initializers are stored per-constructor. Adding an initializer to a\n   * subclass does not add it to a superclass. Since initializers are run in\n   * constructors, initializers will run in order of the class hierarchy,\n   * starting with superclasses and progressing to the instance's class.\n   *\n   * @nocollapse\n   */\n  static addInitializer(initializer: Initializer) {\n    this.__prepare();\n    (this._initializers ??= []).push(initializer);\n  }\n\n  static _initializers?: Initializer[];\n\n  /*\n   * Due to closure compiler ES6 compilation bugs, @nocollapse is required on\n   * all static methods and properties with initializers.  Reference:\n   * - https://github.com/google/closure-compiler/issues/1776\n   */\n\n  /**\n   * Maps attribute names to properties; for example `foobar` attribute to\n   * `fooBar` property. Created lazily on user subclasses when finalizing the\n   * class.\n   * @nocollapse\n   */\n  private static __attributeToPropertyMap: AttributeMap;\n\n  /**\n   * Marks class as having been finalized, which includes creating properties\n   * from `static properties`, but does *not* include all properties created\n   * from decorators.\n   * @nocollapse\n   */\n  protected static finalized: true | undefined;\n\n  /**\n   * Memoized list of all element properties, including any superclass\n   * properties. Created lazily on user subclasses when finalizing the class.\n   *\n   * @nocollapse\n   * @category properties\n   */\n  static elementProperties: PropertyDeclarationMap;\n\n  /**\n   * User-supplied object that maps property names to `PropertyDeclaration`\n   * objects containing options for configuring reactive properties. When\n   * a reactive property is set the element will update and render.\n   *\n   * By default properties are public fields, and as such, they should be\n   * considered as primarily settable by element users, either via attribute or\n   * the property itself.\n   *\n   * Generally, properties that are changed by the element should be private or\n   * protected fields and should use the `state: true` option. Properties\n   * marked as `state` do not reflect from the corresponding attribute\n   *\n   * However, sometimes element code does need to set a public property. This\n   * should typically only be done in response to user interaction, and an event\n   * should be fired informing the user; for example, a checkbox sets its\n   * `checked` property when clicked and fires a `changed` event. Mutating\n   * public properties should typically not be done for non-primitive (object or\n   * array) properties. In other cases when an element needs to manage state, a\n   * private property set with the `state: true` option should be used. When\n   * needed, state properties can be initialized via public properties to\n   * facilitate complex interactions.\n   * @nocollapse\n   * @category properties\n   */\n  static properties: PropertyDeclarations;\n\n  /**\n   * Memoized list of all element styles.\n   * Created lazily on user subclasses when finalizing the class.\n   * @nocollapse\n   * @category styles\n   */\n  static elementStyles: Array<CSSResultOrNative> = [];\n\n  /**\n   * Array of styles to apply to the element. The styles should be defined\n   * using the {@linkcode css} tag function, via constructible stylesheets, or\n   * imported from native CSS module scripts.\n   *\n   * Note on Content Security Policy:\n   *\n   * Element styles are implemented with `<style>` tags when the browser doesn't\n   * support adopted StyleSheets. To use such `<style>` tags with the style-src\n   * CSP directive, the style-src value must either include 'unsafe-inline' or\n   * `nonce-<base64-value>` with `<base64-value>` replaced be a server-generated\n   * nonce.\n   *\n   * To provide a nonce to use on generated `<style>` elements, set\n   * `window.litNonce` to a server-generated nonce in your page's HTML, before\n   * loading application code:\n   *\n   * ```html\n   * <script>\n   *   // Generated and unique per request:\n   *   window.litNonce = 'a1b2c3d4';\n   * </script>\n   * ```\n   * @nocollapse\n   * @category styles\n   */\n  static styles?: CSSResultGroup;\n\n  /**\n   * Returns a list of attributes corresponding to the registered properties.\n   * @nocollapse\n   * @category attributes\n   */\n  static get observedAttributes() {\n    // Ensure we've created all properties\n    this.finalize();\n    // this.__attributeToPropertyMap is only undefined after finalize() in\n    // ReactiveElement itself. ReactiveElement.observedAttributes is only\n    // accessed with ReactiveElement as the receiver when a subclass or mixin\n    // calls super.observedAttributes\n    return (\n      this.__attributeToPropertyMap && [...this.__attributeToPropertyMap.keys()]\n    );\n  }\n\n  private __instanceProperties?: PropertyValues = undefined;\n\n  /**\n   * Creates a property accessor on the element prototype if one does not exist\n   * and stores a {@linkcode PropertyDeclaration} for the property with the\n   * given options. The property setter calls the property's `hasChanged`\n   * property option or uses a strict identity check to determine whether or not\n   * to request an update.\n   *\n   * This method may be overridden to customize properties; however,\n   * when doing so, it's important to call `super.createProperty` to ensure\n   * the property is setup correctly. This method calls\n   * `getPropertyDescriptor` internally to get a descriptor to install.\n   * To customize what properties do when they are get or set, override\n   * `getPropertyDescriptor`. To customize the options for a property,\n   * implement `createProperty` like this:\n   *\n   * ```ts\n   * static createProperty(name, options) {\n   *   options = Object.assign(options, {myOption: true});\n   *   super.createProperty(name, options);\n   * }\n   * ```\n   *\n   * @nocollapse\n   * @category properties\n   */\n  static createProperty(\n    name: PropertyKey,\n    options: PropertyDeclaration = defaultPropertyDeclaration\n  ) {\n    // If this is a state property, force the attribute to false.\n    if (options.state) {\n      (options as Mutable<PropertyDeclaration, 'attribute'>).attribute = false;\n    }\n    this.__prepare();\n    // Whether this property is wrapping accessors.\n    // Helps control the initial value change and reflection logic.\n    if (this.prototype.hasOwnProperty(name)) {\n      options = Object.create(options);\n      options.wrapped = true;\n    }\n    this.elementProperties.set(name, options);\n    if (!options.noAccessor) {\n      const key = DEV_MODE\n        ? // Use Symbol.for in dev mode to make it easier to maintain state\n          // when doing HMR.\n          Symbol.for(`${String(name)} (@property() cache)`)\n        : Symbol();\n      const descriptor = this.getPropertyDescriptor(name, key, options);\n      if (descriptor !== undefined) {\n        defineProperty(this.prototype, name, descriptor);\n      }\n    }\n  }\n\n  /**\n   * Returns a property descriptor to be defined on the given named property.\n   * If no descriptor is returned, the property will not become an accessor.\n   * For example,\n   *\n   * ```ts\n   * class MyElement extends LitElement {\n   *   static getPropertyDescriptor(name, key, options) {\n   *     const defaultDescriptor =\n   *         super.getPropertyDescriptor(name, key, options);\n   *     const setter = defaultDescriptor.set;\n   *     return {\n   *       get: defaultDescriptor.get,\n   *       set(value) {\n   *         setter.call(this, value);\n   *         // custom action.\n   *       },\n   *       configurable: true,\n   *       enumerable: true\n   *     }\n   *   }\n   * }\n   * ```\n   *\n   * @nocollapse\n   * @category properties\n   */\n  protected static getPropertyDescriptor(\n    name: PropertyKey,\n    key: string | symbol,\n    options: PropertyDeclaration\n  ): PropertyDescriptor | undefined {\n    const {get, set} = getOwnPropertyDescriptor(this.prototype, name) ?? {\n      get(this: ReactiveElement) {\n        return this[key as keyof typeof this];\n      },\n      set(this: ReactiveElement, v: unknown) {\n        (this as unknown as Record<string | symbol, unknown>)[key] = v;\n      },\n    };\n    if (DEV_MODE && get == null) {\n      if ('value' in (getOwnPropertyDescriptor(this.prototype, name) ?? {})) {\n        throw new Error(\n          `Field ${JSON.stringify(String(name))} on ` +\n            `${this.name} was declared as a reactive property ` +\n            `but it's actually declared as a value on the prototype. ` +\n            `Usually this is due to using @property or @state on a method.`\n        );\n      }\n      issueWarning(\n        'reactive-property-without-getter',\n        `Field ${JSON.stringify(String(name))} on ` +\n          `${this.name} was declared as a reactive property ` +\n          `but it does not have a getter. This will be an error in a ` +\n          `future version of Lit.`\n      );\n    }\n    return {\n      get,\n      set(this: ReactiveElement, value: unknown) {\n        const oldValue = get?.call(this);\n        set?.call(this, value);\n        this.requestUpdate(name, oldValue, options);\n      },\n      configurable: true,\n      enumerable: true,\n    };\n  }\n\n  /**\n   * Returns the property options associated with the given property.\n   * These options are defined with a `PropertyDeclaration` via the `properties`\n   * object or the `@property` decorator and are registered in\n   * `createProperty(...)`.\n   *\n   * Note, this method should be considered \"final\" and not overridden. To\n   * customize the options for a given property, override\n   * {@linkcode createProperty}.\n   *\n   * @nocollapse\n   * @final\n   * @category properties\n   */\n  static getPropertyOptions(name: PropertyKey) {\n    return this.elementProperties.get(name) ?? defaultPropertyDeclaration;\n  }\n\n  // Temporary, until google3 is on TypeScript 5.2\n  declare static [Symbol.metadata]: object & Record<PropertyKey, unknown>;\n\n  /**\n   * Initializes static own properties of the class used in bookkeeping\n   * for element properties, initializers, etc.\n   *\n   * Can be called multiple times by code that needs to ensure these\n   * properties exist before using them.\n   *\n   * This method ensures the superclass is finalized so that inherited\n   * property metadata can be copied down.\n   * @nocollapse\n   */\n  private static __prepare() {\n    if (\n      this.hasOwnProperty(JSCompiler_renameProperty('elementProperties', this))\n    ) {\n      // Already prepared\n      return;\n    }\n    // Finalize any superclasses\n    const superCtor = getPrototypeOf(this) as typeof ReactiveElement;\n    superCtor.finalize();\n\n    // Create own set of initializers for this class if any exist on the\n    // superclass and copy them down. Note, for a small perf boost, avoid\n    // creating initializers unless needed.\n    if (superCtor._initializers !== undefined) {\n      this._initializers = [...superCtor._initializers];\n    }\n    // Initialize elementProperties from the superclass\n    this.elementProperties = new Map(superCtor.elementProperties);\n  }\n\n  /**\n   * Finishes setting up the class so that it's ready to be registered\n   * as a custom element and instantiated.\n   *\n   * This method is called by the ReactiveElement.observedAttributes getter.\n   * If you override the observedAttributes getter, you must either call\n   * super.observedAttributes to trigger finalization, or call finalize()\n   * yourself.\n   *\n   * @nocollapse\n   */\n  protected static finalize() {\n    if (this.hasOwnProperty(JSCompiler_renameProperty('finalized', this))) {\n      return;\n    }\n    this.finalized = true;\n    this.__prepare();\n\n    // Create properties from the static properties block:\n    if (this.hasOwnProperty(JSCompiler_renameProperty('properties', this))) {\n      const props = this.properties;\n      const propKeys = [\n        ...getOwnPropertyNames(props),\n        ...getOwnPropertySymbols(props),\n      ] as Array<keyof typeof props>;\n      for (const p of propKeys) {\n        this.createProperty(p, props[p]);\n      }\n    }\n\n    // Create properties from standard decorator metadata:\n    const metadata = this[Symbol.metadata];\n    if (metadata !== null) {\n      const properties = litPropertyMetadata.get(metadata);\n      if (properties !== undefined) {\n        for (const [p, options] of properties) {\n          this.elementProperties.set(p, options);\n        }\n      }\n    }\n\n    // Create the attribute-to-property map\n    this.__attributeToPropertyMap = new Map();\n    for (const [p, options] of this.elementProperties) {\n      const attr = this.__attributeNameForProperty(p, options);\n      if (attr !== undefined) {\n        this.__attributeToPropertyMap.set(attr, p);\n      }\n    }\n\n    this.elementStyles = this.finalizeStyles(this.styles);\n\n    if (DEV_MODE) {\n      if (this.hasOwnProperty('createProperty')) {\n        issueWarning(\n          'no-override-create-property',\n          'Overriding ReactiveElement.createProperty() is deprecated. ' +\n            'The override will not be called with standard decorators'\n        );\n      }\n      if (this.hasOwnProperty('getPropertyDescriptor')) {\n        issueWarning(\n          'no-override-get-property-descriptor',\n          'Overriding ReactiveElement.getPropertyDescriptor() is deprecated. ' +\n            'The override will not be called with standard decorators'\n        );\n      }\n    }\n  }\n\n  /**\n   * Options used when calling `attachShadow`. Set this property to customize\n   * the options for the shadowRoot; for example, to create a closed\n   * shadowRoot: `{mode: 'closed'}`.\n   *\n   * Note, these options are used in `createRenderRoot`. If this method\n   * is customized, options should be respected if possible.\n   * @nocollapse\n   * @category rendering\n   */\n  static shadowRootOptions: ShadowRootInit = {mode: 'open'};\n\n  /**\n   * Takes the styles the user supplied via the `static styles` property and\n   * returns the array of styles to apply to the element.\n   * Override this method to integrate into a style management system.\n   *\n   * Styles are deduplicated preserving the _last_ instance in the list. This\n   * is a performance optimization to avoid duplicated styles that can occur\n   * especially when composing via subclassing. The last item is kept to try\n   * to preserve the cascade order with the assumption that it's most important\n   * that last added styles override previous styles.\n   *\n   * @nocollapse\n   * @category styles\n   */\n  protected static finalizeStyles(\n    styles?: CSSResultGroup\n  ): Array<CSSResultOrNative> {\n    const elementStyles = [];\n    if (Array.isArray(styles)) {\n      // Dedupe the flattened array in reverse order to preserve the last items.\n      // Casting to Array<unknown> works around TS error that\n      // appears to come from trying to flatten a type CSSResultArray.\n      const set = new Set((styles as Array<unknown>).flat(Infinity).reverse());\n      // Then preserve original order by adding the set items in reverse order.\n      for (const s of set) {\n        elementStyles.unshift(getCompatibleStyle(s as CSSResultOrNative));\n      }\n    } else if (styles !== undefined) {\n      elementStyles.push(getCompatibleStyle(styles));\n    }\n    return elementStyles;\n  }\n\n  /**\n   * Node or ShadowRoot into which element DOM should be rendered. Defaults\n   * to an open shadowRoot.\n   * @category rendering\n   */\n  readonly renderRoot!: HTMLElement | DocumentFragment;\n\n  /**\n   * Returns the property name for the given attribute `name`.\n   * @nocollapse\n   */\n  private static __attributeNameForProperty(\n    name: PropertyKey,\n    options: PropertyDeclaration\n  ) {\n    const attribute = options.attribute;\n    return attribute === false\n      ? undefined\n      : typeof attribute === 'string'\n        ? attribute\n        : typeof name === 'string'\n          ? name.toLowerCase()\n          : undefined;\n  }\n\n  // Initialize to an unresolved Promise so we can make sure the element has\n  // connected before first update.\n  private __updatePromise!: Promise<boolean>;\n\n  /**\n   * True if there is a pending update as a result of calling `requestUpdate()`.\n   * Should only be read.\n   * @category updates\n   */\n  isUpdatePending = false;\n\n  /**\n   * Is set to `true` after the first update. The element code cannot assume\n   * that `renderRoot` exists before the element `hasUpdated`.\n   * @category updates\n   */\n  hasUpdated = false;\n\n  /**\n   * Map with keys for any properties that have changed since the last\n   * update cycle with previous values.\n   *\n   * @internal\n   */\n  _$changedProperties!: PropertyValues;\n\n  /**\n   * Records property default values when the\n   * `useDefault` option is used.\n   */\n  private __defaultValues?: Map<PropertyKey, unknown>;\n\n  /**\n   * Properties that should be reflected when updated.\n   */\n  private __reflectingProperties?: Set<PropertyKey>;\n\n  /**\n   * Name of currently reflecting property\n   */\n  private __reflectingProperty: PropertyKey | null = null;\n\n  /**\n   * Set of controllers.\n   */\n  private __controllers?: Set<ReactiveController>;\n\n  constructor() {\n    super();\n    this.__initialize();\n  }\n\n  /**\n   * Internal only override point for customizing work done when elements\n   * are constructed.\n   */\n  private __initialize() {\n    this.__updatePromise = new Promise<boolean>(\n      (res) => (this.enableUpdating = res)\n    );\n    this._$changedProperties = new Map();\n    // This enqueues a microtask that must run before the first update, so it\n    // must be called before requestUpdate()\n    this.__saveInstanceProperties();\n    // ensures first update will be caught by an early access of\n    // `updateComplete`\n    this.requestUpdate();\n    (this.constructor as typeof ReactiveElement)._initializers?.forEach((i) =>\n      i(this)\n    );\n  }\n\n  /**\n   * Registers a `ReactiveController` to participate in the element's reactive\n   * update cycle. The element automatically calls into any registered\n   * controllers during its lifecycle callbacks.\n   *\n   * If the element is connected when `addController()` is called, the\n   * controller's `hostConnected()` callback will be immediately called.\n   * @category controllers\n   */\n  addController(controller: ReactiveController) {\n    (this.__controllers ??= new Set()).add(controller);\n    // If a controller is added after the element has been connected,\n    // call hostConnected. Note, re-using existence of `renderRoot` here\n    // (which is set in connectedCallback) to avoid the need to track a\n    // first connected state.\n    if (this.renderRoot !== undefined && this.isConnected) {\n      controller.hostConnected?.();\n    }\n  }\n\n  /**\n   * Removes a `ReactiveController` from the element.\n   * @category controllers\n   */\n  removeController(controller: ReactiveController) {\n    this.__controllers?.delete(controller);\n  }\n\n  /**\n   * Fixes any properties set on the instance before upgrade time.\n   * Otherwise these would shadow the accessor and break these properties.\n   * The properties are stored in a Map which is played back after the\n   * constructor runs.\n   */\n  private __saveInstanceProperties() {\n    const instanceProperties = new Map<PropertyKey, unknown>();\n    const elementProperties = (this.constructor as typeof ReactiveElement)\n      .elementProperties;\n    for (const p of elementProperties.keys() as IterableIterator<keyof this>) {\n      if (this.hasOwnProperty(p)) {\n        instanceProperties.set(p, this[p]);\n        delete this[p];\n      }\n    }\n    if (instanceProperties.size > 0) {\n      this.__instanceProperties = instanceProperties;\n    }\n  }\n\n  /**\n   * Returns the node into which the element should render and by default\n   * creates and returns an open shadowRoot. Implement to customize where the\n   * element's DOM is rendered. For example, to render into the element's\n   * childNodes, return `this`.\n   *\n   * @return Returns a node into which to render.\n   * @category rendering\n   */\n  protected createRenderRoot(): HTMLElement | DocumentFragment {\n    const renderRoot =\n      this.shadowRoot ??\n      this.attachShadow(\n        (this.constructor as typeof ReactiveElement).shadowRootOptions\n      );\n    adoptStyles(\n      renderRoot,\n      (this.constructor as typeof ReactiveElement).elementStyles\n    );\n    return renderRoot;\n  }\n\n  /**\n   * On first connection, creates the element's renderRoot, sets up\n   * element styling, and enables updating.\n   * @category lifecycle\n   */\n  connectedCallback() {\n    // Create renderRoot before controllers `hostConnected`\n    (this as Mutable<typeof this, 'renderRoot'>).renderRoot ??=\n      this.createRenderRoot();\n    this.enableUpdating(true);\n    this.__controllers?.forEach((c) => c.hostConnected?.());\n  }\n\n  /**\n   * Note, this method should be considered final and not overridden. It is\n   * overridden on the element instance with a function that triggers the first\n   * update.\n   * @category updates\n   */\n  protected enableUpdating(_requestedUpdate: boolean) {}\n\n  /**\n   * Allows for `super.disconnectedCallback()` in extensions while\n   * reserving the possibility of making non-breaking feature additions\n   * when disconnecting at some point in the future.\n   * @category lifecycle\n   */\n  disconnectedCallback() {\n    this.__controllers?.forEach((c) => c.hostDisconnected?.());\n  }\n\n  /**\n   * Synchronizes property values when attributes change.\n   *\n   * Specifically, when an attribute is set, the corresponding property is set.\n   * You should rarely need to implement this callback. If this method is\n   * overridden, `super.attributeChangedCallback(name, _old, value)` must be\n   * called.\n   *\n   * See [responding to attribute changes](https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#responding_to_attribute_changes)\n   * on MDN for more information about the `attributeChangedCallback`.\n   * @category attributes\n   */\n  attributeChangedCallback(\n    name: string,\n    _old: string | null,\n    value: string | null\n  ) {\n    this._$attributeToProperty(name, value);\n  }\n\n  private __propertyToAttribute(name: PropertyKey, value: unknown) {\n    const elemProperties: PropertyDeclarationMap = (\n      this.constructor as typeof ReactiveElement\n    ).elementProperties;\n    const options = elemProperties.get(name)!;\n    const attr = (\n      this.constructor as typeof ReactiveElement\n    ).__attributeNameForProperty(name, options);\n    if (attr !== undefined && options.reflect === true) {\n      const converter =\n        (options.converter as ComplexAttributeConverter)?.toAttribute !==\n        undefined\n          ? (options.converter as ComplexAttributeConverter)\n          : defaultConverter;\n      const attrValue = converter.toAttribute!(value, options.type);\n      if (\n        DEV_MODE &&\n        (this.constructor as typeof ReactiveElement).enabledWarnings!.includes(\n          'migration'\n        ) &&\n        attrValue === undefined\n      ) {\n        issueWarning(\n          'undefined-attribute-value',\n          `The attribute value for the ${name as string} property is ` +\n            `undefined on element ${this.localName}. The attribute will be ` +\n            `removed, but in the previous version of \\`ReactiveElement\\`, ` +\n            `the attribute would not have changed.`\n        );\n      }\n      // Track if the property is being reflected to avoid\n      // setting the property again via `attributeChangedCallback`. Note:\n      // 1. this takes advantage of the fact that the callback is synchronous.\n      // 2. will behave incorrectly if multiple attributes are in the reaction\n      // stack at time of calling. However, since we process attributes\n      // in `update` this should not be possible (or an extreme corner case\n      // that we'd like to discover).\n      // mark state reflecting\n      this.__reflectingProperty = name;\n      if (attrValue == null) {\n        this.removeAttribute(attr);\n      } else {\n        this.setAttribute(attr, attrValue as string);\n      }\n      // mark state not reflecting\n      this.__reflectingProperty = null;\n    }\n  }\n\n  /** @internal */\n  _$attributeToProperty(name: string, value: string | null) {\n    const ctor = this.constructor as typeof ReactiveElement;\n    // Note, hint this as an `AttributeMap` so closure clearly understands\n    // the type; it has issues with tracking types through statics\n    const propName = (ctor.__attributeToPropertyMap as AttributeMap).get(name);\n    // Use tracking info to avoid reflecting a property value to an attribute\n    // if it was just set because the attribute changed.\n    if (propName !== undefined && this.__reflectingProperty !== propName) {\n      const options = ctor.getPropertyOptions(propName);\n      const converter =\n        typeof options.converter === 'function'\n          ? {fromAttribute: options.converter}\n          : options.converter?.fromAttribute !== undefined\n            ? options.converter\n            : defaultConverter;\n      // mark state reflecting\n      this.__reflectingProperty = propName;\n      const convertedValue = converter.fromAttribute!(value, options.type);\n      this[propName as keyof this] =\n        convertedValue ??\n        this.__defaultValues?.get(propName) ??\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        (convertedValue as any);\n      // mark state not reflecting\n      this.__reflectingProperty = null;\n    }\n  }\n\n  /**\n   * Requests an update which is processed asynchronously. This should be called\n   * when an element should update based on some state not triggered by setting\n   * a reactive property. In this case, pass no arguments. It should also be\n   * called when manually implementing a property setter. In this case, pass the\n   * property `name` and `oldValue` to ensure that any configured property\n   * options are honored.\n   *\n   * @param name name of requesting property\n   * @param oldValue old value of requesting property\n   * @param options property options to use instead of the previously\n   *     configured options\n   * @category updates\n   */\n  requestUpdate(\n    name?: PropertyKey,\n    oldValue?: unknown,\n    options?: PropertyDeclaration\n  ): void {\n    // If we have a property key, perform property update steps.\n    if (name !== undefined) {\n      if (DEV_MODE && (name as unknown) instanceof Event) {\n        issueWarning(\n          ``,\n          `The requestUpdate() method was called with an Event as the property name. This is probably a mistake caused by binding this.requestUpdate as an event listener. Instead bind a function that will call it with no arguments: () => this.requestUpdate()`\n        );\n      }\n      const ctor = this.constructor as typeof ReactiveElement;\n      const newValue = this[name as keyof this];\n      options ??= ctor.getPropertyOptions(name);\n      const changed =\n        (options.hasChanged ?? notEqual)(newValue, oldValue) ||\n        // When there is no change, check a corner case that can occur when\n        // 1. there's a initial value which was not reflected\n        // 2. the property is subsequently set to this value.\n        // For example, `prop: {useDefault: true, reflect: true}`\n        // and el.prop = 'foo'. This should be considered a change if the\n        // attribute is not set because we will now reflect the property to the attribute.\n        (options.useDefault &&\n          options.reflect &&\n          newValue === this.__defaultValues?.get(name) &&\n          !this.hasAttribute(ctor.__attributeNameForProperty(name, options)!));\n      if (changed) {\n        this._$changeProperty(name, oldValue, options);\n      } else {\n        // Abort the request if the property should not be considered changed.\n        return;\n      }\n    }\n    if (this.isUpdatePending === false) {\n      this.__updatePromise = this.__enqueueUpdate();\n    }\n  }\n\n  /**\n   * @internal\n   */\n  _$changeProperty(\n    name: PropertyKey,\n    oldValue: unknown,\n    {useDefault, reflect, wrapped}: PropertyDeclaration,\n    initializeValue?: unknown\n  ) {\n    // Record default value when useDefault is used. This allows us to\n    // restore this value when the attribute is removed.\n    if (useDefault && !(this.__defaultValues ??= new Map()).has(name)) {\n      this.__defaultValues.set(\n        name,\n        initializeValue ?? oldValue ?? this[name as keyof this]\n      );\n      // if this is not wrapping an accessor, it must be an initial setting\n      // and in this case we do not want to record the change or reflect.\n      if (wrapped !== true || initializeValue !== undefined) {\n        return;\n      }\n    }\n    // TODO (justinfagnani): Create a benchmark of Map.has() + Map.set(\n    // vs just Map.set()\n    if (!this._$changedProperties.has(name)) {\n      // On the initial change, the old value should be `undefined`, except\n      // with `useDefault`\n      if (!this.hasUpdated && !useDefault) {\n        oldValue = undefined;\n      }\n      this._$changedProperties.set(name, oldValue);\n    }\n    // Add to reflecting properties set.\n    // Note, it's important that every change has a chance to add the\n    // property to `__reflectingProperties`. This ensures setting\n    // attribute + property reflects correctly.\n    if (reflect === true && this.__reflectingProperty !== name) {\n      (this.__reflectingProperties ??= new Set<PropertyKey>()).add(name);\n    }\n  }\n\n  /**\n   * Sets up the element to asynchronously update.\n   */\n  private async __enqueueUpdate() {\n    this.isUpdatePending = true;\n    try {\n      // Ensure any previous update has resolved before updating.\n      // This `await` also ensures that property changes are batched.\n      await this.__updatePromise;\n    } catch (e) {\n      // Refire any previous errors async so they do not disrupt the update\n      // cycle. Errors are refired so developers have a chance to observe\n      // them, and this can be done by implementing\n      // `window.onunhandledrejection`.\n      Promise.reject(e);\n    }\n    const result = this.scheduleUpdate();\n    // If `scheduleUpdate` returns a Promise, we await it. This is done to\n    // enable coordinating updates with a scheduler. Note, the result is\n    // checked to avoid delaying an additional microtask unless we need to.\n    if (result != null) {\n      await result;\n    }\n    return !this.isUpdatePending;\n  }\n\n  /**\n   * Schedules an element update. You can override this method to change the\n   * timing of updates by returning a Promise. The update will await the\n   * returned Promise, and you should resolve the Promise to allow the update\n   * to proceed. If this method is overridden, `super.scheduleUpdate()`\n   * must be called.\n   *\n   * For instance, to schedule updates to occur just before the next frame:\n   *\n   * ```ts\n   * override protected async scheduleUpdate(): Promise<unknown> {\n   *   await new Promise((resolve) => requestAnimationFrame(() => resolve()));\n   *   super.scheduleUpdate();\n   * }\n   * ```\n   * @category updates\n   */\n  protected scheduleUpdate(): void | Promise<unknown> {\n    const result = this.performUpdate();\n    if (\n      DEV_MODE &&\n      (this.constructor as typeof ReactiveElement).enabledWarnings!.includes(\n        'async-perform-update'\n      ) &&\n      typeof (result as unknown as Promise<unknown> | undefined)?.then ===\n        'function'\n    ) {\n      issueWarning(\n        'async-perform-update',\n        `Element ${this.localName} returned a Promise from performUpdate(). ` +\n          `This behavior is deprecated and will be removed in a future ` +\n          `version of ReactiveElement.`\n      );\n    }\n    return result;\n  }\n\n  /**\n   * Performs an element update. Note, if an exception is thrown during the\n   * update, `firstUpdated` and `updated` will not be called.\n   *\n   * Call `performUpdate()` to immediately process a pending update. This should\n   * generally not be needed, but it can be done in rare cases when you need to\n   * update synchronously.\n   *\n   * @category updates\n   */\n  protected performUpdate(): void {\n    // Abort any update if one is not pending when this is called.\n    // This can happen if `performUpdate` is called early to \"flush\"\n    // the update.\n    if (!this.isUpdatePending) {\n      return;\n    }\n    debugLogEvent?.({kind: 'update'});\n    if (!this.hasUpdated) {\n      // Create renderRoot before first update. This occurs in `connectedCallback`\n      // but is done here to support out of tree calls to `enableUpdating`/`performUpdate`.\n      (this as Mutable<typeof this, 'renderRoot'>).renderRoot ??=\n        this.createRenderRoot();\n      if (DEV_MODE) {\n        // Produce warning if any reactive properties on the prototype are\n        // shadowed by class fields. Instance fields set before upgrade are\n        // deleted by this point, so any own property is caused by class field\n        // initialization in the constructor.\n        const ctor = this.constructor as typeof ReactiveElement;\n        const shadowedProperties = [...ctor.elementProperties.keys()].filter(\n          (p) => this.hasOwnProperty(p) && p in getPrototypeOf(this)\n        );\n        if (shadowedProperties.length) {\n          throw new Error(\n            `The following properties on element ${this.localName} will not ` +\n              `trigger updates as expected because they are set using class ` +\n              `fields: ${shadowedProperties.join(', ')}. ` +\n              `Native class fields and some compiled output will overwrite ` +\n              `accessors used for detecting changes. See ` +\n              `https://lit.dev/msg/class-field-shadowing ` +\n              `for more information.`\n          );\n        }\n      }\n      // Mixin instance properties once, if they exist.\n      if (this.__instanceProperties) {\n        // TODO (justinfagnani): should we use the stored value? Could a new value\n        // have been set since we stored the own property value?\n        for (const [p, value] of this.__instanceProperties) {\n          this[p as keyof this] = value as this[keyof this];\n        }\n        this.__instanceProperties = undefined;\n      }\n      // Trigger initial value reflection and populate the initial\n      // `changedProperties` map, but only for the case of properties created\n      // via `createProperty` on accessors, which will not have already\n      // populated the `changedProperties` map since they are not set.\n      // We can't know if these accessors had initializers, so we just set\n      // them anyway - a difference from experimental decorators on fields and\n      // standard decorators on auto-accessors.\n      // For context see:\n      // https://github.com/lit/lit/pull/4183#issuecomment-1711959635\n      const elementProperties = (this.constructor as typeof ReactiveElement)\n        .elementProperties;\n      if (elementProperties.size > 0) {\n        for (const [p, options] of elementProperties) {\n          const {wrapped} = options;\n          const value = this[p as keyof this];\n          if (\n            wrapped === true &&\n            !this._$changedProperties.has(p) &&\n            value !== undefined\n          ) {\n            this._$changeProperty(p, undefined, options, value);\n          }\n        }\n      }\n    }\n    let shouldUpdate = false;\n    const changedProperties = this._$changedProperties;\n    try {\n      shouldUpdate = this.shouldUpdate(changedProperties);\n      if (shouldUpdate) {\n        this.willUpdate(changedProperties);\n        this.__controllers?.forEach((c) => c.hostUpdate?.());\n        this.update(changedProperties);\n      } else {\n        this.__markUpdated();\n      }\n    } catch (e) {\n      // Prevent `firstUpdated` and `updated` from running when there's an\n      // update exception.\n      shouldUpdate = false;\n      // Ensure element can accept additional updates after an exception.\n      this.__markUpdated();\n      throw e;\n    }\n    // The update is no longer considered pending and further updates are now allowed.\n    if (shouldUpdate) {\n      this._$didUpdate(changedProperties);\n    }\n  }\n\n  /**\n   * Invoked before `update()` to compute values needed during the update.\n   *\n   * Implement `willUpdate` to compute property values that depend on other\n   * properties and are used in the rest of the update process.\n   *\n   * ```ts\n   * willUpdate(changedProperties) {\n   *   // only need to check changed properties for an expensive computation.\n   *   if (changedProperties.has('firstName') || changedProperties.has('lastName')) {\n   *     this.sha = computeSHA(`${this.firstName} ${this.lastName}`);\n   *   }\n   * }\n   *\n   * render() {\n   *   return html`SHA: ${this.sha}`;\n   * }\n   * ```\n   *\n   * @category updates\n   */\n  protected willUpdate(_changedProperties: PropertyValues): void {}\n\n  // Note, this is an override point for polyfill-support.\n  // @internal\n  _$didUpdate(changedProperties: PropertyValues) {\n    this.__controllers?.forEach((c) => c.hostUpdated?.());\n    if (!this.hasUpdated) {\n      this.hasUpdated = true;\n      this.firstUpdated(changedProperties);\n    }\n    this.updated(changedProperties);\n    if (\n      DEV_MODE &&\n      this.isUpdatePending &&\n      (this.constructor as typeof ReactiveElement).enabledWarnings!.includes(\n        'change-in-update'\n      )\n    ) {\n      issueWarning(\n        'change-in-update',\n        `Element ${this.localName} scheduled an update ` +\n          `(generally because a property was set) ` +\n          `after an update completed, causing a new update to be scheduled. ` +\n          `This is inefficient and should be avoided unless the next update ` +\n          `can only be scheduled as a side effect of the previous update.`\n      );\n    }\n  }\n\n  private __markUpdated() {\n    this._$changedProperties = new Map();\n    this.isUpdatePending = false;\n  }\n\n  /**\n   * Returns a Promise that resolves when the element has completed updating.\n   * The Promise value is a boolean that is `true` if the element completed the\n   * update without triggering another update. The Promise result is `false` if\n   * a property was set inside `updated()`. If the Promise is rejected, an\n   * exception was thrown during the update.\n   *\n   * To await additional asynchronous work, override the `getUpdateComplete`\n   * method. For example, it is sometimes useful to await a rendered element\n   * before fulfilling this Promise. To do this, first await\n   * `super.getUpdateComplete()`, then any subsequent state.\n   *\n   * @return A promise of a boolean that resolves to true if the update completed\n   *     without triggering another update.\n   * @category updates\n   */\n  get updateComplete(): Promise<boolean> {\n    return this.getUpdateComplete();\n  }\n\n  /**\n   * Override point for the `updateComplete` promise.\n   *\n   * It is not safe to override the `updateComplete` getter directly due to a\n   * limitation in TypeScript which means it is not possible to call a\n   * superclass getter (e.g. `super.updateComplete.then(...)`) when the target\n   * language is ES5 (https://github.com/microsoft/TypeScript/issues/338).\n   * This method should be overridden instead. For example:\n   *\n   * ```ts\n   * class MyElement extends LitElement {\n   *   override async getUpdateComplete() {\n   *     const result = await super.getUpdateComplete();\n   *     await this._myChild.updateComplete;\n   *     return result;\n   *   }\n   * }\n   * ```\n   *\n   * @return A promise of a boolean that resolves to true if the update completed\n   *     without triggering another update.\n   * @category updates\n   */\n  protected getUpdateComplete(): Promise<boolean> {\n    return this.__updatePromise;\n  }\n\n  /**\n   * Controls whether or not `update()` should be called when the element requests\n   * an update. By default, this method always returns `true`, but this can be\n   * customized to control when to update.\n   *\n   * @param _changedProperties Map of changed properties with old values\n   * @category updates\n   */\n  protected shouldUpdate(_changedProperties: PropertyValues): boolean {\n    return true;\n  }\n\n  /**\n   * Updates the element. This method reflects property values to attributes.\n   * It can be overridden to render and keep updated element DOM.\n   * Setting properties inside this method will *not* trigger\n   * another update.\n   *\n   * @param _changedProperties Map of changed properties with old values\n   * @category updates\n   */\n  protected update(_changedProperties: PropertyValues) {\n    // The forEach() expression will only run when __reflectingProperties is\n    // defined, and it returns undefined, setting __reflectingProperties to\n    // undefined\n    this.__reflectingProperties &&= this.__reflectingProperties.forEach((p) =>\n      this.__propertyToAttribute(p, this[p as keyof this])\n    ) as undefined;\n    this.__markUpdated();\n  }\n\n  /**\n   * Invoked whenever the element is updated. Implement to perform\n   * post-updating tasks via DOM APIs, for example, focusing an element.\n   *\n   * Setting properties inside this method will trigger the element to update\n   * again after this update cycle completes.\n   *\n   * @param _changedProperties Map of changed properties with old values\n   * @category updates\n   */\n  protected updated(_changedProperties: PropertyValues) {}\n\n  /**\n   * Invoked when the element is first updated. Implement to perform one time\n   * work on the element after update.\n   *\n   * ```ts\n   * firstUpdated() {\n   *   this.renderRoot.getElementById('my-text-area').focus();\n   * }\n   * ```\n   *\n   * Setting properties inside this method will trigger the element to update\n   * again after this update cycle completes.\n   *\n   * @param _changedProperties Map of changed properties with old values\n   * @category updates\n   */\n  protected firstUpdated(_changedProperties: PropertyValues) {}\n}\n// Assigned here to work around a jscompiler bug with static fields\n// when compiling to ES5.\n// https://github.com/google/closure-compiler/issues/3177\n(ReactiveElement as unknown as Record<string, unknown>)[\n  JSCompiler_renameProperty('elementProperties', ReactiveElement)\n] = new Map();\n(ReactiveElement as unknown as Record<string, unknown>)[\n  JSCompiler_renameProperty('finalized', ReactiveElement)\n] = new Map();\n\n// Apply polyfills if available\npolyfillSupport?.({ReactiveElement});\n\n// Dev mode warnings...\nif (DEV_MODE) {\n  // Default warning set.\n  ReactiveElement.enabledWarnings = [\n    'change-in-update',\n    'async-perform-update',\n  ];\n  const ensureOwnWarnings = function (ctor: typeof ReactiveElement) {\n    if (\n      !ctor.hasOwnProperty(JSCompiler_renameProperty('enabledWarnings', ctor))\n    ) {\n      ctor.enabledWarnings = ctor.enabledWarnings!.slice();\n    }\n  };\n  ReactiveElement.enableWarning = function (\n    this: typeof ReactiveElement,\n    warning: WarningKind\n  ) {\n    ensureOwnWarnings(this);\n    if (!this.enabledWarnings!.includes(warning)) {\n      this.enabledWarnings!.push(warning);\n    }\n  };\n  ReactiveElement.disableWarning = function (\n    this: typeof ReactiveElement,\n    warning: WarningKind\n  ) {\n    ensureOwnWarnings(this);\n    const i = this.enabledWarnings!.indexOf(warning);\n    if (i >= 0) {\n      this.enabledWarnings!.splice(i, 1);\n    }\n  };\n}\n\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for ReactiveElement usage.\n(global.reactiveElementVersions ??= []).push('2.1.1');\nif (DEV_MODE && global.reactiveElementVersions.length > 1) {\n  queueMicrotask(() => {\n    issueWarning!(\n      'multiple-versions',\n      `Multiple versions of Lit loaded. Loading multiple versions ` +\n        `is not recommended.`\n    );\n  });\n}\n", "/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\n// IMPORTANT: these imports must be type-only\nimport type {Directive, DirectiveResult, PartInfo} from './directive.js';\nimport type {TrustedHTML, TrustedTypesWindow} from 'trusted-types/lib/index.js';\n\nconst DEV_MODE = true;\nconst ENABLE_EXTRA_SECURITY_HOOKS = true;\nconst ENABLE_SHADYDOM_NOPATCH = true;\nconst NODE_MODE = false;\n\n// Allows minifiers to rename references to globalThis\nconst global = globalThis;\n\n/**\n * Contains types that are part of the unstable debug API.\n *\n * Everything in this API is not stable and may change or be removed in the future,\n * even on patch releases.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace LitUnstable {\n  /**\n   * When Lit is running in dev mode and `window.emitLitDebugLogEvents` is true,\n   * we will emit 'lit-debug' events to window, with live details about the update and render\n   * lifecycle. These can be useful for writing debug tooling and visualizations.\n   *\n   * Please be aware that running with window.emitLitDebugLogEvents has performance overhead,\n   * making certain operations that are normally very cheap (like a no-op render) much slower,\n   * because we must copy data and dispatch events.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-namespace\n  export namespace DebugLog {\n    export type Entry =\n      | TemplatePrep\n      | TemplateInstantiated\n      | TemplateInstantiatedAndUpdated\n      | TemplateUpdating\n      | BeginRender\n      | EndRender\n      | CommitPartEntry\n      | SetPartValue;\n    export interface TemplatePrep {\n      kind: 'template prep';\n      template: Template;\n      strings: TemplateStringsArray;\n      clonableTemplate: HTMLTemplateElement;\n      parts: TemplatePart[];\n    }\n    export interface BeginRender {\n      kind: 'begin render';\n      id: number;\n      value: unknown;\n      container: HTMLElement | DocumentFragment;\n      options: RenderOptions | undefined;\n      part: ChildPart | undefined;\n    }\n    export interface EndRender {\n      kind: 'end render';\n      id: number;\n      value: unknown;\n      container: HTMLElement | DocumentFragment;\n      options: RenderOptions | undefined;\n      part: ChildPart;\n    }\n    export interface TemplateInstantiated {\n      kind: 'template instantiated';\n      template: Template | CompiledTemplate;\n      instance: TemplateInstance;\n      options: RenderOptions | undefined;\n      fragment: Node;\n      parts: Array<Part | undefined>;\n      values: unknown[];\n    }\n    export interface TemplateInstantiatedAndUpdated {\n      kind: 'template instantiated and updated';\n      template: Template | CompiledTemplate;\n      instance: TemplateInstance;\n      options: RenderOptions | undefined;\n      fragment: Node;\n      parts: Array<Part | undefined>;\n      values: unknown[];\n    }\n    export interface TemplateUpdating {\n      kind: 'template updating';\n      template: Template | CompiledTemplate;\n      instance: TemplateInstance;\n      options: RenderOptions | undefined;\n      parts: Array<Part | undefined>;\n      values: unknown[];\n    }\n    export interface SetPartValue {\n      kind: 'set part';\n      part: Part;\n      value: unknown;\n      valueIndex: number;\n      values: unknown[];\n      templateInstance: TemplateInstance;\n    }\n\n    export type CommitPartEntry =\n      | CommitNothingToChildEntry\n      | CommitText\n      | CommitNode\n      | CommitAttribute\n      | CommitProperty\n      | CommitBooleanAttribute\n      | CommitEventListener\n      | CommitToElementBinding;\n\n    export interface CommitNothingToChildEntry {\n      kind: 'commit nothing to child';\n      start: ChildNode;\n      end: ChildNode | null;\n      parent: Disconnectable | undefined;\n      options: RenderOptions | undefined;\n    }\n\n    export interface CommitText {\n      kind: 'commit text';\n      node: Text;\n      value: unknown;\n      options: RenderOptions | undefined;\n    }\n\n    export interface CommitNode {\n      kind: 'commit node';\n      start: Node;\n      parent: Disconnectable | undefined;\n      value: Node;\n      options: RenderOptions | undefined;\n    }\n\n    export interface CommitAttribute {\n      kind: 'commit attribute';\n      element: Element;\n      name: string;\n      value: unknown;\n      options: RenderOptions | undefined;\n    }\n\n    export interface CommitProperty {\n      kind: 'commit property';\n      element: Element;\n      name: string;\n      value: unknown;\n      options: RenderOptions | undefined;\n    }\n\n    export interface CommitBooleanAttribute {\n      kind: 'commit boolean attribute';\n      element: Element;\n      name: string;\n      value: boolean;\n      options: RenderOptions | undefined;\n    }\n\n    export interface CommitEventListener {\n      kind: 'commit event listener';\n      element: Element;\n      name: string;\n      value: unknown;\n      oldListener: unknown;\n      options: RenderOptions | undefined;\n      // True if we're removing the old event listener (e.g. because settings changed, or value is nothing)\n      removeListener: boolean;\n      // True if we're adding a new event listener (e.g. because first render, or settings changed)\n      addListener: boolean;\n    }\n\n    export interface CommitToElementBinding {\n      kind: 'commit to element binding';\n      element: Element;\n      value: unknown;\n      options: RenderOptions | undefined;\n    }\n  }\n}\n\ninterface DebugLoggingWindow {\n  // Even in dev mode, we generally don't want to emit these events, as that's\n  // another level of cost, so only emit them when DEV_MODE is true _and_ when\n  // window.emitLitDebugEvents is true.\n  emitLitDebugLogEvents?: boolean;\n}\n\n/**\n * Useful for visualizing and logging insights into what the Lit template system is doing.\n *\n * Compiled out of prod mode builds.\n */\nconst debugLogEvent = DEV_MODE\n  ? (event: LitUnstable.DebugLog.Entry) => {\n      const shouldEmit = (global as unknown as DebugLoggingWindow)\n        .emitLitDebugLogEvents;\n      if (!shouldEmit) {\n        return;\n      }\n      global.dispatchEvent(\n        new CustomEvent<LitUnstable.DebugLog.Entry>('lit-debug', {\n          detail: event,\n        })\n      );\n    }\n  : undefined;\n// Used for connecting beginRender and endRender events when there are nested\n// renders when errors are thrown preventing an endRender event from being\n// called.\nlet debugLogRenderId = 0;\n\nlet issueWarning: (code: string, warning: string) => void;\n\nif (DEV_MODE) {\n  global.litIssuedWarnings ??= new Set();\n\n  /**\n   * Issue a warning if we haven't already, based either on `code` or `warning`.\n   * Warnings are disabled automatically only by `warning`; disabling via `code`\n   * can be done by users.\n   */\n  issueWarning = (code: string, warning: string) => {\n    warning += code\n      ? ` See https://lit.dev/msg/${code} for more information.`\n      : '';\n    if (\n      !global.litIssuedWarnings!.has(warning) &&\n      !global.litIssuedWarnings!.has(code)\n    ) {\n      console.warn(warning);\n      global.litIssuedWarnings!.add(warning);\n    }\n  };\n\n  queueMicrotask(() => {\n    issueWarning(\n      'dev-mode',\n      `Lit is in dev mode. Not recommended for production!`\n    );\n  });\n}\n\nconst wrap =\n  ENABLE_SHADYDOM_NOPATCH &&\n  global.ShadyDOM?.inUse &&\n  global.ShadyDOM?.noPatch === true\n    ? (global.ShadyDOM!.wrap as <T extends Node>(node: T) => T)\n    : <T extends Node>(node: T) => node;\n\nconst trustedTypes = (global as unknown as TrustedTypesWindow).trustedTypes;\n\n/**\n * Our TrustedTypePolicy for HTML which is declared using the html template\n * tag function.\n *\n * That HTML is a developer-authored constant, and is parsed with innerHTML\n * before any untrusted expressions have been mixed in. Therefor it is\n * considered safe by construction.\n */\nconst policy = trustedTypes\n  ? trustedTypes.createPolicy('lit-html', {\n      createHTML: (s) => s,\n    })\n  : undefined;\n\n/**\n * Used to sanitize any value before it is written into the DOM. This can be\n * used to implement a security policy of allowed and disallowed values in\n * order to prevent XSS attacks.\n *\n * One way of using this callback would be to check attributes and properties\n * against a list of high risk fields, and require that values written to such\n * fields be instances of a class which is safe by construction. Closure's Safe\n * HTML Types is one implementation of this technique (\n * https://github.com/google/safe-html-types/blob/master/doc/safehtml-types.md).\n * The TrustedTypes polyfill in API-only mode could also be used as a basis\n * for this technique (https://github.com/WICG/trusted-types).\n *\n * @param node The HTML node (usually either a #text node or an Element) that\n *     is being written to. Note that this is just an exemplar node, the write\n *     may take place against another instance of the same class of node.\n * @param name The name of an attribute or property (for example, 'href').\n * @param type Indicates whether the write that's about to be performed will\n *     be to a property or a node.\n * @return A function that will sanitize this class of writes.\n */\nexport type SanitizerFactory = (\n  node: Node,\n  name: string,\n  type: 'property' | 'attribute'\n) => ValueSanitizer;\n\n/**\n * A function which can sanitize values that will be written to a specific kind\n * of DOM sink.\n *\n * See SanitizerFactory.\n *\n * @param value The value to sanitize. Will be the actual value passed into\n *     the lit-html template literal, so this could be of any type.\n * @return The value to write to the DOM. Usually the same as the input value,\n *     unless sanitization is needed.\n */\nexport type ValueSanitizer = (value: unknown) => unknown;\n\nconst identityFunction: ValueSanitizer = (value: unknown) => value;\nconst noopSanitizer: SanitizerFactory = (\n  _node: Node,\n  _name: string,\n  _type: 'property' | 'attribute'\n) => identityFunction;\n\n/** Sets the global sanitizer factory. */\nconst setSanitizer = (newSanitizer: SanitizerFactory) => {\n  if (!ENABLE_EXTRA_SECURITY_HOOKS) {\n    return;\n  }\n  if (sanitizerFactoryInternal !== noopSanitizer) {\n    throw new Error(\n      `Attempted to overwrite existing lit-html security policy.` +\n        ` setSanitizeDOMValueFactory should be called at most once.`\n    );\n  }\n  sanitizerFactoryInternal = newSanitizer;\n};\n\n/**\n * Only used in internal tests, not a part of the public API.\n */\nconst _testOnlyClearSanitizerFactoryDoNotCallOrElse = () => {\n  sanitizerFactoryInternal = noopSanitizer;\n};\n\nconst createSanitizer: SanitizerFactory = (node, name, type) => {\n  return sanitizerFactoryInternal(node, name, type);\n};\n\n// Added to an attribute name to mark the attribute as bound so we can find\n// it easily.\nconst boundAttributeSuffix = '$lit$';\n\n// This marker is used in many syntactic positions in HTML, so it must be\n// a valid element name and attribute name. We don't support dynamic names (yet)\n// but this at least ensures that the parse tree is closer to the template\n// intention.\nconst marker = `lit$${Math.random().toFixed(9).slice(2)}$`;\n\n// String used to tell if a comment is a marker comment\nconst markerMatch = '?' + marker;\n\n// Text used to insert a comment marker node. We use processing instruction\n// syntax because it's slightly smaller, but parses as a comment node.\nconst nodeMarker = `<${markerMatch}>`;\n\nconst d =\n  NODE_MODE && global.document === undefined\n    ? ({\n        createTreeWalker() {\n          return {};\n        },\n      } as unknown as Document)\n    : document;\n\n// Creates a dynamic marker. We never have to search for these in the DOM.\nconst createMarker = () => d.createComment('');\n\n// https://tc39.github.io/ecma262/#sec-typeof-operator\ntype Primitive = null | undefined | boolean | number | string | symbol | bigint;\nconst isPrimitive = (value: unknown): value is Primitive =>\n  value === null || (typeof value != 'object' && typeof value != 'function');\nconst isArray = Array.isArray;\nconst isIterable = (value: unknown): value is Iterable<unknown> =>\n  isArray(value) ||\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  typeof (value as any)?.[Symbol.iterator] === 'function';\n\nconst SPACE_CHAR = `[ \\t\\n\\f\\r]`;\nconst ATTR_VALUE_CHAR = `[^ \\t\\n\\f\\r\"'\\`<>=]`;\nconst NAME_CHAR = `[^\\\\s\"'>=/]`;\n\n// These regexes represent the five parsing states that we care about in the\n// Template's HTML scanner. They match the *end* of the state they're named\n// after.\n// Depending on the match, we transition to a new state. If there's no match,\n// we stay in the same state.\n// Note that the regexes are stateful. We utilize lastIndex and sync it\n// across the multiple regexes used. In addition to the five regexes below\n// we also dynamically create a regex to find the matching end tags for raw\n// text elements.\n\n/**\n * End of text is: `<` followed by:\n *   (comment start) or (tag) or (dynamic tag binding)\n */\nconst textEndRegex = /<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g;\nconst COMMENT_START = 1;\nconst TAG_NAME = 2;\nconst DYNAMIC_TAG_NAME = 3;\n\nconst commentEndRegex = /-->/g;\n/**\n * Comments not started with <!--, like </{, can be ended by a single `>`\n */\nconst comment2EndRegex = />/g;\n\n/**\n * The tagEnd regex matches the end of the \"inside an opening\" tag syntax\n * position. It either matches a `>`, an attribute-like sequence, or the end\n * of the string after a space (attribute-name position ending).\n *\n * See attributes in the HTML spec:\n * https://www.w3.org/TR/html5/syntax.html#elements-attributes\n *\n * \" \\t\\n\\f\\r\" are HTML space characters:\n * https://infra.spec.whatwg.org/#ascii-whitespace\n *\n * So an attribute is:\n *  * The name: any character except a whitespace character, (\"), ('), \">\",\n *    \"=\", or \"/\". Note: this is different from the HTML spec which also excludes control characters.\n *  * Followed by zero or more space characters\n *  * Followed by \"=\"\n *  * Followed by zero or more space characters\n *  * Followed by:\n *    * Any character except space, ('), (\"), \"<\", \">\", \"=\", (`), or\n *    * (\") then any non-(\"), or\n *    * (') then any non-(')\n */\nconst tagEndRegex = new RegExp(\n  `>|${SPACE_CHAR}(?:(${NAME_CHAR}+)(${SPACE_CHAR}*=${SPACE_CHAR}*(?:${ATTR_VALUE_CHAR}|(\"|')|))|$)`,\n  'g'\n);\nconst ENTIRE_MATCH = 0;\nconst ATTRIBUTE_NAME = 1;\nconst SPACES_AND_EQUALS = 2;\nconst QUOTE_CHAR = 3;\n\nconst singleQuoteAttrEndRegex = /'/g;\nconst doubleQuoteAttrEndRegex = /\"/g;\n/**\n * Matches the raw text elements.\n *\n * Comments are not parsed within raw text elements, so we need to search their\n * text content for marker strings.\n */\nconst rawTextElement = /^(?:script|style|textarea|title)$/i;\n\n/** TemplateResult types */\nconst HTML_RESULT = 1;\nconst SVG_RESULT = 2;\nconst MATHML_RESULT = 3;\n\ntype ResultType = typeof HTML_RESULT | typeof SVG_RESULT | typeof MATHML_RESULT;\n\n// TemplatePart types\n// IMPORTANT: these must match the values in PartType\nconst ATTRIBUTE_PART = 1;\nconst CHILD_PART = 2;\nconst PROPERTY_PART = 3;\nconst BOOLEAN_ATTRIBUTE_PART = 4;\nconst EVENT_PART = 5;\nconst ELEMENT_PART = 6;\nconst COMMENT_PART = 7;\n\n/**\n * The return type of the template tag functions, {@linkcode html} and\n * {@linkcode svg} when it hasn't been compiled by @lit-labs/compiler.\n *\n * A `TemplateResult` object holds all the information about a template\n * expression required to render it: the template strings, expression values,\n * and type of template (html or svg).\n *\n * `TemplateResult` objects do not create any DOM on their own. To create or\n * update DOM you need to render the `TemplateResult`. See\n * [Rendering](https://lit.dev/docs/components/rendering) for more information.\n *\n */\nexport type UncompiledTemplateResult<T extends ResultType = ResultType> = {\n  // This property needs to remain unminified.\n  ['_$litType$']: T;\n  strings: TemplateStringsArray;\n  values: unknown[];\n};\n\n/**\n * This is a template result that may be either uncompiled or compiled.\n *\n * In the future, TemplateResult will be this type. If you want to explicitly\n * note that a template result is potentially compiled, you can reference this\n * type and it will continue to behave the same through the next major version\n * of Lit. This can be useful for code that wants to prepare for the next\n * major version of Lit.\n */\nexport type MaybeCompiledTemplateResult<T extends ResultType = ResultType> =\n  | UncompiledTemplateResult<T>\n  | CompiledTemplateResult;\n\n/**\n * The return type of the template tag functions, {@linkcode html} and\n * {@linkcode svg}.\n *\n * A `TemplateResult` object holds all the information about a template\n * expression required to render it: the template strings, expression values,\n * and type of template (html or svg).\n *\n * `TemplateResult` objects do not create any DOM on their own. To create or\n * update DOM you need to render the `TemplateResult`. See\n * [Rendering](https://lit.dev/docs/components/rendering) for more information.\n *\n * In Lit 4, this type will be an alias of\n * MaybeCompiledTemplateResult, so that code will get type errors if it assumes\n * that Lit templates are not compiled. When deliberately working with only\n * one, use either {@linkcode CompiledTemplateResult} or\n * {@linkcode UncompiledTemplateResult} explicitly.\n */\nexport type TemplateResult<T extends ResultType = ResultType> =\n  UncompiledTemplateResult<T>;\n\nexport type HTMLTemplateResult = TemplateResult<typeof HTML_RESULT>;\n\nexport type SVGTemplateResult = TemplateResult<typeof SVG_RESULT>;\n\nexport type MathMLTemplateResult = TemplateResult<typeof MATHML_RESULT>;\n\n/**\n * A TemplateResult that has been compiled by @lit-labs/compiler, skipping the\n * prepare step.\n */\nexport interface CompiledTemplateResult {\n  // This is a factory in order to make template initialization lazy\n  // and allow ShadyRenderOptions scope to be passed in.\n  // This property needs to remain unminified.\n  ['_$litType$']: CompiledTemplate;\n  values: unknown[];\n}\n\nexport interface CompiledTemplate extends Omit<Template, 'el'> {\n  // el is overridden to be optional. We initialize it on first render\n  el?: HTMLTemplateElement;\n\n  // The prepared HTML string to create a template element from.\n  // The type is a TemplateStringsArray to guarantee that the value came from\n  // source code, preventing a JSON injection attack.\n  h: TemplateStringsArray;\n}\n\n/**\n * Generates a template literal tag function that returns a TemplateResult with\n * the given result type.\n */\nconst tag =\n  <T extends ResultType>(type: T) =>\n  (strings: TemplateStringsArray, ...values: unknown[]): TemplateResult<T> => {\n    // Warn against templates octal escape sequences\n    // We do this here rather than in render so that the warning is closer to the\n    // template definition.\n    if (DEV_MODE && strings.some((s) => s === undefined)) {\n      console.warn(\n        'Some template strings are undefined.\\n' +\n          'This is probably caused by illegal octal escape sequences.'\n      );\n    }\n    if (DEV_MODE) {\n      // Import static-html.js results in a circular dependency which g3 doesn't\n      // handle. Instead we know that static values must have the field\n      // `_$litStatic$`.\n      if (\n        values.some((val) => (val as {_$litStatic$: unknown})?.['_$litStatic$'])\n      ) {\n        issueWarning(\n          '',\n          `Static values 'literal' or 'unsafeStatic' cannot be used as values to non-static templates.\\n` +\n            `Please use the static 'html' tag function. See https://lit.dev/docs/templates/expressions/#static-expressions`\n        );\n      }\n    }\n    return {\n      // This property needs to remain unminified.\n      ['_$litType$']: type,\n      strings,\n      values,\n    };\n  };\n\n/**\n * Interprets a template literal as an HTML template that can efficiently\n * render to and update a container.\n *\n * ```ts\n * const header = (title: string) => html`<h1>${title}</h1>`;\n * ```\n *\n * The `html` tag returns a description of the DOM to render as a value. It is\n * lazy, meaning no work is done until the template is rendered. When rendering,\n * if a template comes from the same expression as a previously rendered result,\n * it's efficiently updated instead of replaced.\n */\nexport const html = tag(HTML_RESULT);\n\n/**\n * Interprets a template literal as an SVG fragment that can efficiently render\n * to and update a container.\n *\n * ```ts\n * const rect = svg`<rect width=\"10\" height=\"10\"></rect>`;\n *\n * const myImage = html`\n *   <svg viewBox=\"0 0 10 10\" xmlns=\"http://www.w3.org/2000/svg\">\n *     ${rect}\n *   </svg>`;\n * ```\n *\n * The `svg` *tag function* should only be used for SVG fragments, or elements\n * that would be contained **inside** an `<svg>` HTML element. A common error is\n * placing an `<svg>` *element* in a template tagged with the `svg` tag\n * function. The `<svg>` element is an HTML element and should be used within a\n * template tagged with the {@linkcode html} tag function.\n *\n * In LitElement usage, it's invalid to return an SVG fragment from the\n * `render()` method, as the SVG fragment will be contained within the element's\n * shadow root and thus not be properly contained within an `<svg>` HTML\n * element.\n */\nexport const svg = tag(SVG_RESULT);\n\n/**\n * Interprets a template literal as MathML fragment that can efficiently render\n * to and update a container.\n *\n * ```ts\n * const num = mathml`<mn>1</mn>`;\n *\n * const eq = html`\n *   <math>\n *     ${num}\n *   </math>`;\n * ```\n *\n * The `mathml` *tag function* should only be used for MathML fragments, or\n * elements that would be contained **inside** a `<math>` HTML element. A common\n * error is placing a `<math>` *element* in a template tagged with the `mathml`\n * tag function. The `<math>` element is an HTML element and should be used\n * within a template tagged with the {@linkcode html} tag function.\n *\n * In LitElement usage, it's invalid to return an MathML fragment from the\n * `render()` method, as the MathML fragment will be contained within the\n * element's shadow root and thus not be properly contained within a `<math>`\n * HTML element.\n */\nexport const mathml = tag(MATHML_RESULT);\n\n/**\n * A sentinel value that signals that a value was handled by a directive and\n * should not be written to the DOM.\n */\nexport const noChange = Symbol.for('lit-noChange');\n\n/**\n * A sentinel value that signals a ChildPart to fully clear its content.\n *\n * ```ts\n * const button = html`${\n *  user.isAdmin\n *    ? html`<button>DELETE</button>`\n *    : nothing\n * }`;\n * ```\n *\n * Prefer using `nothing` over other falsy values as it provides a consistent\n * behavior between various expression binding contexts.\n *\n * In child expressions, `undefined`, `null`, `''`, and `nothing` all behave the\n * same and render no nodes. In attribute expressions, `nothing` _removes_ the\n * attribute, while `undefined` and `null` will render an empty string. In\n * property expressions `nothing` becomes `undefined`.\n */\nexport const nothing = Symbol.for('lit-nothing');\n\n/**\n * The cache of prepared templates, keyed by the tagged TemplateStringsArray\n * and _not_ accounting for the specific template tag used. This means that\n * template tags cannot be dynamic - they must statically be one of html, svg,\n * or attr. This restriction simplifies the cache lookup, which is on the hot\n * path for rendering.\n */\nconst templateCache = new WeakMap<TemplateStringsArray, Template>();\n\n/**\n * Object specifying options for controlling lit-html rendering. Note that\n * while `render` may be called multiple times on the same `container` (and\n * `renderBefore` reference node) to efficiently update the rendered content,\n * only the options passed in during the first render are respected during\n * the lifetime of renders to that unique `container` + `renderBefore`\n * combination.\n */\nexport interface RenderOptions {\n  /**\n   * An object to use as the `this` value for event listeners. It's often\n   * useful to set this to the host component rendering a template.\n   */\n  host?: object;\n  /**\n   * A DOM node before which to render content in the container.\n   */\n  renderBefore?: ChildNode | null;\n  /**\n   * Node used for cloning the template (`importNode` will be called on this\n   * node). This controls the `ownerDocument` of the rendered DOM, along with\n   * any inherited context. Defaults to the global `document`.\n   */\n  creationScope?: {importNode(node: Node, deep?: boolean): Node};\n  /**\n   * The initial connected state for the top-level part being rendered. If no\n   * `isConnected` option is set, `AsyncDirective`s will be connected by\n   * default. Set to `false` if the initial render occurs in a disconnected tree\n   * and `AsyncDirective`s should see `isConnected === false` for their initial\n   * render. The `part.setConnected()` method must be used subsequent to initial\n   * render to change the connected state of the part.\n   */\n  isConnected?: boolean;\n}\n\nconst walker = d.createTreeWalker(\n  d,\n  129 /* NodeFilter.SHOW_{ELEMENT|COMMENT} */\n);\n\nlet sanitizerFactoryInternal: SanitizerFactory = noopSanitizer;\n\n//\n// Classes only below here, const variable declarations only above here...\n//\n// Keeping variable declarations and classes together improves minification.\n// Interfaces and type aliases can be interleaved freely.\n//\n\n// Type for classes that have a `_directive` or `_directives[]` field, used by\n// `resolveDirective`\nexport interface DirectiveParent {\n  _$parent?: DirectiveParent;\n  _$isConnected: boolean;\n  __directive?: Directive;\n  __directives?: Array<Directive | undefined>;\n}\n\nfunction trustFromTemplateString(\n  tsa: TemplateStringsArray,\n  stringFromTSA: string\n): TrustedHTML {\n  // A security check to prevent spoofing of Lit template results.\n  // In the future, we may be able to replace this with Array.isTemplateObject,\n  // though we might need to make that check inside of the html and svg\n  // functions, because precompiled templates don't come in as\n  // TemplateStringArray objects.\n  if (!isArray(tsa) || !tsa.hasOwnProperty('raw')) {\n    let message = 'invalid template strings array';\n    if (DEV_MODE) {\n      message = `\n          Internal Error: expected template strings to be an array\n          with a 'raw' field. Faking a template strings array by\n          calling html or svg like an ordinary function is effectively\n          the same as calling unsafeHtml and can lead to major security\n          issues, e.g. opening your code up to XSS attacks.\n          If you're using the html or svg tagged template functions normally\n          and still seeing this error, please file a bug at\n          https://github.com/lit/lit/issues/new?template=bug_report.md\n          and include information about your build tooling, if any.\n        `\n        .trim()\n        .replace(/\\n */g, '\\n');\n    }\n    throw new Error(message);\n  }\n  return policy !== undefined\n    ? policy.createHTML(stringFromTSA)\n    : (stringFromTSA as unknown as TrustedHTML);\n}\n\n/**\n * Returns an HTML string for the given TemplateStringsArray and result type\n * (HTML or SVG), along with the case-sensitive bound attribute names in\n * template order. The HTML contains comment markers denoting the `ChildPart`s\n * and suffixes on bound attributes denoting the `AttributeParts`.\n *\n * @param strings template strings array\n * @param type HTML or SVG\n * @return Array containing `[html, attrNames]` (array returned for terseness,\n *     to avoid object fields since this code is shared with non-minified SSR\n *     code)\n */\nconst getTemplateHtml = (\n  strings: TemplateStringsArray,\n  type: ResultType\n): [TrustedHTML, Array<string>] => {\n  // Insert makers into the template HTML to represent the position of\n  // bindings. The following code scans the template strings to determine the\n  // syntactic position of the bindings. They can be in text position, where\n  // we insert an HTML comment, attribute value position, where we insert a\n  // sentinel string and re-write the attribute name, or inside a tag where\n  // we insert the sentinel string.\n  const l = strings.length - 1;\n  // Stores the case-sensitive bound attribute names in the order of their\n  // parts. ElementParts are also reflected in this array as undefined\n  // rather than a string, to disambiguate from attribute bindings.\n  const attrNames: Array<string> = [];\n  let html =\n    type === SVG_RESULT ? '<svg>' : type === MATHML_RESULT ? '<math>' : '';\n\n  // When we're inside a raw text tag (not it's text content), the regex\n  // will still be tagRegex so we can find attributes, but will switch to\n  // this regex when the tag ends.\n  let rawTextEndRegex: RegExp | undefined;\n\n  // The current parsing state, represented as a reference to one of the\n  // regexes\n  let regex = textEndRegex;\n\n  for (let i = 0; i < l; i++) {\n    const s = strings[i];\n    // The index of the end of the last attribute name. When this is\n    // positive at end of a string, it means we're in an attribute value\n    // position and need to rewrite the attribute name.\n    // We also use a special value of -2 to indicate that we encountered\n    // the end of a string in attribute name position.\n    let attrNameEndIndex = -1;\n    let attrName: string | undefined;\n    let lastIndex = 0;\n    let match!: RegExpExecArray | null;\n\n    // The conditions in this loop handle the current parse state, and the\n    // assignments to the `regex` variable are the state transitions.\n    while (lastIndex < s.length) {\n      // Make sure we start searching from where we previously left off\n      regex.lastIndex = lastIndex;\n      match = regex.exec(s);\n      if (match === null) {\n        break;\n      }\n      lastIndex = regex.lastIndex;\n      if (regex === textEndRegex) {\n        if (match[COMMENT_START] === '!--') {\n          regex = commentEndRegex;\n        } else if (match[COMMENT_START] !== undefined) {\n          // We started a weird comment, like </{\n          regex = comment2EndRegex;\n        } else if (match[TAG_NAME] !== undefined) {\n          if (rawTextElement.test(match[TAG_NAME])) {\n            // Record if we encounter a raw-text element. We'll switch to\n            // this regex at the end of the tag.\n            rawTextEndRegex = new RegExp(`</${match[TAG_NAME]}`, 'g');\n          }\n          regex = tagEndRegex;\n        } else if (match[DYNAMIC_TAG_NAME] !== undefined) {\n          if (DEV_MODE) {\n            throw new Error(\n              'Bindings in tag names are not supported. Please use static templates instead. ' +\n                'See https://lit.dev/docs/templates/expressions/#static-expressions'\n            );\n          }\n          regex = tagEndRegex;\n        }\n      } else if (regex === tagEndRegex) {\n        if (match[ENTIRE_MATCH] === '>') {\n          // End of a tag. If we had started a raw-text element, use that\n          // regex\n          regex = rawTextEndRegex ?? textEndRegex;\n          // We may be ending an unquoted attribute value, so make sure we\n          // clear any pending attrNameEndIndex\n          attrNameEndIndex = -1;\n        } else if (match[ATTRIBUTE_NAME] === undefined) {\n          // Attribute name position\n          attrNameEndIndex = -2;\n        } else {\n          attrNameEndIndex = regex.lastIndex - match[SPACES_AND_EQUALS].length;\n          attrName = match[ATTRIBUTE_NAME];\n          regex =\n            match[QUOTE_CHAR] === undefined\n              ? tagEndRegex\n              : match[QUOTE_CHAR] === '\"'\n                ? doubleQuoteAttrEndRegex\n                : singleQuoteAttrEndRegex;\n        }\n      } else if (\n        regex === doubleQuoteAttrEndRegex ||\n        regex === singleQuoteAttrEndRegex\n      ) {\n        regex = tagEndRegex;\n      } else if (regex === commentEndRegex || regex === comment2EndRegex) {\n        regex = textEndRegex;\n      } else {\n        // Not one of the five state regexes, so it must be the dynamically\n        // created raw text regex and we're at the close of that element.\n        regex = tagEndRegex;\n        rawTextEndRegex = undefined;\n      }\n    }\n\n    if (DEV_MODE) {\n      // If we have a attrNameEndIndex, which indicates that we should\n      // rewrite the attribute name, assert that we're in a valid attribute\n      // position - either in a tag, or a quoted attribute value.\n      console.assert(\n        attrNameEndIndex === -1 ||\n          regex === tagEndRegex ||\n          regex === singleQuoteAttrEndRegex ||\n          regex === doubleQuoteAttrEndRegex,\n        'unexpected parse state B'\n      );\n    }\n\n    // We have four cases:\n    //  1. We're in text position, and not in a raw text element\n    //     (regex === textEndRegex): insert a comment marker.\n    //  2. We have a non-negative attrNameEndIndex which means we need to\n    //     rewrite the attribute name to add a bound attribute suffix.\n    //  3. We're at the non-first binding in a multi-binding attribute, use a\n    //     plain marker.\n    //  4. We're somewhere else inside the tag. If we're in attribute name\n    //     position (attrNameEndIndex === -2), add a sequential suffix to\n    //     generate a unique attribute name.\n\n    // Detect a binding next to self-closing tag end and insert a space to\n    // separate the marker from the tag end:\n    const end =\n      regex === tagEndRegex && strings[i + 1].startsWith('/>') ? ' ' : '';\n    html +=\n      regex === textEndRegex\n        ? s + nodeMarker\n        : attrNameEndIndex >= 0\n          ? (attrNames.push(attrName!),\n            s.slice(0, attrNameEndIndex) +\n              boundAttributeSuffix +\n              s.slice(attrNameEndIndex)) +\n            marker +\n            end\n          : s + marker + (attrNameEndIndex === -2 ? i : end);\n  }\n\n  const htmlResult: string | TrustedHTML =\n    html +\n    (strings[l] || '<?>') +\n    (type === SVG_RESULT ? '</svg>' : type === MATHML_RESULT ? '</math>' : '');\n\n  // Returned as an array for terseness\n  return [trustFromTemplateString(strings, htmlResult), attrNames];\n};\n\n/** @internal */\nexport type {Template};\nclass Template {\n  /** @internal */\n  el!: HTMLTemplateElement;\n\n  parts: Array<TemplatePart> = [];\n\n  constructor(\n    // This property needs to remain unminified.\n    {strings, ['_$litType$']: type}: UncompiledTemplateResult,\n    options?: RenderOptions\n  ) {\n    let node: Node | null;\n    let nodeIndex = 0;\n    let attrNameIndex = 0;\n    const partCount = strings.length - 1;\n    const parts = this.parts;\n\n    // Create template element\n    const [html, attrNames] = getTemplateHtml(strings, type);\n    this.el = Template.createElement(html, options);\n    walker.currentNode = this.el.content;\n\n    // Re-parent SVG or MathML nodes into template root\n    if (type === SVG_RESULT || type === MATHML_RESULT) {\n      const wrapper = this.el.content.firstChild!;\n      wrapper.replaceWith(...wrapper.childNodes);\n    }\n\n    // Walk the template to find binding markers and create TemplateParts\n    while ((node = walker.nextNode()) !== null && parts.length < partCount) {\n      if (node.nodeType === 1) {\n        if (DEV_MODE) {\n          const tag = (node as Element).localName;\n          // Warn if `textarea` includes an expression and throw if `template`\n          // does since these are not supported. We do this by checking\n          // innerHTML for anything that looks like a marker. This catches\n          // cases like bindings in textarea there markers turn into text nodes.\n          if (\n            /^(?:textarea|template)$/i!.test(tag) &&\n            (node as Element).innerHTML.includes(marker)\n          ) {\n            const m =\n              `Expressions are not supported inside \\`${tag}\\` ` +\n              `elements. See https://lit.dev/msg/expression-in-${tag} for more ` +\n              `information.`;\n            if (tag === 'template') {\n              throw new Error(m);\n            } else issueWarning('', m);\n          }\n        }\n        // TODO (justinfagnani): for attempted dynamic tag names, we don't\n        // increment the bindingIndex, and it'll be off by 1 in the element\n        // and off by two after it.\n        if ((node as Element).hasAttributes()) {\n          for (const name of (node as Element).getAttributeNames()) {\n            if (name.endsWith(boundAttributeSuffix)) {\n              const realName = attrNames[attrNameIndex++];\n              const value = (node as Element).getAttribute(name)!;\n              const statics = value.split(marker);\n              const m = /([.?@])?(.*)/.exec(realName)!;\n              parts.push({\n                type: ATTRIBUTE_PART,\n                index: nodeIndex,\n                name: m[2],\n                strings: statics,\n                ctor:\n                  m[1] === '.'\n                    ? PropertyPart\n                    : m[1] === '?'\n                      ? BooleanAttributePart\n                      : m[1] === '@'\n                        ? EventPart\n                        : AttributePart,\n              });\n              (node as Element).removeAttribute(name);\n            } else if (name.startsWith(marker)) {\n              parts.push({\n                type: ELEMENT_PART,\n                index: nodeIndex,\n              });\n              (node as Element).removeAttribute(name);\n            }\n          }\n        }\n        // TODO (justinfagnani): benchmark the regex against testing for each\n        // of the 3 raw text element names.\n        if (rawTextElement.test((node as Element).tagName)) {\n          // For raw text elements we need to split the text content on\n          // markers, create a Text node for each segment, and create\n          // a TemplatePart for each marker.\n          const strings = (node as Element).textContent!.split(marker);\n          const lastIndex = strings.length - 1;\n          if (lastIndex > 0) {\n            (node as Element).textContent = trustedTypes\n              ? (trustedTypes.emptyScript as unknown as '')\n              : '';\n            // Generate a new text node for each literal section\n            // These nodes are also used as the markers for child parts\n            for (let i = 0; i < lastIndex; i++) {\n              (node as Element).append(strings[i], createMarker());\n              // Walk past the marker node we just added\n              walker.nextNode();\n              parts.push({type: CHILD_PART, index: ++nodeIndex});\n            }\n            // Note because this marker is added after the walker's current\n            // node, it will be walked to in the outer loop (and ignored), so\n            // we don't need to adjust nodeIndex here\n            (node as Element).append(strings[lastIndex], createMarker());\n          }\n        }\n      } else if (node.nodeType === 8) {\n        const data = (node as Comment).data;\n        if (data === markerMatch) {\n          parts.push({type: CHILD_PART, index: nodeIndex});\n        } else {\n          let i = -1;\n          while ((i = (node as Comment).data.indexOf(marker, i + 1)) !== -1) {\n            // Comment node has a binding marker inside, make an inactive part\n            // The binding won't work, but subsequent bindings will\n            parts.push({type: COMMENT_PART, index: nodeIndex});\n            // Move to the end of the match\n            i += marker.length - 1;\n          }\n        }\n      }\n      nodeIndex++;\n    }\n\n    if (DEV_MODE) {\n      // If there was a duplicate attribute on a tag, then when the tag is\n      // parsed into an element the attribute gets de-duplicated. We can detect\n      // this mismatch if we haven't precisely consumed every attribute name\n      // when preparing the template. This works because `attrNames` is built\n      // from the template string and `attrNameIndex` comes from processing the\n      // resulting DOM.\n      if (attrNames.length !== attrNameIndex) {\n        throw new Error(\n          `Detected duplicate attribute bindings. This occurs if your template ` +\n            `has duplicate attributes on an element tag. For example ` +\n            `\"<input ?disabled=\\${true} ?disabled=\\${false}>\" contains a ` +\n            `duplicate \"disabled\" attribute. The error was detected in ` +\n            `the following template: \\n` +\n            '`' +\n            strings.join('${...}') +\n            '`'\n        );\n      }\n    }\n\n    // We could set walker.currentNode to another node here to prevent a memory\n    // leak, but every time we prepare a template, we immediately render it\n    // and re-use the walker in new TemplateInstance._clone().\n    debugLogEvent &&\n      debugLogEvent({\n        kind: 'template prep',\n        template: this,\n        clonableTemplate: this.el,\n        parts: this.parts,\n        strings,\n      });\n  }\n\n  // Overridden via `litHtmlPolyfillSupport` to provide platform support.\n  /** @nocollapse */\n  static createElement(html: TrustedHTML, _options?: RenderOptions) {\n    const el = d.createElement('template');\n    el.innerHTML = html as unknown as string;\n    return el;\n  }\n}\n\nexport interface Disconnectable {\n  _$parent?: Disconnectable;\n  _$disconnectableChildren?: Set<Disconnectable>;\n  // Rather than hold connection state on instances, Disconnectables recursively\n  // fetch the connection state from the RootPart they are connected in via\n  // getters up the Disconnectable tree via _$parent references. This pushes the\n  // cost of tracking the isConnected state to `AsyncDirectives`, and avoids\n  // needing to pass all Disconnectables (parts, template instances, and\n  // directives) their connection state each time it changes, which would be\n  // costly for trees that have no AsyncDirectives.\n  _$isConnected: boolean;\n}\n\nfunction resolveDirective(\n  part: ChildPart | AttributePart | ElementPart,\n  value: unknown,\n  parent: DirectiveParent = part,\n  attributeIndex?: number\n): unknown {\n  // Bail early if the value is explicitly noChange. Note, this means any\n  // nested directive is still attached and is not run.\n  if (value === noChange) {\n    return value;\n  }\n  let currentDirective =\n    attributeIndex !== undefined\n      ? (parent as AttributePart).__directives?.[attributeIndex]\n      : (parent as ChildPart | ElementPart | Directive).__directive;\n  const nextDirectiveConstructor = isPrimitive(value)\n    ? undefined\n    : // This property needs to remain unminified.\n      (value as DirectiveResult)['_$litDirective$'];\n  if (currentDirective?.constructor !== nextDirectiveConstructor) {\n    // This property needs to remain unminified.\n    currentDirective?.['_$notifyDirectiveConnectionChanged']?.(false);\n    if (nextDirectiveConstructor === undefined) {\n      currentDirective = undefined;\n    } else {\n      currentDirective = new nextDirectiveConstructor(part as PartInfo);\n      currentDirective._$initialize(part, parent, attributeIndex);\n    }\n    if (attributeIndex !== undefined) {\n      ((parent as AttributePart).__directives ??= [])[attributeIndex] =\n        currentDirective;\n    } else {\n      (parent as ChildPart | Directive).__directive = currentDirective;\n    }\n  }\n  if (currentDirective !== undefined) {\n    value = resolveDirective(\n      part,\n      currentDirective._$resolve(part, (value as DirectiveResult).values),\n      currentDirective,\n      attributeIndex\n    );\n  }\n  return value;\n}\n\nexport type {TemplateInstance};\n/**\n * An updateable instance of a Template. Holds references to the Parts used to\n * update the template instance.\n */\nclass TemplateInstance implements Disconnectable {\n  _$template: Template;\n  _$parts: Array<Part | undefined> = [];\n\n  /** @internal */\n  _$parent: ChildPart;\n  /** @internal */\n  _$disconnectableChildren?: Set<Disconnectable> = undefined;\n\n  constructor(template: Template, parent: ChildPart) {\n    this._$template = template;\n    this._$parent = parent;\n  }\n\n  // Called by ChildPart parentNode getter\n  get parentNode() {\n    return this._$parent.parentNode;\n  }\n\n  // See comment in Disconnectable interface for why this is a getter\n  get _$isConnected() {\n    return this._$parent._$isConnected;\n  }\n\n  // This method is separate from the constructor because we need to return a\n  // DocumentFragment and we don't want to hold onto it with an instance field.\n  _clone(options: RenderOptions | undefined) {\n    const {\n      el: {content},\n      parts: parts,\n    } = this._$template;\n    const fragment = (options?.creationScope ?? d).importNode(content, true);\n    walker.currentNode = fragment;\n\n    let node = walker.nextNode()!;\n    let nodeIndex = 0;\n    let partIndex = 0;\n    let templatePart = parts[0];\n\n    while (templatePart !== undefined) {\n      if (nodeIndex === templatePart.index) {\n        let part: Part | undefined;\n        if (templatePart.type === CHILD_PART) {\n          part = new ChildPart(\n            node as HTMLElement,\n            node.nextSibling,\n            this,\n            options\n          );\n        } else if (templatePart.type === ATTRIBUTE_PART) {\n          part = new templatePart.ctor(\n            node as HTMLElement,\n            templatePart.name,\n            templatePart.strings,\n            this,\n            options\n          );\n        } else if (templatePart.type === ELEMENT_PART) {\n          part = new ElementPart(node as HTMLElement, this, options);\n        }\n        this._$parts.push(part);\n        templatePart = parts[++partIndex];\n      }\n      if (nodeIndex !== templatePart?.index) {\n        node = walker.nextNode()!;\n        nodeIndex++;\n      }\n    }\n    // We need to set the currentNode away from the cloned tree so that we\n    // don't hold onto the tree even if the tree is detached and should be\n    // freed.\n    walker.currentNode = d;\n    return fragment;\n  }\n\n  _update(values: Array<unknown>) {\n    let i = 0;\n    for (const part of this._$parts) {\n      if (part !== undefined) {\n        debugLogEvent &&\n          debugLogEvent({\n            kind: 'set part',\n            part,\n            value: values[i],\n            valueIndex: i,\n            values,\n            templateInstance: this,\n          });\n        if ((part as AttributePart).strings !== undefined) {\n          (part as AttributePart)._$setValue(values, part as AttributePart, i);\n          // The number of values the part consumes is part.strings.length - 1\n          // since values are in between template spans. We increment i by 1\n          // later in the loop, so increment it by part.strings.length - 2 here\n          i += (part as AttributePart).strings!.length - 2;\n        } else {\n          part._$setValue(values[i]);\n        }\n      }\n      i++;\n    }\n  }\n}\n\n/*\n * Parts\n */\ntype AttributeTemplatePart = {\n  readonly type: typeof ATTRIBUTE_PART;\n  readonly index: number;\n  readonly name: string;\n  readonly ctor: typeof AttributePart;\n  readonly strings: ReadonlyArray<string>;\n};\ntype ChildTemplatePart = {\n  readonly type: typeof CHILD_PART;\n  readonly index: number;\n};\ntype ElementTemplatePart = {\n  readonly type: typeof ELEMENT_PART;\n  readonly index: number;\n};\ntype CommentTemplatePart = {\n  readonly type: typeof COMMENT_PART;\n  readonly index: number;\n};\n\n/**\n * A TemplatePart represents a dynamic part in a template, before the template\n * is instantiated. When a template is instantiated Parts are created from\n * TemplateParts.\n */\ntype TemplatePart =\n  | ChildTemplatePart\n  | AttributeTemplatePart\n  | ElementTemplatePart\n  | CommentTemplatePart;\n\nexport type Part =\n  | ChildPart\n  | AttributePart\n  | PropertyPart\n  | BooleanAttributePart\n  | ElementPart\n  | EventPart;\n\nexport type {ChildPart};\nclass ChildPart implements Disconnectable {\n  readonly type = CHILD_PART;\n  readonly options: RenderOptions | undefined;\n  _$committedValue: unknown = nothing;\n  /** @internal */\n  __directive?: Directive;\n  /** @internal */\n  _$startNode: ChildNode;\n  /** @internal */\n  _$endNode: ChildNode | null;\n  private _textSanitizer: ValueSanitizer | undefined;\n  /** @internal */\n  _$parent: Disconnectable | undefined;\n  /**\n   * Connection state for RootParts only (i.e. ChildPart without _$parent\n   * returned from top-level `render`). This field is unused otherwise. The\n   * intention would be clearer if we made `RootPart` a subclass of `ChildPart`\n   * with this field (and a different _$isConnected getter), but the subclass\n   * caused a perf regression, possibly due to making call sites polymorphic.\n   * @internal\n   */\n  __isConnected: boolean;\n\n  // See comment in Disconnectable interface for why this is a getter\n  get _$isConnected() {\n    // ChildParts that are not at the root should always be created with a\n    // parent; only RootChildNode's won't, so they return the local isConnected\n    // state\n    return this._$parent?._$isConnected ?? this.__isConnected;\n  }\n\n  // The following fields will be patched onto ChildParts when required by\n  // AsyncDirective\n  /** @internal */\n  _$disconnectableChildren?: Set<Disconnectable> = undefined;\n  /** @internal */\n  _$notifyConnectionChanged?(\n    isConnected: boolean,\n    removeFromParent?: boolean,\n    from?: number\n  ): void;\n  /** @internal */\n  _$reparentDisconnectables?(parent: Disconnectable): void;\n\n  constructor(\n    startNode: ChildNode,\n    endNode: ChildNode | null,\n    parent: TemplateInstance | ChildPart | undefined,\n    options: RenderOptions | undefined\n  ) {\n    this._$startNode = startNode;\n    this._$endNode = endNode;\n    this._$parent = parent;\n    this.options = options;\n    // Note __isConnected is only ever accessed on RootParts (i.e. when there is\n    // no _$parent); the value on a non-root-part is \"don't care\", but checking\n    // for parent would be more code\n    this.__isConnected = options?.isConnected ?? true;\n    if (ENABLE_EXTRA_SECURITY_HOOKS) {\n      // Explicitly initialize for consistent class shape.\n      this._textSanitizer = undefined;\n    }\n  }\n\n  /**\n   * The parent node into which the part renders its content.\n   *\n   * A ChildPart's content consists of a range of adjacent child nodes of\n   * `.parentNode`, possibly bordered by 'marker nodes' (`.startNode` and\n   * `.endNode`).\n   *\n   * - If both `.startNode` and `.endNode` are non-null, then the part's content\n   * consists of all siblings between `.startNode` and `.endNode`, exclusively.\n   *\n   * - If `.startNode` is non-null but `.endNode` is null, then the part's\n   * content consists of all siblings following `.startNode`, up to and\n   * including the last child of `.parentNode`. If `.endNode` is non-null, then\n   * `.startNode` will always be non-null.\n   *\n   * - If both `.endNode` and `.startNode` are null, then the part's content\n   * consists of all child nodes of `.parentNode`.\n   */\n  get parentNode(): Node {\n    let parentNode: Node = wrap(this._$startNode).parentNode!;\n    const parent = this._$parent;\n    if (\n      parent !== undefined &&\n      parentNode?.nodeType === 11 /* Node.DOCUMENT_FRAGMENT */\n    ) {\n      // If the parentNode is a DocumentFragment, it may be because the DOM is\n      // still in the cloned fragment during initial render; if so, get the real\n      // parentNode the part will be committed into by asking the parent.\n      parentNode = (parent as ChildPart | TemplateInstance).parentNode;\n    }\n    return parentNode;\n  }\n\n  /**\n   * The part's leading marker node, if any. See `.parentNode` for more\n   * information.\n   */\n  get startNode(): Node | null {\n    return this._$startNode;\n  }\n\n  /**\n   * The part's trailing marker node, if any. See `.parentNode` for more\n   * information.\n   */\n  get endNode(): Node | null {\n    return this._$endNode;\n  }\n\n  _$setValue(value: unknown, directiveParent: DirectiveParent = this): void {\n    if (DEV_MODE && this.parentNode === null) {\n      throw new Error(\n        `This \\`ChildPart\\` has no \\`parentNode\\` and therefore cannot accept a value. This likely means the element containing the part was manipulated in an unsupported way outside of Lit's control such that the part's marker nodes were ejected from DOM. For example, setting the element's \\`innerHTML\\` or \\`textContent\\` can do this.`\n      );\n    }\n    value = resolveDirective(this, value, directiveParent);\n    if (isPrimitive(value)) {\n      // Non-rendering child values. It's important that these do not render\n      // empty text nodes to avoid issues with preventing default <slot>\n      // fallback content.\n      if (value === nothing || value == null || value === '') {\n        if (this._$committedValue !== nothing) {\n          debugLogEvent &&\n            debugLogEvent({\n              kind: 'commit nothing to child',\n              start: this._$startNode,\n              end: this._$endNode,\n              parent: this._$parent,\n              options: this.options,\n            });\n          this._$clear();\n        }\n        this._$committedValue = nothing;\n      } else if (value !== this._$committedValue && value !== noChange) {\n        this._commitText(value);\n      }\n      // This property needs to remain unminified.\n    } else if ((value as TemplateResult)['_$litType$'] !== undefined) {\n      this._commitTemplateResult(value as TemplateResult);\n    } else if ((value as Node).nodeType !== undefined) {\n      if (DEV_MODE && this.options?.host === value) {\n        this._commitText(\n          `[probable mistake: rendered a template's host in itself ` +\n            `(commonly caused by writing \\${this} in a template]`\n        );\n        console.warn(\n          `Attempted to render the template host`,\n          value,\n          `inside itself. This is almost always a mistake, and in dev mode `,\n          `we render some warning text. In production however, we'll `,\n          `render it, which will usually result in an error, and sometimes `,\n          `in the element disappearing from the DOM.`\n        );\n        return;\n      }\n      this._commitNode(value as Node);\n    } else if (isIterable(value)) {\n      this._commitIterable(value);\n    } else {\n      // Fallback, will render the string representation\n      this._commitText(value);\n    }\n  }\n\n  private _insert<T extends Node>(node: T) {\n    return wrap(wrap(this._$startNode).parentNode!).insertBefore(\n      node,\n      this._$endNode\n    );\n  }\n\n  private _commitNode(value: Node): void {\n    if (this._$committedValue !== value) {\n      this._$clear();\n      if (\n        ENABLE_EXTRA_SECURITY_HOOKS &&\n        sanitizerFactoryInternal !== noopSanitizer\n      ) {\n        const parentNodeName = this._$startNode.parentNode?.nodeName;\n        if (parentNodeName === 'STYLE' || parentNodeName === 'SCRIPT') {\n          let message = 'Forbidden';\n          if (DEV_MODE) {\n            if (parentNodeName === 'STYLE') {\n              message =\n                `Lit does not support binding inside style nodes. ` +\n                `This is a security risk, as style injection attacks can ` +\n                `exfiltrate data and spoof UIs. ` +\n                `Consider instead using css\\`...\\` literals ` +\n                `to compose styles, and do dynamic styling with ` +\n                `css custom properties, ::parts, <slot>s, ` +\n                `and by mutating the DOM rather than stylesheets.`;\n            } else {\n              message =\n                `Lit does not support binding inside script nodes. ` +\n                `This is a security risk, as it could allow arbitrary ` +\n                `code execution.`;\n            }\n          }\n          throw new Error(message);\n        }\n      }\n      debugLogEvent &&\n        debugLogEvent({\n          kind: 'commit node',\n          start: this._$startNode,\n          parent: this._$parent,\n          value: value,\n          options: this.options,\n        });\n      this._$committedValue = this._insert(value);\n    }\n  }\n\n  private _commitText(value: unknown): void {\n    // If the committed value is a primitive it means we called _commitText on\n    // the previous render, and we know that this._$startNode.nextSibling is a\n    // Text node. We can now just replace the text content (.data) of the node.\n    if (\n      this._$committedValue !== nothing &&\n      isPrimitive(this._$committedValue)\n    ) {\n      const node = wrap(this._$startNode).nextSibling as Text;\n      if (ENABLE_EXTRA_SECURITY_HOOKS) {\n        if (this._textSanitizer === undefined) {\n          this._textSanitizer = createSanitizer(node, 'data', 'property');\n        }\n        value = this._textSanitizer(value);\n      }\n      debugLogEvent &&\n        debugLogEvent({\n          kind: 'commit text',\n          node,\n          value,\n          options: this.options,\n        });\n      (node as Text).data = value as string;\n    } else {\n      if (ENABLE_EXTRA_SECURITY_HOOKS) {\n        const textNode = d.createTextNode('');\n        this._commitNode(textNode);\n        // When setting text content, for security purposes it matters a lot\n        // what the parent is. For example, <style> and <script> need to be\n        // handled with care, while <span> does not. So first we need to put a\n        // text node into the document, then we can sanitize its content.\n        if (this._textSanitizer === undefined) {\n          this._textSanitizer = createSanitizer(textNode, 'data', 'property');\n        }\n        value = this._textSanitizer(value);\n        debugLogEvent &&\n          debugLogEvent({\n            kind: 'commit text',\n            node: textNode,\n            value,\n            options: this.options,\n          });\n        textNode.data = value as string;\n      } else {\n        this._commitNode(d.createTextNode(value as string));\n        debugLogEvent &&\n          debugLogEvent({\n            kind: 'commit text',\n            node: wrap(this._$startNode).nextSibling as Text,\n            value,\n            options: this.options,\n          });\n      }\n    }\n    this._$committedValue = value;\n  }\n\n  private _commitTemplateResult(\n    result: TemplateResult | CompiledTemplateResult\n  ): void {\n    // This property needs to remain unminified.\n    const {values, ['_$litType$']: type} = result;\n    // If $litType$ is a number, result is a plain TemplateResult and we get\n    // the template from the template cache. If not, result is a\n    // CompiledTemplateResult and _$litType$ is a CompiledTemplate and we need\n    // to create the <template> element the first time we see it.\n    const template: Template | CompiledTemplate =\n      typeof type === 'number'\n        ? this._$getTemplate(result as UncompiledTemplateResult)\n        : (type.el === undefined &&\n            (type.el = Template.createElement(\n              trustFromTemplateString(type.h, type.h[0]),\n              this.options\n            )),\n          type);\n\n    if ((this._$committedValue as TemplateInstance)?._$template === template) {\n      debugLogEvent &&\n        debugLogEvent({\n          kind: 'template updating',\n          template,\n          instance: this._$committedValue as TemplateInstance,\n          parts: (this._$committedValue as TemplateInstance)._$parts,\n          options: this.options,\n          values,\n        });\n      (this._$committedValue as TemplateInstance)._update(values);\n    } else {\n      const instance = new TemplateInstance(template as Template, this);\n      const fragment = instance._clone(this.options);\n      debugLogEvent &&\n        debugLogEvent({\n          kind: 'template instantiated',\n          template,\n          instance,\n          parts: instance._$parts,\n          options: this.options,\n          fragment,\n          values,\n        });\n      instance._update(values);\n      debugLogEvent &&\n        debugLogEvent({\n          kind: 'template instantiated and updated',\n          template,\n          instance,\n          parts: instance._$parts,\n          options: this.options,\n          fragment,\n          values,\n        });\n      this._commitNode(fragment);\n      this._$committedValue = instance;\n    }\n  }\n\n  // Overridden via `litHtmlPolyfillSupport` to provide platform support.\n  /** @internal */\n  _$getTemplate(result: UncompiledTemplateResult) {\n    let template = templateCache.get(result.strings);\n    if (template === undefined) {\n      templateCache.set(result.strings, (template = new Template(result)));\n    }\n    return template;\n  }\n\n  private _commitIterable(value: Iterable<unknown>): void {\n    // For an Iterable, we create a new InstancePart per item, then set its\n    // value to the item. This is a little bit of overhead for every item in\n    // an Iterable, but it lets us recurse easily and efficiently update Arrays\n    // of TemplateResults that will be commonly returned from expressions like:\n    // array.map((i) => html`${i}`), by reusing existing TemplateInstances.\n\n    // If value is an array, then the previous render was of an\n    // iterable and value will contain the ChildParts from the previous\n    // render. If value is not an array, clear this part and make a new\n    // array for ChildParts.\n    if (!isArray(this._$committedValue)) {\n      this._$committedValue = [];\n      this._$clear();\n    }\n\n    // Lets us keep track of how many items we stamped so we can clear leftover\n    // items from a previous render\n    const itemParts = this._$committedValue as ChildPart[];\n    let partIndex = 0;\n    let itemPart: ChildPart | undefined;\n\n    for (const item of value) {\n      if (partIndex === itemParts.length) {\n        // If no existing part, create a new one\n        // TODO (justinfagnani): test perf impact of always creating two parts\n        // instead of sharing parts between nodes\n        // https://github.com/lit/lit/issues/1266\n        itemParts.push(\n          (itemPart = new ChildPart(\n            this._insert(createMarker()),\n            this._insert(createMarker()),\n            this,\n            this.options\n          ))\n        );\n      } else {\n        // Reuse an existing part\n        itemPart = itemParts[partIndex];\n      }\n      itemPart._$setValue(item);\n      partIndex++;\n    }\n\n    if (partIndex < itemParts.length) {\n      // itemParts always have end nodes\n      this._$clear(\n        itemPart && wrap(itemPart._$endNode!).nextSibling,\n        partIndex\n      );\n      // Truncate the parts array so _value reflects the current state\n      itemParts.length = partIndex;\n    }\n  }\n\n  /**\n   * Removes the nodes contained within this Part from the DOM.\n   *\n   * @param start Start node to clear from, for clearing a subset of the part's\n   *     DOM (used when truncating iterables)\n   * @param from  When `start` is specified, the index within the iterable from\n   *     which ChildParts are being removed, used for disconnecting directives\n   *     in those Parts.\n   *\n   * @internal\n   */\n  _$clear(\n    start: ChildNode | null = wrap(this._$startNode).nextSibling,\n    from?: number\n  ) {\n    this._$notifyConnectionChanged?.(false, true, from);\n    while (start !== this._$endNode) {\n      // The non-null assertion is safe because if _$startNode.nextSibling is\n      // null, then _$endNode is also null, and we would not have entered this\n      // loop.\n      const n = wrap(start!).nextSibling;\n      wrap(start!).remove();\n      start = n;\n    }\n  }\n\n  /**\n   * Implementation of RootPart's `isConnected`. Note that this method\n   * should only be called on `RootPart`s (the `ChildPart` returned from a\n   * top-level `render()` call). It has no effect on non-root ChildParts.\n   * @param isConnected Whether to set\n   * @internal\n   */\n  setConnected(isConnected: boolean) {\n    if (this._$parent === undefined) {\n      this.__isConnected = isConnected;\n      this._$notifyConnectionChanged?.(isConnected);\n    } else if (DEV_MODE) {\n      throw new Error(\n        'part.setConnected() may only be called on a ' +\n          'RootPart returned from render().'\n      );\n    }\n  }\n}\n\n/**\n * A top-level `ChildPart` returned from `render` that manages the connected\n * state of `AsyncDirective`s created throughout the tree below it.\n */\nexport interface RootPart extends ChildPart {\n  /**\n   * Sets the connection state for `AsyncDirective`s contained within this root\n   * ChildPart.\n   *\n   * lit-html does not automatically monitor the connectedness of DOM rendered;\n   * as such, it is the responsibility of the caller to `render` to ensure that\n   * `part.setConnected(false)` is called before the part object is potentially\n   * discarded, to ensure that `AsyncDirective`s have a chance to dispose of\n   * any resources being held. If a `RootPart` that was previously\n   * disconnected is subsequently re-connected (and its `AsyncDirective`s should\n   * re-connect), `setConnected(true)` should be called.\n   *\n   * @param isConnected Whether directives within this tree should be connected\n   * or not\n   */\n  setConnected(isConnected: boolean): void;\n}\n\nexport type {AttributePart};\nclass AttributePart implements Disconnectable {\n  readonly type:\n    | typeof ATTRIBUTE_PART\n    | typeof PROPERTY_PART\n    | typeof BOOLEAN_ATTRIBUTE_PART\n    | typeof EVENT_PART = ATTRIBUTE_PART;\n  readonly element: HTMLElement;\n  readonly name: string;\n  readonly options: RenderOptions | undefined;\n\n  /**\n   * If this attribute part represents an interpolation, this contains the\n   * static strings of the interpolation. For single-value, complete bindings,\n   * this is undefined.\n   */\n  readonly strings?: ReadonlyArray<string>;\n  /** @internal */\n  _$committedValue: unknown | Array<unknown> = nothing;\n  /** @internal */\n  __directives?: Array<Directive | undefined>;\n  /** @internal */\n  _$parent: Disconnectable;\n  /** @internal */\n  _$disconnectableChildren?: Set<Disconnectable> = undefined;\n\n  protected _sanitizer: ValueSanitizer | undefined;\n\n  get tagName() {\n    return this.element.tagName;\n  }\n\n  // See comment in Disconnectable interface for why this is a getter\n  get _$isConnected() {\n    return this._$parent._$isConnected;\n  }\n\n  constructor(\n    element: HTMLElement,\n    name: string,\n    strings: ReadonlyArray<string>,\n    parent: Disconnectable,\n    options: RenderOptions | undefined\n  ) {\n    this.element = element;\n    this.name = name;\n    this._$parent = parent;\n    this.options = options;\n    if (strings.length > 2 || strings[0] !== '' || strings[1] !== '') {\n      this._$committedValue = new Array(strings.length - 1).fill(new String());\n      this.strings = strings;\n    } else {\n      this._$committedValue = nothing;\n    }\n    if (ENABLE_EXTRA_SECURITY_HOOKS) {\n      this._sanitizer = undefined;\n    }\n  }\n\n  /**\n   * Sets the value of this part by resolving the value from possibly multiple\n   * values and static strings and committing it to the DOM.\n   * If this part is single-valued, `this._strings` will be undefined, and the\n   * method will be called with a single value argument. If this part is\n   * multi-value, `this._strings` will be defined, and the method is called\n   * with the value array of the part's owning TemplateInstance, and an offset\n   * into the value array from which the values should be read.\n   * This method is overloaded this way to eliminate short-lived array slices\n   * of the template instance values, and allow a fast-path for single-valued\n   * parts.\n   *\n   * @param value The part value, or an array of values for multi-valued parts\n   * @param valueIndex the index to start reading values from. `undefined` for\n   *   single-valued parts\n   * @param noCommit causes the part to not commit its value to the DOM. Used\n   *   in hydration to prime attribute parts with their first-rendered value,\n   *   but not set the attribute, and in SSR to no-op the DOM operation and\n   *   capture the value for serialization.\n   *\n   * @internal\n   */\n  _$setValue(\n    value: unknown | Array<unknown>,\n    directiveParent: DirectiveParent = this,\n    valueIndex?: number,\n    noCommit?: boolean\n  ) {\n    const strings = this.strings;\n\n    // Whether any of the values has changed, for dirty-checking\n    let change = false;\n\n    if (strings === undefined) {\n      // Single-value binding case\n      value = resolveDirective(this, value, directiveParent, 0);\n      change =\n        !isPrimitive(value) ||\n        (value !== this._$committedValue && value !== noChange);\n      if (change) {\n        this._$committedValue = value;\n      }\n    } else {\n      // Interpolation case\n      const values = value as Array<unknown>;\n      value = strings[0];\n\n      let i, v;\n      for (i = 0; i < strings.length - 1; i++) {\n        v = resolveDirective(this, values[valueIndex! + i], directiveParent, i);\n\n        if (v === noChange) {\n          // If the user-provided value is `noChange`, use the previous value\n          v = (this._$committedValue as Array<unknown>)[i];\n        }\n        change ||=\n          !isPrimitive(v) || v !== (this._$committedValue as Array<unknown>)[i];\n        if (v === nothing) {\n          value = nothing;\n        } else if (value !== nothing) {\n          value += (v ?? '') + strings[i + 1];\n        }\n        // We always record each value, even if one is `nothing`, for future\n        // change detection.\n        (this._$committedValue as Array<unknown>)[i] = v;\n      }\n    }\n    if (change && !noCommit) {\n      this._commitValue(value);\n    }\n  }\n\n  /** @internal */\n  _commitValue(value: unknown) {\n    if (value === nothing) {\n      (wrap(this.element) as Element).removeAttribute(this.name);\n    } else {\n      if (ENABLE_EXTRA_SECURITY_HOOKS) {\n        if (this._sanitizer === undefined) {\n          this._sanitizer = sanitizerFactoryInternal(\n            this.element,\n            this.name,\n            'attribute'\n          );\n        }\n        value = this._sanitizer(value ?? '');\n      }\n      debugLogEvent &&\n        debugLogEvent({\n          kind: 'commit attribute',\n          element: this.element,\n          name: this.name,\n          value,\n          options: this.options,\n        });\n      (wrap(this.element) as Element).setAttribute(\n        this.name,\n        (value ?? '') as string\n      );\n    }\n  }\n}\n\nexport type {PropertyPart};\nclass PropertyPart extends AttributePart {\n  override readonly type = PROPERTY_PART;\n\n  /** @internal */\n  override _commitValue(value: unknown) {\n    if (ENABLE_EXTRA_SECURITY_HOOKS) {\n      if (this._sanitizer === undefined) {\n        this._sanitizer = sanitizerFactoryInternal(\n          this.element,\n          this.name,\n          'property'\n        );\n      }\n      value = this._sanitizer(value);\n    }\n    debugLogEvent &&\n      debugLogEvent({\n        kind: 'commit property',\n        element: this.element,\n        name: this.name,\n        value,\n        options: this.options,\n      });\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    (this.element as any)[this.name] = value === nothing ? undefined : value;\n  }\n}\n\nexport type {BooleanAttributePart};\nclass BooleanAttributePart extends AttributePart {\n  override readonly type = BOOLEAN_ATTRIBUTE_PART;\n\n  /** @internal */\n  override _commitValue(value: unknown) {\n    debugLogEvent &&\n      debugLogEvent({\n        kind: 'commit boolean attribute',\n        element: this.element,\n        name: this.name,\n        value: !!(value && value !== nothing),\n        options: this.options,\n      });\n    (wrap(this.element) as Element).toggleAttribute(\n      this.name,\n      !!value && value !== nothing\n    );\n  }\n}\n\ntype EventListenerWithOptions = EventListenerOrEventListenerObject &\n  Partial<AddEventListenerOptions>;\n\n/**\n * An AttributePart that manages an event listener via add/removeEventListener.\n *\n * This part works by adding itself as the event listener on an element, then\n * delegating to the value passed to it. This reduces the number of calls to\n * add/removeEventListener if the listener changes frequently, such as when an\n * inline function is used as a listener.\n *\n * Because event options are passed when adding listeners, we must take case\n * to add and remove the part as a listener when the event options change.\n */\nexport type {EventPart};\nclass EventPart extends AttributePart {\n  override readonly type = EVENT_PART;\n\n  constructor(\n    element: HTMLElement,\n    name: string,\n    strings: ReadonlyArray<string>,\n    parent: Disconnectable,\n    options: RenderOptions | undefined\n  ) {\n    super(element, name, strings, parent, options);\n\n    if (DEV_MODE && this.strings !== undefined) {\n      throw new Error(\n        `A \\`<${element.localName}>\\` has a \\`@${name}=...\\` listener with ` +\n          'invalid content. Event listeners in templates must have exactly ' +\n          'one expression and no surrounding text.'\n      );\n    }\n  }\n\n  // EventPart does not use the base _$setValue/_resolveValue implementation\n  // since the dirty checking is more complex\n  /** @internal */\n  override _$setValue(\n    newListener: unknown,\n    directiveParent: DirectiveParent = this\n  ) {\n    newListener =\n      resolveDirective(this, newListener, directiveParent, 0) ?? nothing;\n    if (newListener === noChange) {\n      return;\n    }\n    const oldListener = this._$committedValue;\n\n    // If the new value is nothing or any options change we have to remove the\n    // part as a listener.\n    const shouldRemoveListener =\n      (newListener === nothing && oldListener !== nothing) ||\n      (newListener as EventListenerWithOptions).capture !==\n        (oldListener as EventListenerWithOptions).capture ||\n      (newListener as EventListenerWithOptions).once !==\n        (oldListener as EventListenerWithOptions).once ||\n      (newListener as EventListenerWithOptions).passive !==\n        (oldListener as EventListenerWithOptions).passive;\n\n    // If the new value is not nothing and we removed the listener, we have\n    // to add the part as a listener.\n    const shouldAddListener =\n      newListener !== nothing &&\n      (oldListener === nothing || shouldRemoveListener);\n\n    debugLogEvent &&\n      debugLogEvent({\n        kind: 'commit event listener',\n        element: this.element,\n        name: this.name,\n        value: newListener,\n        options: this.options,\n        removeListener: shouldRemoveListener,\n        addListener: shouldAddListener,\n        oldListener,\n      });\n    if (shouldRemoveListener) {\n      this.element.removeEventListener(\n        this.name,\n        this,\n        oldListener as EventListenerWithOptions\n      );\n    }\n    if (shouldAddListener) {\n      this.element.addEventListener(\n        this.name,\n        this,\n        newListener as EventListenerWithOptions\n      );\n    }\n    this._$committedValue = newListener;\n  }\n\n  handleEvent(event: Event) {\n    if (typeof this._$committedValue === 'function') {\n      this._$committedValue.call(this.options?.host ?? this.element, event);\n    } else {\n      (this._$committedValue as EventListenerObject).handleEvent(event);\n    }\n  }\n}\n\nexport type {ElementPart};\nclass ElementPart implements Disconnectable {\n  readonly type = ELEMENT_PART;\n\n  /** @internal */\n  __directive?: Directive;\n\n  // This is to ensure that every Part has a _$committedValue\n  _$committedValue: undefined;\n\n  /** @internal */\n  _$parent!: Disconnectable;\n\n  /** @internal */\n  _$disconnectableChildren?: Set<Disconnectable> = undefined;\n\n  options: RenderOptions | undefined;\n\n  constructor(\n    public element: Element,\n    parent: Disconnectable,\n    options: RenderOptions | undefined\n  ) {\n    this._$parent = parent;\n    this.options = options;\n  }\n\n  // See comment in Disconnectable interface for why this is a getter\n  get _$isConnected() {\n    return this._$parent._$isConnected;\n  }\n\n  _$setValue(value: unknown): void {\n    debugLogEvent &&\n      debugLogEvent({\n        kind: 'commit to element binding',\n        element: this.element,\n        value,\n        options: this.options,\n      });\n    resolveDirective(this, value);\n  }\n}\n\n/**\n * END USERS SHOULD NOT RELY ON THIS OBJECT.\n *\n * Private exports for use by other Lit packages, not intended for use by\n * external users.\n *\n * We currently do not make a mangled rollup build of the lit-ssr code. In order\n * to keep a number of (otherwise private) top-level exports mangled in the\n * client side code, we export a _$LH object containing those members (or\n * helper methods for accessing private fields of those members), and then\n * re-export them for use in lit-ssr. This keeps lit-ssr agnostic to whether the\n * client-side code is being used in `dev` mode or `prod` mode.\n *\n * This has a unique name, to disambiguate it from private exports in\n * lit-element, which re-exports all of lit-html.\n *\n * @private\n */\nexport const _$LH = {\n  // Used in lit-ssr\n  _boundAttributeSuffix: boundAttributeSuffix,\n  _marker: marker,\n  _markerMatch: markerMatch,\n  _HTML_RESULT: HTML_RESULT,\n  _getTemplateHtml: getTemplateHtml,\n  // Used in tests and private-ssr-support\n  _TemplateInstance: TemplateInstance,\n  _isIterable: isIterable,\n  _resolveDirective: resolveDirective,\n  _ChildPart: ChildPart,\n  _AttributePart: AttributePart,\n  _BooleanAttributePart: BooleanAttributePart,\n  _EventPart: EventPart,\n  _PropertyPart: PropertyPart,\n  _ElementPart: ElementPart,\n};\n\n// Apply polyfills if available\nconst polyfillSupport = DEV_MODE\n  ? global.litHtmlPolyfillSupportDevMode\n  : global.litHtmlPolyfillSupport;\npolyfillSupport?.(Template, ChildPart);\n\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for lit-html usage.\n(global.litHtmlVersions ??= []).push('3.3.1');\nif (DEV_MODE && global.litHtmlVersions.length > 1) {\n  queueMicrotask(() => {\n    issueWarning!(\n      'multiple-versions',\n      `Multiple versions of Lit loaded. ` +\n        `Loading multiple versions is not recommended.`\n    );\n  });\n}\n\n/**\n * Renders a value, usually a lit-html TemplateResult, to the container.\n *\n * This example renders the text \"Hello, Zoe!\" inside a paragraph tag, appending\n * it to the container `document.body`.\n *\n * ```js\n * import {html, render} from 'lit';\n *\n * const name = \"Zoe\";\n * render(html`<p>Hello, ${name}!</p>`, document.body);\n * ```\n *\n * @param value Any [renderable\n *   value](https://lit.dev/docs/templates/expressions/#child-expressions),\n *   typically a {@linkcode TemplateResult} created by evaluating a template tag\n *   like {@linkcode html} or {@linkcode svg}.\n * @param container A DOM container to render to. The first render will append\n *   the rendered value to the container, and subsequent renders will\n *   efficiently update the rendered value if the same result type was\n *   previously rendered there.\n * @param options See {@linkcode RenderOptions} for options documentation.\n * @see\n * {@link https://lit.dev/docs/libraries/standalone-templates/#rendering-lit-html-templates| Rendering Lit HTML Templates}\n */\nexport const render = (\n  value: unknown,\n  container: HTMLElement | DocumentFragment,\n  options?: RenderOptions\n): RootPart => {\n  if (DEV_MODE && container == null) {\n    // Give a clearer error message than\n    //     Uncaught TypeError: Cannot read properties of null (reading\n    //     '_$litPart$')\n    // which reads like an internal Lit error.\n    throw new TypeError(`The container to render into may not be ${container}`);\n  }\n  const renderId = DEV_MODE ? debugLogRenderId++ : 0;\n  const partOwnerNode = options?.renderBefore ?? container;\n  // This property needs to remain unminified.\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  let part: ChildPart = (partOwnerNode as any)['_$litPart$'];\n  debugLogEvent &&\n    debugLogEvent({\n      kind: 'begin render',\n      id: renderId,\n      value,\n      container,\n      options,\n      part,\n    });\n  if (part === undefined) {\n    const endNode = options?.renderBefore ?? null;\n    // This property needs to remain unminified.\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    (partOwnerNode as any)['_$litPart$'] = part = new ChildPart(\n      container.insertBefore(createMarker(), endNode),\n      endNode,\n      undefined,\n      options ?? {}\n    );\n  }\n  part._$setValue(value);\n  debugLogEvent &&\n    debugLogEvent({\n      kind: 'end render',\n      id: renderId,\n      value,\n      container,\n      options,\n      part,\n    });\n  return part as RootPart;\n};\n\nif (ENABLE_EXTRA_SECURITY_HOOKS) {\n  render.setSanitizer = setSanitizer;\n  render.createSanitizer = createSanitizer;\n  if (DEV_MODE) {\n    render._testOnlyClearSanitizerFactoryDoNotCallOrElse =\n      _testOnlyClearSanitizerFactoryDoNotCallOrElse;\n  }\n}\n", "/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\n/**\n * The main LitElement module, which defines the {@linkcode LitElement} base\n * class and related APIs.\n *\n * LitElement components can define a template and a set of observed\n * properties. Changing an observed property triggers a re-render of the\n * element.\n *\n * Import {@linkcode LitElement} and {@linkcode html} from this module to\n * create a component:\n *\n *  ```js\n * import {LitElement, html} from 'lit-element';\n *\n * class MyElement extends LitElement {\n *\n *   // Declare observed properties\n *   static get properties() {\n *     return {\n *       adjective: {}\n *     }\n *   }\n *\n *   constructor() {\n *     this.adjective = 'awesome';\n *   }\n *\n *   // Define the element's template\n *   render() {\n *     return html`<p>your ${adjective} template here</p>`;\n *   }\n * }\n *\n * customElements.define('my-element', MyElement);\n * ```\n *\n * `LitElement` extends {@linkcode ReactiveElement} and adds lit-html\n * templating. The `ReactiveElement` class is provided for users that want to\n * build their own custom element base classes that don't use lit-html.\n *\n * @packageDocumentation\n */\nimport {PropertyValues, ReactiveElement} from '@lit/reactive-element';\nimport {render, RenderOptions, noChange, RootPart} from 'lit-html';\nexport * from '@lit/reactive-element';\nexport * from 'lit-html';\n\nimport {LitUnstable} from 'lit-html';\nimport {ReactiveUnstable} from '@lit/reactive-element';\n\n/**\n * Contains types that are part of the unstable debug API.\n *\n * Everything in this API is not stable and may change or be removed in the future,\n * even on patch releases.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace Unstable {\n  /**\n   * When Lit is running in dev mode and `window.emitLitDebugLogEvents` is true,\n   * we will emit 'lit-debug' events to window, with live details about the update and render\n   * lifecycle. These can be useful for writing debug tooling and visualizations.\n   *\n   * Please be aware that running with window.emitLitDebugLogEvents has performance overhead,\n   * making certain operations that are normally very cheap (like a no-op render) much slower,\n   * because we must copy data and dispatch events.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-namespace\n  export namespace DebugLog {\n    export type Entry =\n      | LitUnstable.DebugLog.Entry\n      | ReactiveUnstable.DebugLog.Entry;\n  }\n}\n/*\n * When using Closure Compiler, JSCompiler_renameProperty(property, object) is\n * replaced at compile time by the munged name for object[property]. We cannot\n * alias this function, so we have to use a small shim that has the same\n * behavior when not compiling.\n */\n/*@__INLINE__*/\nconst JSCompiler_renameProperty = <P extends PropertyKey>(\n  prop: P,\n  _obj: unknown\n): P => prop;\n\nconst DEV_MODE = true;\n// Allows minifiers to rename references to globalThis\nconst global = globalThis;\n\nlet issueWarning: (code: string, warning: string) => void;\n\nif (DEV_MODE) {\n  // Ensure warnings are issued only 1x, even if multiple versions of Lit\n  // are loaded.\n  global.litIssuedWarnings ??= new Set();\n\n  /**\n   * Issue a warning if we haven't already, based either on `code` or `warning`.\n   * Warnings are disabled automatically only by `warning`; disabling via `code`\n   * can be done by users.\n   */\n  issueWarning = (code: string, warning: string) => {\n    warning += ` See https://lit.dev/msg/${code} for more information.`;\n    if (\n      !global.litIssuedWarnings!.has(warning) &&\n      !global.litIssuedWarnings!.has(code)\n    ) {\n      console.warn(warning);\n      global.litIssuedWarnings!.add(warning);\n    }\n  };\n}\n\n/**\n * Base element class that manages element properties and attributes, and\n * renders a lit-html template.\n *\n * To define a component, subclass `LitElement` and implement a\n * `render` method to provide the component's template. Define properties\n * using the {@linkcode LitElement.properties properties} property or the\n * {@linkcode property} decorator.\n */\nexport class LitElement extends ReactiveElement {\n  // This property needs to remain unminified.\n  static ['_$litElement$'] = true;\n\n  /**\n   * @category rendering\n   */\n  readonly renderOptions: RenderOptions = {host: this};\n\n  private __childPart: RootPart | undefined = undefined;\n\n  /**\n   * @category rendering\n   */\n  protected override createRenderRoot() {\n    const renderRoot = super.createRenderRoot();\n    // When adoptedStyleSheets are shimmed, they are inserted into the\n    // shadowRoot by createRenderRoot. Adjust the renderBefore node so that\n    // any styles in Lit content render before adoptedStyleSheets. This is\n    // important so that adoptedStyleSheets have precedence over styles in\n    // the shadowRoot.\n    this.renderOptions.renderBefore ??= renderRoot!.firstChild as ChildNode;\n    return renderRoot;\n  }\n\n  /**\n   * Updates the element. This method reflects property values to attributes\n   * and calls `render` to render DOM via lit-html. Setting properties inside\n   * this method will *not* trigger another update.\n   * @param changedProperties Map of changed properties with old values\n   * @category updates\n   */\n  protected override update(changedProperties: PropertyValues) {\n    // Setting properties in `render` should not trigger an update. Since\n    // updates are allowed after super.update, it's important to call `render`\n    // before that.\n    const value = this.render();\n    if (!this.hasUpdated) {\n      this.renderOptions.isConnected = this.isConnected;\n    }\n    super.update(changedProperties);\n    this.__childPart = render(value, this.renderRoot, this.renderOptions);\n  }\n\n  /**\n   * Invoked when the component is added to the document's DOM.\n   *\n   * In `connectedCallback()` you should setup tasks that should only occur when\n   * the element is connected to the document. The most common of these is\n   * adding event listeners to nodes external to the element, like a keydown\n   * event handler added to the window.\n   *\n   * ```ts\n   * connectedCallback() {\n   *   super.connectedCallback();\n   *   addEventListener('keydown', this._handleKeydown);\n   * }\n   * ```\n   *\n   * Typically, anything done in `connectedCallback()` should be undone when the\n   * element is disconnected, in `disconnectedCallback()`.\n   *\n   * @category lifecycle\n   */\n  override connectedCallback() {\n    super.connectedCallback();\n    this.__childPart?.setConnected(true);\n  }\n\n  /**\n   * Invoked when the component is removed from the document's DOM.\n   *\n   * This callback is the main signal to the element that it may no longer be\n   * used. `disconnectedCallback()` should ensure that nothing is holding a\n   * reference to the element (such as event listeners added to nodes external\n   * to the element), so that it is free to be garbage collected.\n   *\n   * ```ts\n   * disconnectedCallback() {\n   *   super.disconnectedCallback();\n   *   window.removeEventListener('keydown', this._handleKeydown);\n   * }\n   * ```\n   *\n   * An element may be re-connected after being disconnected.\n   *\n   * @category lifecycle\n   */\n  override disconnectedCallback() {\n    super.disconnectedCallback();\n    this.__childPart?.setConnected(false);\n  }\n\n  /**\n   * Invoked on each update to perform rendering tasks. This method may return\n   * any value renderable by lit-html's `ChildPart` - typically a\n   * `TemplateResult`. Setting properties inside this method will *not* trigger\n   * the element to update.\n   * @category rendering\n   */\n  protected render(): unknown {\n    return noChange;\n  }\n}\n\n/**\n * Ensure this class is marked as `finalized` as an optimization ensuring\n * it will not needlessly try to `finalize`.\n *\n * Note this property name is a string to prevent breaking Closure JS Compiler\n * optimizations. See @lit/reactive-element for more information.\n */\n(LitElement as unknown as Record<string, unknown>)[\n  JSCompiler_renameProperty('finalized', LitElement)\n] = true;\n\n// Install hydration if available\nglobal.litElementHydrateSupport?.({LitElement});\n\n// Apply polyfills if available\nconst polyfillSupport = DEV_MODE\n  ? global.litElementPolyfillSupportDevMode\n  : global.litElementPolyfillSupport;\npolyfillSupport?.({LitElement});\n\n/**\n * END USERS SHOULD NOT RELY ON THIS OBJECT.\n *\n * Private exports for use by other Lit packages, not intended for use by\n * external users.\n *\n * We currently do not make a mangled rollup build of the lit-ssr code. In order\n * to keep a number of (otherwise private) top-level exports  mangled in the\n * client side code, we export a _$LE object containing those members (or\n * helper methods for accessing private fields of those members), and then\n * re-export them for use in lit-ssr. This keeps lit-ssr agnostic to whether the\n * client-side code is being used in `dev` mode or `prod` mode.\n *\n * This has a unique name, to disambiguate it from private exports in\n * lit-html, since this module re-exports all of lit-html.\n *\n * @private\n */\nexport const _$LE = {\n  _$attributeToProperty: (\n    el: LitElement,\n    name: string,\n    value: string | null\n  ) => {\n    // eslint-disable-next-line\n    (el as any)._$attributeToProperty(name, value);\n  },\n  // eslint-disable-next-line\n  _$changedProperties: (el: LitElement) => (el as any)._$changedProperties,\n};\n\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for LitElement usage.\n(global.litElementVersions ??= []).push('4.2.1');\nif (DEV_MODE && global.litElementVersions.length > 1) {\n  queueMicrotask(() => {\n    issueWarning!(\n      'multiple-versions',\n      `Multiple versions of Lit loaded. Loading multiple versions ` +\n        `is not recommended.`\n    );\n  });\n}\n", "/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\n/*\n * IMPORTANT: For compatibility with tsickle and the Closure JS compiler, all\n * property decorators (but not class decorators) in this file that have\n * an @ExportDecoratedItems annotation must be defined as a regular function,\n * not an arrow function.\n */\n\nimport type {Constructor} from './base.js';\n\n/**\n * Allow for custom element classes with private constructors\n */\ntype CustomElementClass = Omit<typeof HTMLElement, 'new'>;\n\nexport type CustomElementDecorator = {\n  // legacy\n  (cls: CustomElementClass): void;\n\n  // standard\n  (\n    target: CustomElementClass,\n    context: ClassDecoratorContext<Constructor<HTMLElement>>\n  ): void;\n};\n\n/**\n * Class decorator factory that defines the decorated class as a custom element.\n *\n * ```js\n * @customElement('my-element')\n * class MyElement extends LitElement {\n *   render() {\n *     return html``;\n *   }\n * }\n * ```\n * @category Decorator\n * @param tagName The tag name of the custom element to define.\n */\nexport const customElement =\n  (tagName: string): CustomElementDecorator =>\n  (\n    classOrTarget: CustomElementClass | Constructor<HTMLElement>,\n    context?: ClassDecoratorContext<Constructor<HTMLElement>>\n  ) => {\n    if (context !== undefined) {\n      context.addInitializer(() => {\n        customElements.define(\n          tagName,\n          classOrTarget as CustomElementConstructor\n        );\n      });\n    } else {\n      customElements.define(tagName, classOrTarget as CustomElementConstructor);\n    }\n  };\n", "/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\n/*\n * IMPORTANT: For compatibility with tsickle and the Closure JS compiler, all\n * property decorators (but not class decorators) in this file that have\n * an @ExportDecoratedItems annotation must be defined as a regular function,\n * not an arrow function.\n */\n\nimport {\n  type PropertyDeclaration,\n  type ReactiveElement,\n  defaultConverter,\n  notEqual,\n} from '../reactive-element.js';\nimport type {Interface} from './base.js';\n\nconst DEV_MODE = true;\n\nlet issueWarning: (code: string, warning: string) => void;\n\nif (DEV_MODE) {\n  // Ensure warnings are issued only 1x, even if multiple versions of Lit\n  // are loaded.\n  globalThis.litIssuedWarnings ??= new Set();\n\n  /**\n   * Issue a warning if we haven't already, based either on `code` or `warning`.\n   * Warnings are disabled automatically only by `warning`; disabling via `code`\n   * can be done by users.\n   */\n  issueWarning = (code: string, warning: string) => {\n    warning += ` See https://lit.dev/msg/${code} for more information.`;\n    if (\n      !globalThis.litIssuedWarnings!.has(warning) &&\n      !globalThis.litIssuedWarnings!.has(code)\n    ) {\n      console.warn(warning);\n      globalThis.litIssuedWarnings!.add(warning);\n    }\n  };\n}\n\n// Overloads for property decorator so that TypeScript can infer the correct\n// return type when a decorator is used as an accessor decorator or a setter\n// decorator.\nexport type PropertyDecorator = {\n  // accessor decorator signature\n  <C extends Interface<ReactiveElement>, V>(\n    target: ClassAccessorDecoratorTarget<C, V>,\n    context: ClassAccessorDecoratorContext<C, V>\n  ): ClassAccessorDecoratorResult<C, V>;\n\n  // setter decorator signature\n  <C extends Interface<ReactiveElement>, V>(\n    target: (value: V) => void,\n    context: ClassSetterDecoratorContext<C, V>\n  ): (this: C, value: V) => void;\n\n  // legacy decorator signature\n  (\n    protoOrDescriptor: Object,\n    name: PropertyKey,\n    descriptor?: PropertyDescriptor\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  ): any;\n};\n\nconst legacyProperty = (\n  options: PropertyDeclaration | undefined,\n  proto: Object,\n  name: PropertyKey\n) => {\n  const hasOwnProperty = proto.hasOwnProperty(name);\n  (proto.constructor as typeof ReactiveElement).createProperty(name, options);\n  // For accessors (which have a descriptor on the prototype) we need to\n  // return a descriptor, otherwise TypeScript overwrites the descriptor we\n  // define in createProperty() with the original descriptor. We don't do this\n  // for fields, which don't have a descriptor, because this could overwrite\n  // descriptor defined by other decorators.\n  return hasOwnProperty\n    ? Object.getOwnPropertyDescriptor(proto, name)\n    : undefined;\n};\n\n// This is duplicated from a similar variable in reactive-element.ts, but\n// actually makes sense to have this default defined with the decorator, so\n// that different decorators could have different defaults.\nconst defaultPropertyDeclaration: PropertyDeclaration = {\n  attribute: true,\n  type: String,\n  converter: defaultConverter,\n  reflect: false,\n  hasChanged: notEqual,\n};\n\n// Temporary type, until google3 is on TypeScript 5.2\ntype StandardPropertyContext<C, V> = (\n  | ClassAccessorDecoratorContext<C, V>\n  | ClassSetterDecoratorContext<C, V>\n) & {metadata: object};\n\n/**\n * Wraps a class accessor or setter so that `requestUpdate()` is called with the\n * property name and old value when the accessor is set.\n */\nexport const standardProperty = <C extends Interface<ReactiveElement>, V>(\n  options: PropertyDeclaration = defaultPropertyDeclaration,\n  target: ClassAccessorDecoratorTarget<C, V> | ((value: V) => void),\n  context: StandardPropertyContext<C, V>\n): ClassAccessorDecoratorResult<C, V> | ((this: C, value: V) => void) => {\n  const {kind, metadata} = context;\n\n  if (DEV_MODE && metadata == null) {\n    issueWarning(\n      'missing-class-metadata',\n      `The class ${target} is missing decorator metadata. This ` +\n        `could mean that you're using a compiler that supports decorators ` +\n        `but doesn't support decorator metadata, such as TypeScript 5.1. ` +\n        `Please update your compiler.`\n    );\n  }\n\n  // Store the property options\n  let properties = globalThis.litPropertyMetadata.get(metadata);\n  if (properties === undefined) {\n    globalThis.litPropertyMetadata.set(metadata, (properties = new Map()));\n  }\n  if (kind === 'setter') {\n    options = Object.create(options);\n    options.wrapped = true;\n  }\n  properties.set(context.name, options);\n\n  if (kind === 'accessor') {\n    // Standard decorators cannot dynamically modify the class, so we can't\n    // replace a field with accessors. The user must use the new `accessor`\n    // keyword instead.\n    const {name} = context;\n    return {\n      set(this: ReactiveElement, v: V) {\n        const oldValue = (\n          target as ClassAccessorDecoratorTarget<C, V>\n        ).get.call(this as unknown as C);\n        (target as ClassAccessorDecoratorTarget<C, V>).set.call(\n          this as unknown as C,\n          v\n        );\n        this.requestUpdate(name, oldValue, options);\n      },\n      init(this: ReactiveElement, v: V): V {\n        if (v !== undefined) {\n          this._$changeProperty(name, undefined, options, v);\n        }\n        return v;\n      },\n    } as unknown as ClassAccessorDecoratorResult<C, V>;\n  } else if (kind === 'setter') {\n    const {name} = context;\n    return function (this: ReactiveElement, value: V) {\n      const oldValue = this[name as keyof ReactiveElement];\n      (target as (value: V) => void).call(this, value);\n      this.requestUpdate(name, oldValue, options);\n    } as unknown as (this: C, value: V) => void;\n  }\n  throw new Error(`Unsupported decorator location: ${kind}`);\n};\n\n/**\n * A class field or accessor decorator which creates a reactive property that\n * reflects a corresponding attribute value. When a decorated property is set\n * the element will update and render. A {@linkcode PropertyDeclaration} may\n * optionally be supplied to configure property features.\n *\n * This decorator should only be used for public fields. As public fields,\n * properties should be considered as primarily settable by element users,\n * either via attribute or the property itself.\n *\n * Generally, properties that are changed by the element should be private or\n * protected fields and should use the {@linkcode state} decorator.\n *\n * However, sometimes element code does need to set a public property. This\n * should typically only be done in response to user interaction, and an event\n * should be fired informing the user; for example, a checkbox sets its\n * `checked` property when clicked and fires a `changed` event. Mutating public\n * properties should typically not be done for non-primitive (object or array)\n * properties. In other cases when an element needs to manage state, a private\n * property decorated via the {@linkcode state} decorator should be used. When\n * needed, state properties can be initialized via public properties to\n * facilitate complex interactions.\n *\n * ```ts\n * class MyElement {\n *   @property({ type: Boolean })\n *   clicked = false;\n * }\n * ```\n * @category Decorator\n * @ExportDecoratedItems\n */\nexport function property(options?: PropertyDeclaration): PropertyDecorator {\n  return <C extends Interface<ReactiveElement>, V>(\n    protoOrTarget:\n      | object\n      | ClassAccessorDecoratorTarget<C, V>\n      | ((value: V) => void),\n    nameOrContext:\n      | PropertyKey\n      | ClassAccessorDecoratorContext<C, V>\n      | ClassSetterDecoratorContext<C, V>\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  ): any => {\n    return (\n      typeof nameOrContext === 'object'\n        ? standardProperty<C, V>(\n            options,\n            protoOrTarget as\n              | ClassAccessorDecoratorTarget<C, V>\n              | ((value: V) => void),\n            nameOrContext as StandardPropertyContext<C, V>\n          )\n        : legacyProperty(\n            options,\n            protoOrTarget as Object,\n            nameOrContext as PropertyKey\n          )\n    ) as PropertyDecorator;\n  };\n}\n", "/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\n/**\n * Generates a public interface type that removes private and protected fields.\n * This allows accepting otherwise incompatible versions of the type (e.g. from\n * multiple copies of the same package in `node_modules`).\n */\nexport type Interface<T> = {\n  [K in keyof T]: T[K];\n};\n\nexport type Constructor<T> = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  new (...args: any[]): T;\n};\n\n/**\n * Wraps up a few best practices when returning a property descriptor from a\n * decorator.\n *\n * Marks the defined property as configurable, and enumerable, and handles\n * the case where we have a busted Reflect.decorate zombiefill (e.g. in Angular\n * apps).\n *\n * @internal\n */\nexport const desc = (\n  obj: object,\n  name: PropertyKey | ClassAccessorDecoratorContext<unknown, unknown>,\n  descriptor: PropertyDescriptor\n) => {\n  // For backwards compatibility, we keep them configurable and enumerable.\n  descriptor.configurable = true;\n  descriptor.enumerable = true;\n  if (\n    // We check for Reflect.decorate each time, in case the zombiefill\n    // is applied via lazy loading some Angular code.\n    (Reflect as typeof Reflect & {decorate?: unknown}).decorate &&\n    typeof name !== 'object'\n  ) {\n    // If we're called as a legacy decorator, and Reflect.decorate is present\n    // then we have no guarantees that the returned descriptor will be\n    // defined on the class, so we must apply it directly ourselves.\n\n    Object.defineProperty(obj, name, descriptor);\n  }\n  return descriptor;\n};\n", "/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\n/*\n * IMPORTANT: For compatibility with tsickle and the Closure JS compiler, all\n * property decorators (but not class decorators) in this file that have\n * an @ExportDecoratedItems annotation must be defined as a regular function,\n * not an arrow function.\n */\nimport type {ReactiveElement} from '../reactive-element.js';\nimport {desc, type Interface} from './base.js';\n\nconst DEV_MODE = true;\n\nlet issueWarning: (code: string, warning: string) => void;\n\nif (DEV_MODE) {\n  // Ensure warnings are issued only 1x, even if multiple versions of Lit\n  // are loaded.\n  globalThis.litIssuedWarnings ??= new Set();\n\n  /**\n   * Issue a warning if we haven't already, based either on `code` or `warning`.\n   * Warnings are disabled automatically only by `warning`; disabling via `code`\n   * can be done by users.\n   */\n  issueWarning = (code: string, warning: string) => {\n    warning += code\n      ? ` See https://lit.dev/msg/${code} for more information.`\n      : '';\n    if (\n      !globalThis.litIssuedWarnings!.has(warning) &&\n      !globalThis.litIssuedWarnings!.has(code)\n    ) {\n      console.warn(warning);\n      globalThis.litIssuedWarnings!.add(warning);\n    }\n  };\n}\n\nexport type QueryDecorator = {\n  // legacy\n  (\n    proto: Interface<ReactiveElement>,\n    name: PropertyKey,\n    descriptor?: PropertyDescriptor\n    // Note TypeScript requires the return type to be `void|any`\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  ): void | any;\n\n  // standard\n  <C extends Interface<ReactiveElement>, V extends Element | null>(\n    value: ClassAccessorDecoratorTarget<C, V>,\n    context: ClassAccessorDecoratorContext<C, V>\n  ): ClassAccessorDecoratorResult<C, V>;\n};\n\n/**\n * A property decorator that converts a class property into a getter that\n * executes a querySelector on the element's renderRoot.\n *\n * @param selector A DOMString containing one or more selectors to match.\n * @param cache An optional boolean which when true performs the DOM query only\n *     once and caches the result.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector\n *\n * ```ts\n * class MyElement {\n *   @query('#first')\n *   first: HTMLDivElement;\n *\n *   render() {\n *     return html`\n *       <div id=\"first\"></div>\n *       <div id=\"second\"></div>\n *     `;\n *   }\n * }\n * ```\n * @category Decorator\n */\nexport function query(selector: string, cache?: boolean): QueryDecorator {\n  return (<C extends Interface<ReactiveElement>, V extends Element | null>(\n    protoOrTarget: ClassAccessorDecoratorTarget<C, V>,\n    nameOrContext: PropertyKey | ClassAccessorDecoratorContext<C, V>,\n    descriptor?: PropertyDescriptor\n  ) => {\n    const doQuery = (el: Interface<ReactiveElement>): V => {\n      const result = (el.renderRoot?.querySelector(selector) ?? null) as V;\n      if (DEV_MODE && result === null && cache && !el.hasUpdated) {\n        const name =\n          typeof nameOrContext === 'object'\n            ? nameOrContext.name\n            : nameOrContext;\n        issueWarning(\n          '',\n          `@query'd field ${JSON.stringify(String(name))} with the 'cache' ` +\n            `flag set for selector '${selector}' has been accessed before ` +\n            `the first update and returned null. This is expected if the ` +\n            `renderRoot tree has not been provided beforehand (e.g. via ` +\n            `Declarative Shadow DOM). Therefore the value hasn't been cached.`\n        );\n      }\n      // TODO: if we want to allow users to assert that the query will never\n      // return null, we need a new option and to throw here if the result\n      // is null.\n      return result;\n    };\n    if (cache) {\n      // Accessors to wrap from either:\n      //   1. The decorator target, in the case of standard decorators\n      //   2. The property descriptor, in the case of experimental decorators\n      //      on auto-accessors.\n      //   3. Functions that access our own cache-key property on the instance,\n      //      in the case of experimental decorators on fields.\n      const {get, set} =\n        typeof nameOrContext === 'object'\n          ? protoOrTarget\n          : descriptor ??\n            (() => {\n              const key = DEV_MODE\n                ? Symbol(`${String(nameOrContext)} (@query() cache)`)\n                : Symbol();\n              type WithCache = ReactiveElement & {\n                [key: symbol]: Element | null;\n              };\n              return {\n                get() {\n                  return (this as WithCache)[key];\n                },\n                set(v) {\n                  (this as WithCache)[key] = v;\n                },\n              };\n            })();\n      return desc(protoOrTarget, nameOrContext, {\n        get(this: ReactiveElement): V {\n          let result: V = get!.call(this);\n          if (result === undefined) {\n            result = doQuery(this);\n            if (result !== null || this.hasUpdated) {\n              set!.call(this, result);\n            }\n          }\n          return result;\n        },\n      });\n    } else {\n      // This object works as the return type for both standard and\n      // experimental decorators.\n      return desc(protoOrTarget, nameOrContext, {\n        get(this: ReactiveElement) {\n          return doQuery(this);\n        },\n      });\n    }\n  }) as QueryDecorator;\n}\n", "import { LitElement, html, css } from \"lit\";\nimport { customElement, property, query } from \"lit/decorators.js\";\nimport { FetchRequest } from \"@rails/request.js\";\n\ninterface FieldPositions {\n  width?: number;\n  height?: number;\n  left?: number;\n  top?: number;\n}\n\n@customElement(\"pdf-form-field\")\nclass PdfFormFieldElement extends LitElement {\n  private static activeInstance: PdfFormFieldElement | null = null;\n\n  private readonly PDF_US_LETTER_WIDTH = 612;\n  private readonly PDF_US_LETTER_HEIGHT = 792;\n  private readonly MINIMUM_SIZE = 10;\n  private readonly SAVE_DELAY = 500;\n\n  private isResizing: boolean = false;\n  private isDragging: boolean = false;\n  private hasDragStarted: boolean = false;\n\n  private clickStartX: number = 0;\n  private clickStartY: number = 0;\n  private startX: number = 0;\n  private startY: number = 0;\n  private startWidth: number = 0;\n  private startHeight: number = 0;\n  private startLeft: number = 0;\n  private startTop: number = 0;\n  private saveTimer: number | null = null;\n\n  @property()\n  name?: string = \"\";\n\n  @property()\n  signer?: string = \"\";\n\n  @property({ type: Object })\n  positions?: FieldPositions = {};\n\n  @property()\n  type?: string = \"\";\n\n  @property()\n  src?: string = \"\";\n\n  @property({ type: String, attribute: \"default-value\" })\n  defaultValue?: string = \"\";\n\n  @property()\n  align?: string = \"\";\n\n  @property({ type: String, attribute: \"font-size\" })\n  fontSize?: string = \"\";\n\n  @property({ type: Boolean, reflect: true })\n  active: boolean = false;\n\n  @query(\".field-container\")\n  private fieldElement!: HTMLElement;\n\n  private handleDocumentMouseMove = this.onDocumentMouseMove.bind(this);\n  private handleDocumentMouseUp = this.onDocumentMouseUp.bind(this);\n  private handleDocumentClick = this.onDocumentClick.bind(this);\n  private handlePotentialDragMove = this.onPotentialDragMove.bind(this);\n  private handlePotentialDragEnd = this.onPotentialDragEnd.bind(this);\n\n  private _getAlignmentCSSVars() {\n    const alignmentMap = {\n      top_left: {\n        \"--align-items\": \"flex-start\",\n        \"--justify-content\": \"flex-start\",\n      },\n      top_center: {\n        \"--align-items\": \"flex-start\",\n        \"--justify-content\": \"center\",\n      },\n      top_right: {\n        \"--align-items\": \"flex-start\",\n        \"--justify-content\": \"flex-end\",\n      },\n      center_left: {\n        \"--align-items\": \"center\",\n        \"--justify-content\": \"flex-start\",\n      },\n      center_center: {\n        \"--align-items\": \"center\",\n        \"--justify-content\": \"center\",\n      },\n      center_right: {\n        \"--align-items\": \"center\",\n        \"--justify-content\": \"flex-end\",\n      },\n      bottom_left: {\n        \"--align-items\": \"flex-end\",\n        \"--justify-content\": \"flex-start\",\n      },\n      bottom_center: {\n        \"--align-items\": \"flex-end\",\n        \"--justify-content\": \"center\",\n      },\n      bottom_right: {\n        \"--align-items\": \"flex-end\",\n        \"--justify-content\": \"flex-end\",\n      },\n    };\n\n    const vars =\n      alignmentMap[this.align as keyof typeof alignmentMap] ||\n      alignmentMap[\"center_center\"];\n    return Object.entries(vars)\n      .map(([key, value]) => `${key}: ${value}`)\n      .join(\"; \");\n  }\n\n  static styles = css`\n    .field-container {\n      position: absolute;\n    }\n\n    .field {\n      position: absolute;\n      top: 0;\n      left: 0;\n      bottom: 0;\n      right: 0;\n\n      border-width: 1px;\n      border-style: solid;\n\n      border-color: var(--signer-none-color);\n      background: color-mix(in srgb, var(--signer-none-color) 20%, transparent);\n    }\n\n    .field-container:hover {\n      cursor: pointer;\n    }\n\n    .field-container span.default-value {\n      position: absolute;\n      font-size: var(--font-size);\n      display: flex;\n      align-items: var(--align-items, center);\n      justify-content: var(--justify-content, center);\n      height: 100%;\n      width: 100%;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n      top: 0;\n      left: 0;\n    }\n\n    .field-container.type-checkbox span.default-value {\n      font-size: 12px;\n      align-items: center;\n      justify-content: center;\n    }\n\n    .signer-patient .field {\n      background: color-mix(\n        in srgb,\n        var(--signer-patient-color) 20%,\n        transparent\n      );\n\n      border-color: var(--signer-patient-color);\n    }\n\n    .signer-attending_provider .field {\n      background: color-mix(\n        in srgb,\n        var(--signer-attending-provider-color) 20%,\n        transparent\n      );\n\n      border-color: var(--signer-attending-provider-color);\n    }\n\n    .signer-prefilled .field {\n      background: color-mix(\n        in srgb,\n        var(--signer-prefilled-color) 20%,\n        transparent\n      );\n\n      border-color: var(--signer-prefilled-color);\n    }\n\n    .signer-nurse .field {\n      background: color-mix(\n        in srgb,\n        var(--signer-nurse-color) 20%,\n        transparent\n      );\n      border-color: var(--signer-nurse-color);\n    }\n\n    .signer-witness .field {\n      background: color-mix(\n        in srgb,\n        var(--signer-witness-color) 20%,\n        transparent\n      );\n\n      border-color: var(--signer-witness-color);\n    }\n\n    .signer-authorized_representative .field {\n      background: color-mix(\n        in srgb,\n        var(--signer-authorized-representative-color) 20%,\n        transparent\n      );\n\n      border-color: var(--signer-authorized-representative-color);\n    }\n\n    .field-container .resizers {\n      width: 100%;\n      height: 100%;\n      box-sizing: border-box;\n      display: none;\n    }\n\n    .field-container.active .resizers {\n      display: block;\n    }\n\n    .field-container .resizers .resizer {\n      width: 5px;\n      height: 5px;\n      border-radius: 50%; /*magic to turn square into circle*/\n      background: white;\n      border: 3px solid #4286f4;\n      position: absolute;\n    }\n\n    .field-container .resizers .resizer.bottom-right {\n      right: -5px;\n      bottom: -5px;\n      cursor: nwse-resize;\n    }\n\n    .field-toolbar {\n      position: absolute;\n      top: -22px;\n      background: #fff;\n      border: 1px solid #e5e7eb;\n      border-top-left-radius: 0.25rem;\n      border-top-right-radius: 0.25rem;\n      display: none;\n      padding: 0 3px;\n      gap: 3px;\n      align-items: center;\n    }\n\n    .field-container.active .field-toolbar {\n      display: flex;\n    }\n\n    .field-toolbar span {\n      font-size: 12px;\n      border-right: 1px solid #e5e7eb;\n      padding-right: 3px;\n      display: block;\n      white-space: nowrap;\n    }\n\n    .field-toolbar a {\n      text-decoration: none;\n      font-size: 14px;\n      display: block;\n      padding: 0 3px;\n    }\n\n    :host(.resizing-active) ~ * {\n      pointer-events: none;\n    }\n  `;\n\n  private getDefaultValue() {\n    if (!this.defaultValue) return \"\";\n    if (this.type === \"checkbox\" && this.defaultValue === \"true\") return \"\u2713\";\n    return this.defaultValue;\n  }\n\n  render() {\n    return html`\n      <div\n        class=\"field-container signer-${this.signer} type-${this.type} ${this\n          .active\n          ? \"active\"\n          : \"\"}\"\n        style=\"width: ${this.positions.width}%; height: ${this.positions\n          .height}%; left: ${this.positions.left}%; top: ${this.positions\n          .top}%; --font-size: ${this\n          .fontSize}px; ${this._getAlignmentCSSVars()}\"\n        @dblclick=${this.onDoubleClick}\n        @mousedown=${this.onFieldMouseDown}\n      >\n        <div class=\"field-toolbar\">\n          <span class=\"name\">${this.name}</span>\n          <slot name=\"delete-button\"></slot>\n        </div>\n        <div class=\"field\"></div>\n        <div class=\"resizers\">\n          <div\n            class=\"resizer bottom-right\"\n            @mousedown=${this.onResizerMouseDown}\n          ></div>\n        </div>\n        <span class=\"default-value\">${this.getDefaultValue()}</span>\n      </div>\n    `;\n  }\n\n  private onDoubleClick(event: MouseEvent) {\n    event.stopPropagation();\n    event.preventDefault();\n\n    if ((window as any).Turbo) {\n      (window as any).Turbo.visit(`${this.src}/edit`, { frame: \"modal\" });\n    }\n  }\n\n  private onFieldMouseDown(event: MouseEvent) {\n    if ((event.target as HTMLElement).classList.contains(\"resizer\")) return;\n\n    this.setActive();\n\n    this.clickStartX = event.clientX;\n    this.clickStartY = event.clientY;\n    this.hasDragStarted = false;\n\n    document.addEventListener(\"mousemove\", this.handlePotentialDragMove);\n    document.addEventListener(\"mouseup\", this.handlePotentialDragEnd);\n  }\n\n  private onPotentialDragMove(event: MouseEvent) {\n    const deltaX = Math.abs(event.clientX - this.clickStartX);\n    const deltaY = Math.abs(event.clientY - this.clickStartY);\n\n    if ((deltaX > 3 || deltaY > 3) && !this.hasDragStarted) {\n      this.hasDragStarted = true;\n\n      document.removeEventListener(\"mousemove\", this.handlePotentialDragMove);\n      document.removeEventListener(\"mouseup\", this.handlePotentialDragEnd);\n\n      this.startOperation(\"drag\", event);\n    }\n  }\n\n  private onPotentialDragEnd() {\n    document.removeEventListener(\"mousemove\", this.handlePotentialDragMove);\n    document.removeEventListener(\"mouseup\", this.handlePotentialDragEnd);\n  }\n\n  private onResizerMouseDown(event: MouseEvent) {\n    event.stopPropagation();\n    this.startOperation(\"resize\", event);\n  }\n\n  private setActive() {\n    const allFields = document.querySelectorAll(\"pdf-form-field\");\n    allFields.forEach((field) => {\n      if (field !== this) {\n        (field as PdfFormFieldElement).active = false;\n      }\n    });\n\n    this.active = true;\n    PdfFormFieldElement.activeInstance = this;\n  }\n\n  private startOperation(type: \"drag\" | \"resize\", event: MouseEvent) {\n    event.stopPropagation();\n    event.preventDefault();\n\n    // Prevent multiple instances from resizing simultaneously\n    if (PdfFormFieldElement.activeInstance) {\n      PdfFormFieldElement.activeInstance.stopOperation();\n    }\n\n    // Set this instance as the current resizing instance\n    PdfFormFieldElement.activeInstance = this;\n\n    this.startX = event.clientX;\n    this.startY = event.clientY;\n\n    const rect = this.fieldElement.getBoundingClientRect();\n    const container = this.fieldElement.offsetParent as HTMLElement;\n    const containerRect = container.getBoundingClientRect();\n\n    this.startWidth = rect.width;\n    this.startHeight = rect.height;\n    this.startLeft = rect.left - containerRect.left;\n    this.startTop = rect.top - containerRect.top;\n\n    if (type === \"drag\") {\n      this.isDragging = true;\n      document.body.style.cursor = \"move\";\n    } else {\n      this.isResizing = true;\n      document.body.style.cursor = \"nwse-resize\";\n    }\n\n    this.fieldElement.classList.add(\"operative-active\");\n    document.body.style.userSelect = \"none\";\n\n    document.addEventListener(\"mousemove\", this.handleDocumentMouseMove);\n    document.addEventListener(\"mouseup\", this.handleDocumentMouseUp);\n  }\n\n  onDocumentMouseMove(event: MouseEvent) {\n    if (PdfFormFieldElement.activeInstance !== this) {\n      return;\n    }\n\n    const deltaX = event.clientX - this.startX;\n    const deltaY = event.clientY - this.startY;\n\n    if (this.isDragging) {\n      this.updatePosition(deltaX, deltaY);\n    } else if (this.isResizing) {\n      this.updateSize(deltaX, deltaY);\n    }\n  }\n\n  private updatePosition(deltaX: number, deltaY: number) {\n    const container = this.fieldElement.offsetParent as HTMLElement;\n    const newLeft = Math.max(\n      0,\n      Math.min(\n        this.startLeft + deltaX,\n        container.clientWidth - this.fieldElement.clientWidth,\n      ),\n    );\n    const newTop = Math.max(\n      0,\n      Math.min(\n        this.startTop + deltaY,\n        container.clientHeight - this.fieldElement.clientHeight,\n      ),\n    );\n\n    this.fieldElement.style.left = `${newLeft}px`;\n    this.fieldElement.style.top = `${newTop}px`;\n  }\n\n  private updateSize(deltaX: number, deltaY: number) {\n    const newWidth = Math.max(this.MINIMUM_SIZE, this.startWidth + deltaX);\n    const newHeight = Math.max(this.MINIMUM_SIZE, this.startHeight + deltaY);\n\n    this.fieldElement.style.width = `${newWidth}px`;\n    this.fieldElement.style.height = `${newHeight}px`;\n  }\n\n  private onDocumentMouseUp() {\n    this.stopOperation();\n  }\n\n  private stopOperation() {\n    if (!this.isResizing && !this.isDragging) return;\n\n    this.isResizing = false;\n    this.isDragging = false;\n\n    // Clear the current resizing instance if it's this one\n    if (PdfFormFieldElement.activeInstance === this) {\n      PdfFormFieldElement.activeInstance = null;\n    }\n\n    // Remove the global event listeners\n    document.removeEventListener(\"mousemove\", this.handleDocumentMouseMove);\n    document.removeEventListener(\"mouseup\", this.handleDocumentMouseUp);\n\n    // Remove the resizing class and restore styles\n    this.fieldElement.classList.remove(\"operative-active\");\n    document.body.style.cursor = \"\";\n    document.body.style.userSelect = \"\";\n\n    this.debouncedSave();\n  }\n\n  private debouncedSave() {\n    if (this.saveTimer) {\n      clearTimeout(this.saveTimer);\n    }\n\n    this.saveTimer = window.setTimeout(async () => {\n      await this.saveField();\n    }, this.SAVE_DELAY);\n  }\n\n  private async saveField() {\n    if (!this.fieldElement || !this.src) return;\n\n    try {\n      const rect = this.fieldElement.getBoundingClientRect();\n      const container = this.fieldElement.offsetParent as HTMLElement;\n      const containerRect = container.getBoundingClientRect();\n\n      const widthPercent = (rect.width / container.clientWidth) * 100;\n      const heightPercent = (rect.height / container.clientHeight) * 100;\n      const leftPercent =\n        ((rect.left - containerRect.left) / container.clientWidth) * 100;\n      const topPercent =\n        ((rect.top - containerRect.top) / container.clientHeight) * 100;\n\n      const pdfWidth = (widthPercent / 100) * this.PDF_US_LETTER_WIDTH;\n      const pdfHeight = (heightPercent / 100) * this.PDF_US_LETTER_HEIGHT;\n      const pdfLeft = (leftPercent / 100) * this.PDF_US_LETTER_WIDTH;\n      const pdfTop =\n        this.PDF_US_LETTER_HEIGHT -\n        (topPercent / 100) * this.PDF_US_LETTER_HEIGHT;\n\n      const request = new FetchRequest(\"patch\", `${this.src}.json`, {\n        body: JSON.stringify({\n          pdf_form_template_field: {\n            left: pdfLeft,\n            top: pdfTop,\n            width: pdfWidth,\n            height: pdfHeight,\n          },\n        }),\n      });\n      const response = await request.perform();\n\n      if (response.ok) {\n        console.log(\"Saved field\");\n      }\n    } catch (error) {\n      console.error(\"Error saving field: \", error);\n    }\n  }\n\n  connectedCallback(): void {\n    super.connectedCallback();\n    document.addEventListener(\"click\", this.handleDocumentClick);\n  }\n\n  // Clean up when component is removed\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    if (this.saveTimer) clearTimeout(this.saveTimer);\n    this.stopOperation();\n    document.removeEventListener(\"click\", this.handleDocumentClick);\n  }\n\n  private onDocumentClick(event: MouseEvent) {\n    const clickedField = (event.target as Element).closest(\"pdf-form-field\");\n\n    if (!clickedField) {\n      this.active = false;\n      if (PdfFormFieldElement.activeInstance === this) {\n        PdfFormFieldElement.activeInstance = null;\n      }\n    }\n  }\n}\n", "import { Controller as n } from \"@hotwired/stimulus\";\nfunction r(t, e) {\n  let i;\n  return (...o) => {\n    const s = this;\n    clearTimeout(i), i = setTimeout(() => t.apply(s, o), e);\n  };\n}\nclass l extends n {\n  initialize() {\n    this.autogrow = this.autogrow.bind(this);\n  }\n  connect() {\n    this.element.style.overflow = \"hidden\";\n    const e = this.resizeDebounceDelayValue;\n    this.onResize = e > 0 ? r(this.autogrow, e) : this.autogrow, this.autogrow(), this.element.addEventListener(\"input\", this.autogrow), window.addEventListener(\"resize\", this.onResize);\n  }\n  disconnect() {\n    window.removeEventListener(\"resize\", this.onResize);\n  }\n  autogrow() {\n    this.element.style.height = \"auto\", this.element.style.height = `${this.element.scrollHeight}px`;\n  }\n}\nl.values = {\n  resizeDebounceDelay: {\n    type: Number,\n    default: 100\n  }\n};\nexport {\n  l as default\n};\n", "// Entry point for the build script in your package.json\nimport \"@hotwired/turbo-rails\";\nimport * as ActiveStorage from \"@rails/activestorage\";\nimport \"./controllers\";\nimport \"../components\";\n\nimport { application } from \"./controllers/application\";\n\nimport * as bootstrap from \"bootstrap\";\n\nimport \"./components/pdf_forms/pdf_form_field_element\";\n\n// Register flatpickr controller\nimport Flatpickr from \"stimulus-flatpickr\";\napplication.register(\"flatpickr\", Flatpickr);\n\nimport TextareaAutogrow from \"stimulus-textarea-autogrow\";\napplication.register(\"textarea-autogrow\", TextareaAutogrow);\n\nString.prototype.parameterize = function () {\n  return this.trim()\n    .toLowerCase()\n    .replace(/[^a-zA-Z0-9 -]/, \"\")\n    .replace(/\\s/g, \"-\");\n};\n\nString.prototype.toSentenceCase = function () {\n  return (\n    this\n      // Split the string by underscores\n      .split(\"_\")\n      // Convert each element to lowercase\n      .map((word) => word.toLowerCase())\n      // Join the elements with a space\n      .join(\" \")\n  );\n};\n\n// Register custom web components\ndocument.addEventListener(\"turbo:load\", () => {\n  // Setup bootstrap tooltips\n  const tooltipTriggerList = document.querySelectorAll(\n    '[data-bs-toggle=\"tooltip\"]',\n  );\n  [...tooltipTriggerList].map(\n    (tooltipTriggerEl) => new bootstrap.Tooltip(tooltipTriggerEl),\n  );\n});\n"],
  "mappings": "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AA,cAC3B;AAAA,YACF;AACA,qBAAS,eAAe,MAAM;AAAA,UAChC;AACA,mBAAS,cAAc,SAAS;AAC9B,oBAAQ,KAAK,sBAAsB,OAAO;AAC1C,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT;AACA,YAAI,SAAS,OAAO;AAAA,UAClB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,YAAI,QAAQ,OAAO;AAAA,UACjB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,YAAI,aAAa,OAAO;AAAA,UACtB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,YAAI,gBAAgB,OAAO;AAAA,UACzB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,YAAI,WAAW,OAAO;AAAA,UACpB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,YAAI,mBAAmB,OAAO;AAAA,UAC5B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,YAAI,OAAO,OAAO,CAAC,OAAO,CAAC;AAC3B,YAAI,OAAO,OAAO;AAAA,UAChB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,YAAI,MAAM,OAAO;AAAA,UACf;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,YAAI,SAAS,OAAO;AAAA,UAClB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UAC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",
  "names": ["consumer", "error", "consumer", "s", "consumer", "s", "subscription", "a", "x", "t", "clone", "f", "y", "i", "v", "o", "type", "value", "a", "noop", "b", "fn", "all", "binder", "r", "a2", "sort", "copy", "k", "name", "eq", "l", "s", "n", "index", "indexOf", "os", "browser", "userAgent", "mediaMatch", "isTouch", "isTablet", "isPhone", "browsers", "version", "oses", "start", "end", "count", "deviceType", "map", "path", "d", "left", "p", "isHTMLElement", "e", "dom", "id", "nu", "html", "text", "toArray", "e2", "contains", "d2", "isRoot", "stop", "elements", "lastChild", "isShadowRoot", "is", "ancestor", "descend", "child", "selector", "css", "styles", "reflow", "sibling", "parent", "children", "owner", "filter", "unbind", "top", "translate", "scrollLeft", "viewport", "isSafari", "shallow", "values", "hasAttribute", "get", "getOption", "set", "lookup", "before", "range", "c", "isBlock", "parentBlock", "scope", "parents", "elm", "resolve", "prev", "next", "add", "option", "matches", "customElements", "isValid", "self", "right", "bottom", "decode", "str", "match", "data", "addEvent", "getContext", "events", "deep", "getStyle", "w", "h", "getRect", "getParents", "node", "select", "context", "create", "parentElm", "createFragment", "remove", "head", "toggleClass", "hasClass", "hide", "uniqueId", "insertAfter", "reference", "nextSibling", "isNonEmptyElement", "isNamedAnchor", "isEmpty", "options", "firstChild", "split", "bind", "dispatch", "isEditable", "destroy", "_", "error", "code", "$2", "clear", "on", "throttle", "closest", "uid", "descendants$1", "descendant", "m", "registry", "removeDirectAnnotation", "register", "isBoundary", "walk", "offset", "process", "r2", "min", "max", "container", "getClientRects", "isVisible", "isEqual", "getNode", "trim", "point", "after", "adt", "formats", "hasFocus", "reposition", "isTarget", "leanRight", "location", "from", "HDirection", "rgbaColour", "g", "cell", "action", "field", "siblings", "isSpan", "isImage", "isMedia", "width", "height", "selectedElmX", "selectedElmY", "handle", "findParent", "split$1", "normalize", "getOuter", "find", "last", "editor", "isBogus", "indent", "empty", "validate", "removeNode", "pos", "moveCaret", "isInlineTarget", "moveSelection", "table", "getTable", "cells", "tableSelection", "emptyBlock", "first", "isContentEditable", "merge", "isInline", "rng", "parentNode", "closest$1", "blocks", "prevSibling", "unwrap", "applyStyles", "formatList", "format", "isZwsp", "hasContentEditableState", "_typeof", "obj", "_setPrototypeOf", "_isNativeReflectConstruct", "_construct", "Parent", "args", "Class", "instance", "apply", "freeze", "seal", "construct", "getGlobal", "_createTrustedTypesPolicy", "document", "window", "DOMPurify", "HTMLTemplateElement", "Node", "Element", "NodeFilter", "HTMLFormElement", "DOMParser", "getChildNodes", "getParentNode", "createDocumentFragment", "importNode", "isRegexOrFunction", "_parseConfig", "_checkValidNamespace", "_forceRemove", "_removeAttribute", "_initDocument", "_createIterator", "_isClobbered", "_isNode", "_executeHook", "_sanitizeElements", "_isValidAttribute", "_basicCustomElementTest", "_sanitizeAttributes", "_sanitizeShadowDOM", "purify", "preprocess", "addNodeFilter", "isInlineElement", "addRootBlocks", "exports", "fireEvent", "content", "y2", "x2", "start2", "end2", "script", "j", "i2", "diff", "write", "cls", "init", "setup", "collapse", "getContent", "setContent", "getStart$1", "getEnd", "getBookmark", "moveToBookmark", "getNode$1", "normRng", "placeCaretAt", "getBoundingClientRect", "isBr", "plugins", "removedOptions", "removedPlugins", "deprecatedOptions", "deprecatedPlugins", "has", "registerEvents", "PluginManager", "alert", "confirm", "console", "findAll", "now", "uuid", "cache", "openNotification", "search", "get$2", "createElement", "parseSelector", "getComputedStyle", "firstElement", "blockBoundary", "blockPosition", "blockPos", "el", "deleteRange", "deleteAction", "read", "getElement", "fromLocation", "to", "BreakType", "flip", "VDirection", "isElement", "caretPosition", "forward", "insertBlock", "execute", "newIndex", "getPositionsUntil", "trigger", "SimpleResultType", "fallback", "partition", "api", "platform", "isTextBlock", "getAction", "effect", "currentNode", "s2", "preProcess", "postProcess", "FakeCaretPosition", "prevScope", "state", "drop", "elementSelectionAttr", "showCaret", "showBlockCaretContainer", "isPasteBin", "spot", "event", "each", "DELETE", "setEditorCommandState", "selection", "focusBody", "applyAttributes", "normalizeSelection", "autoFocus", "focusEditor", "loadIcons", "render", "initEditor", "keys", "sectionResult", "defaults", "defaultOptions", "toggleFormat", "font", "command", "nativeEvents", "prepend", "extra", "getEventTarget", "editors", "pattern", "extend", "DOM", "preInit", "round", "localStorage", "tinymce", "forEvents", "events", "callback", "split", "forEach", "event", "MicroEvent", "constructor", "_events", "on", "fct", "event_array", "push", "off", "n", "arguments", "length", "undefined", "splice", "indexOf", "trigger", "args", "self", "apply", "MicroPlugin", "Interface", "plugins", "names", "settings", "requested", "loaded", "define", "name", "fn", "initializePlugins", "key", "queue", "Array", "isArray", "plugin", "options", "hasOwnProperty", "shift", "require", "loadPlugin", "Error", "i", "toArray", "p", "start", "code_points", "unicode_map", "a", "b", "j", "filter", "clone", "iterate", "sort", "get_field", "s", "id", "_", "object", "getDom", "query", "jquery", "HTMLElement", "isHtmlString", "tpl", "document", "createElement", "innerHTML", "trim", "content", "firstChild", "querySelector", "arg", "escapeQuery", "replace", "triggerEvent", "dom_el", "event_name", "createEvent", "initEvent", "dispatchEvent", "applyCSS", "css", "Object", "assign", "style", "addClasses", "elmts", "classes", "norm_classes", "classesArray", "castAsArray", "map", "el", "cls", "classList", "add", "removeClasses", "remove", "_classes", "concat", "Boolean", "parentMatch", "target", "selector", "wrapper", "contains", "matches", "parentNode", "getTail", "list", "direction", "isEmptyObject", "obj", "keys", "nodeIndex", "amongst", "nodeName", "previousElementSibling", "setAttr", "attrs", "val", "attr", "removeAttribute", "setAttribute", "replaceNode", "existing", "replacement", "replaceChild", "highlight", "element", "regex", "RegExp", "highlightText", "node", "match", "data", "spannode", "className", "middlebit", "splitText", "index", "middleclone", "cloneNode", "appendChild", "highlightChildren", "nodeType", "childNodes", "test", "tagName", "from", "highlightRecursive", "removeHighlight", "elements", "querySelectorAll", "prototype", "call", "parent", "normalize", "KEY_A", "KEY_RETURN", "KEY_ESC", "KEY_LEFT", "KEY_UP", "KEY_RIGHT", "KEY_DOWN", "KEY_BACKSPACE", "KEY_DELETE", "KEY_TAB", "IS_MAC", "navigator", "userAgent", "KEY_SHORTCUT", "defaults", "optgroups", "delimiter", "splitOn", "persist", "diacritics", "create", "createOnBlur", "createFilter", "openOnFocus", "shouldOpen", "maxOptions", "maxItems", "hideSelected", "duplicates", "addPrecedence", "selectOnTab", "preload", "allowEmptyOption", "loadThrottle", "loadingClass", "dataAttr", "optgroupField", "valueField", "labelField", "disabledField", "optgroupLabelField", "optgroupValueField", "lockOptgroupOrder", "sortField", "searchField", "searchConjunction", "mode", "wrapperClass", "controlClass", "dropdownClass", "dropdownContentClass", "itemClass", "optionClass", "dropdownParent", "controlInput", "copyClassesToDropdown", "placeholder", "hidePlaceholder", "shouldLoad", "render", "hash_key", "value", "get_hash", "escape_html", "str", "loadDebounce", "delay", "timeout", "loading", "Math", "max", "clearTimeout", "setTimeout", "loadedSearches", "debounce_events", "types", "type", "event_args", "getSelection", "input", "selectionStart", "selectionEnd", "preventDefault", "evt", "stop", "stopPropagation", "addEvent", "addEventListener", "isKeyDown", "key_name", "count", "altKey", "ctrlKey", "shiftKey", "metaKey", "getId", "existing_id", "getAttribute", "addSlashes", "append", "getSettings", "settings_user", "attr_data", "field_label", "field_value", "field_disabled", "field_optgroup", "field_optgroup_label", "field_optgroup_value", "tag_name", "toLowerCase", "option", "textContent", "settings_element", "items", "init_select", "optionsMap", "group_count", "readData", "dataset", "json", "JSON", "parse", "addOption", "group", "arr", "option_data", "disabled", "$option", "selected", "addGroup", "optgroup", "optgroup_data", "children", "hasAttribute", "child", "init_textbox", "data_raw", "values", "opt", "instance_i", "TomSelect", "input_arg", "user_settings", "control_input", "dropdown", "control", "dropdown_content", "focus_node", "order", "tabIndex", "is_select_tag", "rtl", "inputId", "_destroy", "sifter", "isOpen", "isDisabled", "isRequired", "isInvalid", "isValid", "isLocked", "isFocused", "isInputHidden", "isSetup", "ignoreFocus", "ignoreHover", "hasOptions", "currentResults", "lastValue", "caretPos", "activeOption", "activeItems", "userOptions", "dir", "tomselect", "computedStyle", "window", "getComputedStyle", "getPropertyValue", "required", "Sifter", "setupCallbacks", "setupTemplates", "_render", "inputMode", "setup", "passive_event", "passive", "listboxId", "role", "control_id", "label", "label_click", "focus", "bind", "for", "label_id", "width", "classes_plugins", "join", "multiple", "escape_regex", "load", "e", "target_match", "onOptionHover", "capture", "onOptionSelect", "onItemSelect", "onClick", "onKeyDown", "onKeyPress", "onInput", "onBlur", "onFocus", "onPaste", "doc_mousedown", "composedPath", "blur", "inputState", "win_scroll", "positionDropdown", "removeEventListener", "revertSettings", "insertAdjacentElement", "sync", "refreshState", "updateOriginalInput", "refreshItems", "close", "disable", "enable", "onChange", "setupOptions", "addOptions", "registerOptionGroup", "templates", "escape", "callbacks", "get_settings", "setValue", "lastQuery", "clearActiveItems", "onMouseDown", "pastedText", "inputValue", "splitInput", "piece", "hash", "addItem", "createItem", "character", "String", "fromCharCode", "keyCode", "which", "constants", "selectAll", "open", "next", "getAdjacent", "setActiveOption", "prev", "canSelect", "activeElement", "advanceSelection", "deleteSelection", "refreshOptions", "wasFocused", "showInput", "hasFocus", "deactivate", "setActiveItem", "setCaret", "parentElement", "closeAfterSelect", "item", "canLoad", "loadCallback", "clearActiveOption", "setTextboxValue", "changed", "getValue", "silent", "clear", "addItems", "setMaxItems", "eventName", "begin", "end", "swap", "last", "getLastActive", "setActiveItemClass", "removeActiveItem", "hideInput", "last_active", "idx", "scroll", "scrollToOption", "behavior", "height_menu", "clientHeight", "scrollTop", "height_item", "offsetHeight", "y", "getBoundingClientRect", "top", "scrollBehavior", "controlChildren", "toggle", "offsetWidth", "getScoreFunction", "getSearchOptions", "field", "fields", "conjunction", "nesting", "search", "result", "calculateScore", "score", "hashed", "triggerDropdown", "k", "html", "has_create_option", "active_group", "groups", "groups_order", "same_query", "results", "active_option", "show_dropdown", "closest", "min", "opt_value", "opt_hash", "option_el", "getOption", "includes", "group_fragment", "createDocumentFragment", "$id", "toString", "grp_a", "grp_b", "a_order", "$order", "b_order", "group_heading", "group_options", "header", "group_html", "tokens", "tok", "add_template", "template", "insertBefore", "canCreate", "active_index", "selectable", "user_created", "dat", "registerOption", "addOptionGroup", "hashed_id", "removeOptionGroup", "clearCache", "clearOptionGroups", "updateOption", "item_new", "index_item", "value_old", "value_new", "data_old", "getItem", "uncacheValue", "option_new", "removeOption", "removeItem", "clearOptions", "boundFilter", "clearFilter", "$div", "all", "x", "last_item", "isPending", "wasFull", "isFull", "insertAtCaret", "caret", "output", "lock", "created", "unlock", "refreshValidityState", "wrap_classList", "validity", "valid", "opts", "empty_option", "AddSelected", "has_selected", "reuse_opt", "visibility", "display", "context", "rect", "scrollY", "left", "scrollX", "selection", "tail", "rm_items", "rm_item", "shouldDelete", "pop", "onDelete", "adjacent", "nextElementSibling", "moveCaret", "new_pos", "destroy", "templateName", "hook", "when", "method", "new_fn", "orig_method", "result_new", "orig_onOptionSelect", "UpdateCheckbox", "checkbox", "HTMLInputElement", "checked", "orig_render_option", "rendered", "prepend", "title", "button", "$", "sortable", "orig_lock", "orig_unlock", "$control", "forcePlaceholderSize", "ui", "helper", "overflow", "each", "headerClass", "titleRowClass", "labelClass", "closeClass", "close_link", "div", "orig_onBlur", "relatedTarget", "preventScroll", "test_input", "cssText", "transfer_styles", "style_name", "resize", "clientWidth", "orig_deleteSelection", "orig_keydown", "previousSibling", "nextSibling", "orig_render_item", "close_button", "text", "orig_canLoad", "orig_clearActiveOption", "orig_loadCallback", "pagination", "loading_more", "load_more_opt", "default_values", "shouldLoadMore", "scroll_percent", "scrollHeight", "firstUrl", "canLoadMore", "setNextUrl", "next_url", "getUrl", "first_option", "no_more_results", "change_listener", "checkbox_options", "clear_button", "drag_drop", "dropdown_header", "caret_position", "dropdown_input", "input_autogrow", "no_backspace_delete", "no_active_items", "optgroup_columns", "remove_button", "restore_on_backspace", "virtual_scroll", "x", "y", "error", "a", "b", "i", "toggleClass", "hide", "applyStyles", "index", "isVisible", "globalState", "e", "offset", "rejectPromise", "Swal", "option", "o", "confirm", "isElement", "n", "now", "t", "location", "left", "right", "i", "_", "elements", "options", "error", "cookie", "id", "x", "y", "clone", "index", "option", "session", "visit", "potentialMatch", "recentRequests", "Turbo", "document", "e", "c", "createConsumer", "m", "x", "x", "k", "a", "b", "c", "d", "s", "i", "n", "j", "end", "hex", "SparkMD5", "hash", "start", "elements", "dispatchEvent", "error", "left", "right", "application", "error", "matches", "options", "_", "index", "e", "filter", "fetch", "matches", "match", "oldValue", "index", "left", "right", "_", "error", "constructor", "extend", "a", "b", "application", "elements", "element", "c", "n", "k", "v", "filter", "read", "write", "FetchResponse", "cookie", "FetchRequest", "options", "error", "FetchResponse", "_", "options", "FetchRequest", "options", "FetchRequest", "s", "fn", "t", "e", "error", "_", "options", "c", "i", "_a", "fn", "source", "t", "s", "i", "n", "p", "r", "k", "a", "j", "self", "destroy", "fn", "e", "defaults", "element", "options", "triggerChange", "m", "c", "offset", "d", "month", "_", "x", "formats", "top", "left", "right", "b", "option", "min", "max", "camelize", "value", "replace", "_", "char", "toUpperCase", "capitalize", "charAt", "slice", "dasherize", "toLowerCase", "readInheritableStaticArrayValues", "constructor", "propertyName", "ancestors", "getAncestorsForConstructor", "Array", "from", "reduce", "values", "getOwnStaticArrayValues", "forEach", "name", "add", "Set", "readInheritableStaticObjectPairs", "pairs", "push", "getOwnStaticObjectPairs", "Object", "getPrototypeOf", "reverse", "definition", "isArray", "keys", "map", "key", "extend", "extendWithReflect", "extended", "Reflect", "construct", "arguments", "new", "prototype", "create", "setPrototypeOf", "testReflectExtension", "a", "call", "b", "error", "ClassPropertiesBlessing", "classes", "properties", "classDefinition", "assign", "propertiesForClassDefinition", "get", "has", "attribute", "getAttributeName", "Error", "getAll", "TargetPropertiesBlessing", "targets", "targetDefinition", "propertiesForTargetDefinition", "target", "find", "identifier", "findAll", "ValuePropertiesBlessing", "valueDefinitionPairs", "propertyDescriptorMap", "valueDescriptorMap", "result", "valueDefinitionPair", "valueDescriptor", "parseValueDefinitionPair", "attributeName", "data", "getAttributeNameForKey", "propertiesForValueDefinitionPair", "reader", "read", "writer", "write", "defaultValue", "set", "undefined", "delete", "hasCustomDefaultValue", "token", "typeDefinition", "valueDescriptorForTokenAndTypeDefinition", "parseValueTypeConstant", "constant", "Boolean", "Number", "String", "parseValueTypeDefault", "toString", "parseValueTypeObject", "typeObject", "typeFromObject", "type", "defaultValueType", "default", "parseValueTypeDefinition", "typeFromDefaultValue", "typeFromConstant", "defaultValueForDefinition", "defaultValuesByType", "readers", "writers", "array", "boolean", "number", "object", "string", "JSON", "parse", "TypeError", "writeString", "writeJSON", "stringify", "Controller", "context", "shouldLoad", "application", "scope", "element", "initialize", "connect", "disconnect", "dispatch", "eventName", "detail", "prefix", "bubbles", "cancelable", "event", "CustomEvent", "dispatchEvent", "blessings", "kebabCase", "booleanOptions", "stringOptions", "numberOptions", "arrayOptions", "arrayOrStringOptions", "dateOptions", "dateFormats", "options", "date", "arrayOrString", "events", "elements", "mapping", "strftimeRegex", "RegExp", "join", "convertDateFormat", "format", "match", "StimulusFlatpickr", "config", "_initializeEvents", "_initializeOptions", "_initializeDateFormats", "fp", "flatpickr", "flatpickrElement", "_initializeElements", "inputTarget", "destroy", "hook", "bind", "optionType", "optionsCamelCase", "option", "optionKebab", "_handleDaysOfWeek", "disableDaysOfWeek", "_validateDaysOfWeek", "disable", "_disable", "enableDaysOfWeek", "enable", "_enable", "days", "day", "parseInt", "console", "disabledDays", "includes", "getDay", "enabledDays", "dateFormat", "val", "e", "hasInstanceTarget", "instanceTarget", "e", "e", "e", "option", "options", "shadow", "f", "fields", "FetchRequest", "tinymce", "form_controller_default", "createPopper", "start", "start", "name", "style", "x", "y", "getComputedStyle", "getComputedStyle", "css", "window", "min", "max", "v", "toPaddingObject", "options", "popperOffsets", "min", "max", "offset", "effect", "x", "y", "popper", "getComputedStyle", "options", "effect", "options", "window", "hash", "x", "y", "x", "y", "getComputedStyle", "getComputedStyle", "clippingParents", "getComputedStyle", "reference", "start", "options", "popperOffsets", "offset", "options", "placements", "placement", "a", "b", "options", "placements", "placement", "i", "start", "_loop", "_i", "checks", "offset", "options", "x", "y", "options", "popperOffsets", "offset", "min", "max", "start", "sort", "debounce", "fn", "merged", "defaultModifiers", "defaultOptions", "createPopper", "reference", "popper", "options", "m", "index", "fn", "debounce", "destroy", "state", "effect", "noopFn", "createPopper", "defaultModifiers", "createPopper", "createPopper", "e", "form_controller_default", "index", "e", "index", "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", "SelectorEngine", "concat", "Element", "findOne", "children", "child", "matches", "parents", "ancestor", "prev", "previous", "previousElementSibling", "next", "nextElementSibling", "focusableChildren", "focusables", "map", "join", "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", "sel", "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", "div", "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", "click", "_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", "FetchRequest", "patient_search_controller_default", "TomSelect", "x", "y", "start", "c2", "c3", "s2", "s3", "l2", "k", "i", "t", "end", "error", "options", "fn", "now", "u", "j", "e", "e", "FetchRequest", "e", "e", "FetchRequest", "FieldDialog", "filter", "field", "register", "options", "FieldDialog", "setup", "register", "e", "field", "dialog", "FieldDialog", "plugin_default", "plugin_default", "i", "index", "a2", "k", "code", "x", "getKey", "getModifier", "c", "eachUnbind", "y", "dispatch", "e", "a", "option", "s", "e", "t", "p", "i", "options", "dispatchEvent", "controller", "c", "debounce", "fn", "index", "options", "e", "option", "option", "ownKeys", "_objectSpread2", "i", "_defineProperty", "obj", "fn", "_", "toggleClass", "i", "n", "top", "left", "bottom", "right", "options", "index", "extend", "throttle", "x", "y", "$", "_objectSpread2", "duration", "options", "defaults", "option", "p", "dispatchEvent", "rootEl", "cloneEl", "oldIndex", "newIndex", "oldDraggableIndex", "newDraggableIndex", "putSortable", "pluginEvent", "_detectDirection", "_dragElInRowColumn", "_detectNearestEmptySortable", "x", "y", "_prepareGroup", "dragEl", "_hideGhostForTarget", "_unhideGhostForTarget", "nearestEmptyInsertDetectEvent", "i", "_checkOutsideTargetEl", "fn", "filter", "dragStartFn", "toggleClass", "e", "target", "after", "toArray", "order", "n", "id", "destroy", "el", "extend", "throttle", "plugins", "drop", "autoScroll", "top", "bottom", "left", "right", "onSpill", "id", "FetchRequest", "Swal", "styles", "import_sweetalert2", "Swal", "options", "option", "e", "import_sweetalert2", "Swal", "import_sweetalert2", "Swal", "styles", "sortable_controller_default", "id", "FetchRequest", "import_tom_select", "TomSelect", "form_controller_default", "patient_search_controller_default", "sortable_controller_default", "global", "globalThis", "supportsAdoptingStyleSheets", "ShadowRoot", "ShadyCSS", "nativeShadow", "Document", "prototype", "CSSStyleSheet", "constructionToken", "Symbol", "cssTagCache", "WeakMap", "CSSResult", "cssText", "strings", "safeToken", "this", "Error", "_strings", "styleSheet", "_styleSheet", "cacheable", "length", "get", "replaceSync", "set", "toString", "unsafeCSS", "value", "String", "css", "values", "reduce", "acc", "v", "idx", "adoptStyles", "renderRoot", "styles", "adoptedStyleSheets", "map", "s", "style", "document", "createElement", "nonce", "setAttribute", "textContent", "appendChild", "getCompatibleStyle", "sheet", "rule", "cssRules", "is", "defineProperty", "getOwnPropertyDescriptor", "getOwnPropertyNames", "getOwnPropertySymbols", "getPrototypeOf", "Object", "global", "globalThis", "trustedTypes", "emptyStringForBooleanAttribute", "emptyScript", "polyfillSupport", "reactiveElementPolyfillSupport", "JSCompiler_renameProperty", "prop", "_obj", "defaultConverter", "value", "type", "Boolean", "Array", "JSON", "stringify", "fromValue", "Number", "parse", "e", "notEqual", "old", "defaultPropertyDeclaration", "attribute", "String", "converter", "reflect", "useDefault", "hasChanged", "Symbol", "metadata", "litPropertyMetadata", "WeakMap", "ReactiveElement", "HTMLElement", "initializer", "this", "__prepare", "_initializers", "push", "observedAttributes", "finalize", "__attributeToPropertyMap", "keys", "name", "options", "state", "prototype", "hasOwnProperty", "create", "wrapped", "elementProperties", "set", "noAccessor", "key", "descriptor", "getPropertyDescriptor", "get", "v", "oldValue", "call", "requestUpdate", "configurable", "enumerable", "superCtor", "Map", "finalized", "props", "properties", "propKeys", "p", "createProperty", "attr", "__attributeNameForProperty", "elementStyles", "finalizeStyles", "styles", "isArray", "Set", "flat", "Infinity", "reverse", "s", "unshift", "getCompatibleStyle", "toLowerCase", "constructor", "super", "__instanceProperties", "isUpdatePending", "hasUpdated", "__reflectingProperty", "__initialize", "__updatePromise", "Promise", "res", "enableUpdating", "_$changedProperties", "__saveInstanceProperties", "forEach", "i", "controller", "__controllers", "add", "renderRoot", "isConnected", "hostConnected", "delete", "instanceProperties", "size", "createRenderRoot", "shadowRoot", "attachShadow", "shadowRootOptions", "adoptStyles", "connectedCallback", "c", "_requestedUpdate", "disconnectedCallback", "hostDisconnected", "_old", "_$attributeToProperty", "attrValue", "toAttribute", "removeAttribute", "setAttribute", "ctor", "propName", "getPropertyOptions", "fromAttribute", "convertedValue", "__defaultValues", "newValue", "hasAttribute", "_$changeProperty", "__enqueueUpdate", "initializeValue", "has", "__reflectingProperties", "reject", "result", "scheduleUpdate", "performUpdate", "shouldUpdate", "changedProperties", "willUpdate", "hostUpdate", "update", "__markUpdated", "_$didUpdate", "_changedProperties", "hostUpdated", "firstUpdated", "updated", "updateComplete", "getUpdateComplete", "__propertyToAttribute", "mode", "reactiveElementVersions", "global", "globalThis", "trustedTypes", "policy", "createPolicy", "createHTML", "s", "boundAttributeSuffix", "marker", "Math", "random", "toFixed", "slice", "markerMatch", "nodeMarker", "d", "document", "createMarker", "createComment", "isPrimitive", "value", "isArray", "Array", "isIterable", "Symbol", "iterator", "SPACE_CHAR", "textEndRegex", "commentEndRegex", "comment2EndRegex", "tagEndRegex", "RegExp", "singleQuoteAttrEndRegex", "doubleQuoteAttrEndRegex", "rawTextElement", "tag", "type", "strings", "values", "_$litType$", "html", "svg", "mathml", "noChange", "for", "nothing", "templateCache", "WeakMap", "walker", "createTreeWalker", "trustFromTemplateString", "tsa", "stringFromTSA", "hasOwnProperty", "Error", "getTemplateHtml", "l", "length", "attrNames", "rawTextEndRegex", "regex", "i", "attrName", "match", "attrNameEndIndex", "lastIndex", "exec", "test", "end", "startsWith", "push", "Template", "constructor", "options", "node", "this", "parts", "nodeIndex", "attrNameIndex", "partCount", "el", "createElement", "currentNode", "content", "wrapper", "firstChild", "replaceWith", "childNodes", "nextNode", "nodeType", "hasAttributes", "name", "getAttributeNames", "endsWith", "realName", "statics", "getAttribute", "split", "m", "index", "ctor", "PropertyPart", "BooleanAttributePart", "EventPart", "AttributePart", "removeAttribute", "tagName", "textContent", "emptyScript", "append", "data", "indexOf", "_options", "innerHTML", "resolveDirective", "part", "parent", "attributeIndex", "currentDirective", "__directives", "__directive", "nextDirectiveConstructor", "_$initialize", "_$resolve", "TemplateInstance", "template", "_$parts", "_$disconnectableChildren", "_$template", "_$parent", "parentNode", "_$isConnected", "fragment", "creationScope", "importNode", "partIndex", "templatePart", "ChildPart", "nextSibling", "ElementPart", "_$setValue", "__isConnected", "startNode", "endNode", "_$committedValue", "_$startNode", "_$endNode", "isConnected", "directiveParent", "_$clear", "_commitText", "_commitTemplateResult", "_commitNode", "_commitIterable", "insertBefore", "_insert", "createTextNode", "result", "_$getTemplate", "h", "_update", "instance", "_clone", "get", "set", "itemParts", "itemPart", "item", "start", "from", "_$notifyConnectionChanged", "n", "remove", "element", "fill", "String", "valueIndex", "noCommit", "change", "v", "_commitValue", "setAttribute", "toggleAttribute", "super", "newListener", "oldListener", "shouldRemoveListener", "capture", "once", "passive", "shouldAddListener", "removeEventListener", "addEventListener", "event", "call", "host", "handleEvent", "polyfillSupport", "global", "litHtmlPolyfillSupport", "Template", "ChildPart", "litHtmlVersions", "push", "render", "value", "container", "options", "partOwnerNode", "renderBefore", "part", "endNode", "insertBefore", "createMarker", "_$setValue", "global", "globalThis", "LitElement", "ReactiveElement", "constructor", "this", "renderOptions", "host", "__childPart", "createRenderRoot", "renderRoot", "super", "renderBefore", "firstChild", "changedProperties", "value", "render", "hasUpdated", "isConnected", "update", "connectedCallback", "setConnected", "disconnectedCallback", "noChange", "litElementHydrateSupport", "polyfillSupport", "litElementPolyfillSupport", "_$changedProperties", "global", "litElementVersions", "push", "customElement", "tagName", "classOrTarget", "context", "addInitializer", "customElements", "define", "defaultPropertyDeclaration", "attribute", "type", "String", "converter", "defaultConverter", "reflect", "hasChanged", "notEqual", "standardProperty", "options", "target", "context", "kind", "metadata", "properties", "globalThis", "litPropertyMetadata", "get", "set", "Map", "Object", "create", "wrapped", "name", "v", "oldValue", "call", "this", "requestUpdate", "_$changeProperty", "value", "Error", "property", "protoOrTarget", "nameOrContext", "proto", "hasOwnProperty", "constructor", "createProperty", "getOwnPropertyDescriptor", "desc", "obj", "name", "descriptor", "configurable", "enumerable", "Reflect", "decorate", "Object", "defineProperty", "query", "selector", "cache", "protoOrTarget", "nameOrContext", "descriptor", "doQuery", "el", "renderRoot", "querySelector", "get", "set", "key", "Symbol", "this", "v", "desc", "result", "call", "hasUpdated", "i", "FetchRequest", "error", "n", "e", "t", "r", "t", "e", "i", "o", "s", "l", "l"]
}
