{"version":3,"file":"index.mjs","mappings":"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","sources":["webpack://gleap/webpack/bootstrap","webpack://gleap/webpack/runtime/define property getters","webpack://gleap/webpack/runtime/hasOwnProperty shorthand","webpack://gleap/./src/GleapFeedbackButtonManager.js","webpack://gleap/./src/UI.js","webpack://gleap/./src/GleapNetworkIntercepter.js","webpack://gleap/./src/GleapHelper.js","webpack://gleap/./src/ChecklistNetworkManager.js","webpack://gleap/./src/GleapSSEParser.js","webpack://gleap/./src/AgentNetworkManager.js","webpack://gleap/./node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","webpack://gleap/./node_modules/@floating-ui/core/dist/floating-ui.core.mjs","webpack://gleap/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","webpack://gleap/./node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","webpack://gleap/./src/GleapPageFilter.js","webpack://gleap/./src/GleapTooltipManager.js","webpack://gleap/./src/GleapSession.js","webpack://gleap/./src/GleapStreamedEvent.js","webpack://gleap/./src/GleapConfigManager.js","webpack://gleap/./src/ScreenCapture.js","webpack://gleap/./src/ResourceExclusionList.js","webpack://gleap/./src/GleapScreenRecorder.js","webpack://gleap/./src/GleapFeedback.js","webpack://gleap/./src/GleapEventManager.js","webpack://gleap/./src/GleapAgentToolManager.js","webpack://gleap/./src/GleapFrameManager.js","webpack://gleap/./src/GleapMetaDataManager.js","webpack://gleap/./src/GleapConsoleLogManager.js","webpack://gleap/./src/GleapClickListener.js","webpack://gleap/./src/GleapCustomDataManager.js","webpack://gleap/./src/GleapCustomActionManager.js","webpack://gleap/./node_modules/@rrweb/record/dist/record.js","webpack://gleap/./node_modules/@rrweb/packer/dist/base-Dgki_PiJ.js","webpack://gleap/./node_modules/@rrweb/packer/dist/pack.js","webpack://gleap/./src/GleapReplayRecorder.js","webpack://gleap/./src/ScreenDrawer.js","webpack://gleap/./src/GleapScrollStopper.js","webpack://gleap/./src/GleapMarkerManager.js","webpack://gleap/./src/GleapTranslationManager.js","webpack://gleap/./src/GleapShortcutListener.js","webpack://gleap/./src/GleapPreFillManager.js","webpack://gleap/./src/GleapNotificationManager.js","webpack://gleap/./src/GleapAiChatbarManager.js","webpack://gleap/./src/GleapBannerManager.js","webpack://gleap/./src/GleapModalManager.js","webpack://gleap/./src/GleapAudioManager.js","webpack://gleap/./src/GleapTagManager.js","webpack://gleap/./src/unique-selector/src/getID.js","webpack://gleap/./src/unique-selector/src/getClasses.js","webpack://gleap/./src/unique-selector/src/getCombinations.js","webpack://gleap/./src/unique-selector/src/isElement.js","webpack://gleap/./src/unique-selector/src/getNthChild.js","webpack://gleap/./src/unique-selector/src/getTag.js","webpack://gleap/./src/unique-selector/src/isUnique.js","webpack://gleap/./src/unique-selector/src/unique-selector.js","webpack://gleap/./src/unique-selector/src/getAttributes.js","webpack://gleap/./src/unique-selector/src/getParents.js","webpack://gleap/./src/ElementPicker.js","webpack://gleap/./src/GleapAdminHelper.js","webpack://gleap/./src/GleapAdminManager.js","webpack://gleap/./src/GleapTours.js","webpack://gleap/./src/GleapCopilotTours.js","webpack://gleap/./src/GleapProductTours.js","webpack://gleap/./src/GleapAgentChat.js","webpack://gleap/./src/Gleap.js","webpack://gleap/./src/GleapChecklist.js","webpack://gleap/./src/GleapAgentConversation.js","webpack://gleap/./src/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import {\n  GleapFrameManager,\n  GleapConfigManager,\n  GleapNotificationManager,\n  GleapTranslationManager,\n  GleapAiChatbarManager,\n  GleapSession,\n} from './Gleap';\nimport { loadIcon } from './UI';\n\nexport default class GleapFeedbackButtonManager {\n  feedbackButton = null;\n  injectedFeedbackButton = false;\n  buttonHidden = null;\n  lastButtonIcon = null;\n  showingRedDot = false;\n\n  // Feedback button types\n  static FEEDBACK_BUTTON_BOTTOM_RIGHT = 'BOTTOM_RIGHT';\n  static FEEDBACK_BUTTON_BOTTOM_LEFT = 'BOTTOM_LEFT';\n  static FEEDBACK_BUTTON_CLASSIC = 'BUTTON_CLASSIC';\n  static FEEDBACK_BUTTON_CLASSIC_LEFT = 'BUTTON_CLASSIC_LEFT';\n  static FEEDBACK_BUTTON_CLASSIC_BOTTOM = 'BUTTON_CLASSIC_BOTTOM';\n  static FEEDBACK_BUTTON_NONE = 'BUTTON_NONE';\n\n  // GleapFeedbackButtonManager singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapFeedbackButtonManager();\n    }\n    return this.instance;\n  }\n\n  destroy() {\n    if (this.feedbackButton) {\n      this.feedbackButton.remove();\n      this.feedbackButton = null;\n    }\n\n    this.buttonHidden = null;\n    this.lastButtonIcon = null;\n    this.injectedFeedbackButton = false;\n    this.instance = null;\n  }\n\n  /**\n   * Toggles the feedback button visibility.\n   * @param {*} show\n   * @returns\n   */\n  toggleFeedbackButton(show) {\n    this.buttonHidden = !show;\n\n    GleapFeedbackButtonManager.getInstance().updateFeedbackButtonState();\n    GleapNotificationManager.getInstance().updateContainerStyle();\n  }\n\n  updateRedDot(show) {\n    var frameManager = GleapFrameManager.getInstance();\n    if (!this.feedbackButton || this.buttonHidden || frameManager.isOpened()) {\n      return;\n    }\n\n    const redDotClass = 'bb-feedback-button--red-dot';\n    const existingDot = this.feedbackButton.querySelector(`.${redDotClass}`);\n\n    if (show) {\n      if (!existingDot) {\n        const dot = document.createElement('div');\n        dot.className = redDotClass;\n        this.feedbackButton.appendChild(dot);\n      }\n    } else {\n      if (existingDot) {\n        existingDot.remove();\n      }\n    }\n  }\n\n  feedbackButtonPressed() {\n    var frameManager = GleapFrameManager.getInstance();\n    if (frameManager.isOpened()) {\n      frameManager.hideWidget();\n      this.updateRedDot(this.showingRedDot);\n    } else {\n      frameManager.setAppMode('widget');\n      frameManager.showWidget();\n      this.updateRedDot(false);\n    }\n  }\n\n  /**\n   * Injects the feedback button into the current DOM.\n   */\n  injectFeedbackButton() {\n    if (this.injectedFeedbackButton) {\n      return;\n    }\n    this.injectedFeedbackButton = true;\n\n    var elem = document.createElement('div');\n    elem.addEventListener('click', () => {\n      this.feedbackButtonPressed();\n    });\n    document.body.appendChild(elem);\n    this.feedbackButton = elem;\n\n    this.updateFeedbackButtonState();\n  }\n\n  updateNotificationBadge(count) {\n    const notificationBadge = document.querySelector('.bb-notification-bubble');\n    if (!notificationBadge) {\n      return;\n    }\n\n    const notificationHiddenClass = 'bb-notification-bubble--hidden';\n    if (count > 0 && !GleapFrameManager.getInstance().isOpened()) {\n      notificationBadge.classList.remove(notificationHiddenClass);\n      notificationBadge.innerText = count;\n    } else {\n      notificationBadge.classList.add(notificationHiddenClass);\n    }\n  }\n\n  refresh() {\n    const feedbackButton = document.querySelector('.bb-feedback-button');\n    if (feedbackButton) {\n      this.updateFeedbackButtonText();\n      this.updateFeedbackButtonState();\n    } else {\n      this.injectedFeedbackButton = false;\n      this.feedbackButton = null;\n      this.buttonHidden = null;\n      this.lastButtonIcon = null;\n      this.injectFeedbackButton();\n    }\n  }\n\n  updateFeedbackButtonText() {\n    const flowConfig = GleapConfigManager.getInstance().getFlowConfig();\n\n    if (\n      !(\n        flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_CLASSIC ||\n        flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_CLASSIC_BOTTOM ||\n        flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_CLASSIC_LEFT\n      )\n    ) {\n      return;\n    }\n\n    const feedbackButton = document.querySelector('.bb-feedback-button-classic');\n    if (!feedbackButton) {\n      return;\n    }\n\n    feedbackButton.innerText = flowConfig.widgetButtonText;\n  }\n\n  /**\n   * Updates the feedback button state\n   * @returns\n   */\n  updateFeedbackButtonState() {\n    GleapAiChatbarManager.getInstance().updateUIVisibility();\n\n    if (this.feedbackButton === null) {\n      return;\n    }\n\n    const flowConfig = GleapConfigManager.getInstance().getFlowConfig();\n\n    var buttonIcon = '';\n    if (flowConfig.buttonLogo) {\n      buttonIcon = `<img class=\"bb-logo-logo\" src=\"${flowConfig.buttonLogo}\" alt=\"Feedback Button\" />`;\n    } else {\n      buttonIcon = loadIcon('button', '#fff');\n    }\n\n    this.feedbackButton.className = 'bb-feedback-button gleap-font rr-block';\n    this.feedbackButton.setAttribute('dir', GleapTranslationManager.getInstance().isRTLLayout ? 'rtl' : 'ltr');\n\n    if (\n      flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_CLASSIC ||\n      flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_CLASSIC_BOTTOM ||\n      flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_CLASSIC_LEFT\n    ) {\n      this.feedbackButton.classList.add('bb-feedback-button--classic-button-style');\n\n      this.feedbackButton.innerHTML = `<div class=\"bb-feedback-button-classic ${\n        flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_CLASSIC_LEFT\n          ? 'bb-feedback-button-classic--left'\n          : ''\n      }${\n        flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_CLASSIC_BOTTOM\n          ? 'bb-feedback-button-classic--bottom'\n          : ''\n      }\">${flowConfig.widgetButtonText}</div>`;\n    } else {\n      if (buttonIcon !== this.lastButtonIcon) {\n        this.feedbackButton.innerHTML = `<div class=\"bb-feedback-button-icon\">${buttonIcon}${loadIcon(\n          'arrowdown',\n          '#fff'\n        )}</div><div class=\"bb-notification-bubble bb-notification-bubble--hidden\"></div>`;\n      }\n    }\n\n    // Prevent dom update if not needed.\n    this.lastButtonIcon = buttonIcon;\n\n    var hideButton = false;\n    if (GleapFeedbackButtonManager.getInstance().buttonHidden === null) {\n      if (flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_NONE) {\n        hideButton = true;\n      }\n    } else {\n      if (GleapFeedbackButtonManager.getInstance().buttonHidden) {\n        hideButton = true;\n      }\n    }\n    if (hideButton) {\n      this.feedbackButton.classList.add('bb-feedback-button--disabled');\n    }\n\n    if (flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_BOTTOM_LEFT) {\n      this.feedbackButton.classList.add('bb-feedback-button--bottomleft');\n    }\n\n    if (GleapFrameManager.getInstance().isOpened()) {\n      this.feedbackButton.classList.add('bb-feedback-button--open');\n    }\n\n    const appMode = GleapFrameManager.getInstance().appMode;\n    if (appMode === 'survey' || appMode === 'survey_full' || appMode === 'survey_web') {\n      this.feedbackButton.classList.add('bb-feedback-button--survey');\n    }\n\n    if (flowConfig.hideForGuests === true && !GleapSession.getInstance().isUser()) {\n      this.feedbackButton.classList.add('bb-feedback-button--hidden');\n    }\n  }\n}\n","import GleapFeedbackButtonManager from './GleapFeedbackButtonManager';\n\nconst calculateShadeColor = function (col, amt) {\n  col = col.replace(/^#/, '');\n  if (col.length === 3) col = col[0] + col[0] + col[1] + col[1] + col[2] + col[2];\n\n  let [r, g, b] = col.match(/.{2}/g);\n  [r, g, b] = [parseInt(r, 16) + amt, parseInt(g, 16) + amt, parseInt(b, 16) + amt];\n\n  r = Math.max(Math.min(255, r), 0).toString(16);\n  g = Math.max(Math.min(255, g), 0).toString(16);\n  b = Math.max(Math.min(255, b), 0).toString(16);\n\n  const rr = (r.length < 2 ? '0' : '') + r;\n  const gg = (g.length < 2 ? '0' : '') + g;\n  const bb = (b.length < 2 ? '0' : '') + b;\n\n  return `#${rr}${gg}${bb}`;\n};\n\nexport const calculateContrast = (hex) => {\n  var r = parseInt(hex.substr(1, 2), 16),\n    g = parseInt(hex.substr(3, 2), 16),\n    b = parseInt(hex.substr(5, 2), 16),\n    yiq = (r * 299 + g * 587 + b * 114) / 1000;\n  return yiq >= 160 ? '#000000' : '#ffffff';\n};\n\nexport const widgetMaxHeight = 700;\n\nexport const injectStyledCSS = (\n  primaryColor,\n  headerColor,\n  buttonColor,\n  borderRadius,\n  backgroundColor,\n  buttonX,\n  buttonY,\n  buttonStyle\n) => {\n  const contrastColor = calculateContrast(primaryColor);\n  const contrastButtonColor = calculateContrast(buttonColor);\n  const contrastBackgroundColor = calculateContrast(backgroundColor);\n  const contrastHeaderColor = calculateContrast(headerColor);\n  const isDarkMode = contrastBackgroundColor === '#ffffff';\n  const headerDarkColor = calculateShadeColor(headerColor, contrastHeaderColor === '#ffffff' ? -35 : -15);\n  const subTextColor = isDarkMode ? calculateShadeColor(backgroundColor, 100) : calculateShadeColor(backgroundColor, -120);\n  const backgroundColorHover = isDarkMode\n    ? calculateShadeColor(backgroundColor, 30)\n    : calculateShadeColor(backgroundColor, -12);\n  const hoverHoverColor = isDarkMode ? calculateShadeColor(backgroundColor, 80) : calculateShadeColor(backgroundColor, -30);\n\n  var borderRadius = parseInt(borderRadius, 10);\n  const buttonBorderRadius = Math.round(borderRadius * 1.05);\n  const containerRadius = Math.round(borderRadius * 0.8);\n  const chatRadius = Math.round(borderRadius * 0.6);\n  const formItemBorderRadius = Math.round(borderRadius * 0.4);\n  const formItemSmallBorderRadius = Math.round(borderRadius * 0.25);\n  const zIndexBase = 2147483600;\n\n  var bottomInfoOffset = 57 + buttonY;\n  if (buttonStyle === GleapFeedbackButtonManager.FEEDBACK_BUTTON_CLASSIC_BOTTOM) {\n    bottomInfoOffset = buttonY + 15;\n  } else if (buttonStyle && buttonStyle.includes('CLASSIC')) {\n    bottomInfoOffset = buttonY;\n  } else if (buttonStyle === GleapFeedbackButtonManager.FEEDBACK_BUTTON_NONE) {\n    bottomInfoOffset = buttonY;\n  }\n\n  const colorStyleSheet = `\n    .gleap-font, .gleap-font * {\n      font-style: normal;\n      font-variant-caps: normal;\n      font-variant-ligatures: normal;\n      font-variant-numeric: normal;\n      font-variant-east-asian: normal;\n      font-weight: normal;\n      font-stretch: normal;\n      font-size: 100%;\n      line-height: 1;\n      font-family: system-ui, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n    }\n    .gleap-ai-ui-widget {\n      display: none;\n    }\n    .gleap-input-highlight {\n      box-shadow: 0 0 0 3px ${primaryColor} !important;\n    }\n    .gleap-frame-container {\n      right: ${buttonX}px;\n      bottom: ${61 + buttonY}px;\n      width: calc(100% - 40px);\n      max-width: 410px;\n      position: fixed;\n      z-index: ${zIndexBase + 31};\n      visibility: visible;\n      box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.16);\n      border-radius: ${containerRadius * 1.5}px;\n      overflow: hidden;\n      animation-duration: .3s;\n      animation-fill-mode: both;\n      animation-name: gleapFadeInUp;\n      user-select: none;\n      pointer-events: none;\n      transition: max-width 0.3s ease-out;\n    }\n\n    .gleap-admin-highlight {\n      box-shadow: 0px 0px 0px 4px red;\n    }\n\n    :root {\n      --gleap-margin-top: 50px;\n    }\n\n    .gleap-tooltip-anchor {\n      position: relative;\n      display: inline-block;\n      float: left;\n      max-width: 0px;\n      width: 17px;\n    }\n\n    .gleap-tooltip-hotspot {\n      position: absolute;\n      display: block;\n      width: 17px;\n      height: 17px;\n      cursor: pointer;\n      top: 0px;\n      left: 0px;\n    }\n\n    @keyframes gleap-pulse {\n      0% {\n        transform: scale(0);\n        opacity: 0.25;\n      }\n      45% {\n        transform: scale(2.5);\n        opacity: 0;\n      }\n      100% {\n        transform: scale(0);\n        opacity: 0;\n      }\n    }\n\n    .gleap-tooltip-hotspot-animation {\n      position: absolute;\n      border-radius: 17px;\n      opacity: 0.25;\n      display: block;\n      width: 17px;\n      height: 17px;\n      cursor: pointer;\n      top: 0px;\n      left: 0px;\n      animation: gleap-pulse 5s infinite;\n    }\n\n    .gleap-tooltip-hotspot svg {\n      width: 17px;\n      height: 17px;\n      object-fit: contain;\n      display: block;\n    }\n\n    .gleap-tooltip-inner {\n      position: relative;\n      overflow: visible;\n      font-size: 14px;\n      font-weight: normal;\n      color: #000;\n      line-height: 1.3;\n    }\n\n    .gleap-tooltip {\n      position: absolute;\n      background-color: #fff;\n      color: #000;\n      font-size: 15px;\n      line-height: 18px;\n      padding: 16px;\n      padding-top: 8px;\n      padding-bottom: 8px;\n      border-radius: 4px;\n      max-width: min(350px, 80vw);\n      box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.2);\n      opacity: 0;\n      visibility: hidden;\n      transition: opacity 0.2s, visibility 0.2s;\n      z-index: ${zIndexBase + 100};\n    }\n\n    .gleap-tooltip a {\n      color: ${primaryColor};\n      text-decoration: underline;\n      display: inline !important;\n      margin: 0px !important;\n      padding: 0px !important;\n      word-break: break-word;\n    }\n\n    .gleap-tooltip ul {\n      padding-left: 16px;\n    }\n\n    .gleap-tooltip b {\n      font-weight: 600;\n    }\n\n    .gleap-tooltip h2 {\n      font-size: 18px;\n      line-height: 20px;\n      font-weight: 600;\n      margin-top: 8px;\n      margin-bottom: 8px;\n    }\n\n    .gleap-tooltip h3 {\n      font-size: 16px;\n      line-height: 18px;\n      font-weight: 600;\n      margin-top: 8px;\n      margin-bottom: 8px;\n    }\n\n    .gleap-tooltip p {\n      padding: 0px;\n      margin-top: 8px;\n      margin-bottom: 8px;\n    }\n\n    .gleap-tooltip img {\n      max-width: 100%;\n      max-height: 300px;\n      width: 100%;\n      height: auto;\n      object-fit: cover;\n      margin-top: 8px;\n      margin-bottom: 8px;\n      border-radius: 4px;\n    }\n\n    .gleap-tooltip iframe,\n    .gleap-tooltip video {\n      max-width: 100%;\n      width: 100%;\n      height: auto;\n      min-height: 200px;\n      display: block;\n      border: none;\n      outline: none;\n      padding: 0px;\n      margin-top: 8px;\n      margin-bottom: 8px;\n      border-radius: 4px;\n    }\n\n    .gleap-tooltip-arrow {\n      position: absolute;\n      width: 20px;\n      height: 20px;\n    }\n\n    .gleap-tooltip-arrow svg {\n      width: 20px;\n      height: 20px;\n      object-fit: contain;\n    }\n\n    .gleap-b-frame {\n      width: 100%;\n      height: 100%;\n      border: none;\n      pointer-events: auto;\n      padding: 0px;\n      margin: 0px;\n    }\n\n    .gleap-b-shown {\n      transition: margin 0.3s ease-out;\n      margin-top: var(--gleap-margin-top);\n      position: relative;\n      z-index: 10000;\n    }\n\n    .gleap-b-f {\n      margin-top: 0px;\n    }\n\n    .gleap-b {\n      display: none;\n      position: absolute;\n      top: calc(-1 * var(--gleap-margin-top));\n      left: 0px;\n      width: 100vw;\n      height: var(--gleap-margin-top);\n      z-index: ${zIndexBase + 99};\n    }\n\n    @keyframes gleapSlideIn {\n      from {\n          top: calc(-1 * var(--gleap-margin-top));\n      }\n      to {\n          top: 10px;\n      }\n    }\n\n    .gleap-b-f .gleap-b {\n      position: fixed;\n      top: 10px;\n      animation: gleapSlideIn .25s ease-out forwards;\n      max-width: 800px;\n      width: calc(100% - 20px);\n      left: 50%;\n      z-index: ${zIndexBase + 99};\n      transform: translateX(-50%);\n      border-radius: ${formItemBorderRadius}px;\n      overflow: hidden;\n      box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.15), 0px 5px 5px rgba(0, 0, 0, 0.05);\n    }\n\n    .gleap-b-shown .gleap-b {\n      display: block;\n    }\n\n    .gleap-image-view {\n      position: fixed;\n      top: 0px;\n      left: 0px;\n      width: 100vw;\n      height: 100vh;\n      z-index: ${zIndexBase + 99};\n      background-color: ${contrastBackgroundColor}cc;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n    }\n\n    .gleap-image-view-image {\n      width: 90%;\n      height: auto;\n      max-width: 90%;\n      max-height: 90%;\n      object-fit: contain;\n    }\n\n    .gleap-image-view-close {\n      position: fixed;\n      top: 20px;\n      right: 20px;\n      width: 32px;\n      height: 32px;\n      opacity: 0.8;\n      z-index: ${zIndexBase + 140};\n      box-shadow: 0px 5px 18px rgba(0, 0, 0, 0.16);\n      cursor: pointer;\n    }\n\n    .gleap-image-view-close:hover {\n      opacity: 1;\n    }\n\n    .gleap-image-view-close svg path {\n      fill: ${backgroundColor};\n    }\n\n    [dir=rtl].gleap-frame-container {\n      right: auto;\n      left: ${buttonX}px;\n      bottom: ${61 + buttonY}px;\n    }\n\n    .gleap-frame-container--loading iframe {\n      opacity: 0;\n    }\n\n    .gleap-frame-container--loading::before {\n      content: \" \";\n      position: fixed;\n      top: 0px;\n      left: 0px;\n      right: 0px;\n      height: 100%;\n      max-height: 380px;\n      background: linear-gradient(\n        130deg,\n        ${headerDarkColor} 0%,\n        ${headerColor} 100%\n      );\n    }\n    \n    .gleap-frame-container--loading::after {\n      content: \" \";\n      position: fixed;\n      top: 0px;\n      left: 0px;\n      right: 0px;\n      height: 100%;\n      height: 100%;\n      max-height: 380px;\n      background: linear-gradient(\n        180deg,\n        transparent 60%,\n        ${backgroundColor}1A 70%,\n        ${backgroundColor} 100%\n      );\n    }\n\n    .gleap-frame-container--loading-nogradient::before {\n      max-height: 340px;\n      background: ${headerColor} !important;\n    }\n\n    .gleap-frame-container--loading-nofade::after {\n      display: none !important;\n    }\n\n    .gleap-frame-container--survey {\n      bottom: ${buttonY}px !important;\n    }\n\n    .gleap-frame-container--extended {\n      max-width: 690px !important;\n    }\n\n    .gleap-frame-container--survey-full {\n      position: fixed;\n      top: 0 !important;\n      left: 0 !important;\n      bottom: 0 !important;\n      right: 0 !important;\n      width: 100vw !important;\n      max-width: 100vw !important;\n      height: 100vh;\n      height: 100dvh !important;\n      background-color: rgba(0, 0, 0, 0.5);\n      backdrop-filter: blur(6px);\n      display: flex !important;\n      justify-content: center !important;\n      align-items: center !important;\n      max-height: 100vh;\n      max-height: 100dvh !important;\n      border-radius: 0 !important;\n      animation-name: none !important;\n    }\n\n    .gleap-frame-container--survey-full .gleap-frame-container-inner {\n      max-width: 640px !important;\n      width: calc(100% - 24px);\n      border-radius: ${containerRadius}px;\n      overflow: hidden;\n    }\n\n    .gleap-frame-container--classic {\n      right: ${buttonX}px;\n      bottom: ${buttonY}px;\n    }\n\n    [dir=rtl].gleap-frame-container--classic {\n      right: auto;\n      left: ${buttonX}px;\n      bottom: ${buttonY}px;\n    }\n\n    .gleap-frame-container--no-button {\n      bottom: ${buttonY}px;\n    }\n\n    [dir=rtl].gleap-frame-container--classic-left {\n      bottom: ${buttonY}px;\n    }\n\n    .gleap-frame-container--classic-left {\n      right: auto;\n      left: ${buttonX}px;\n      bottom: ${buttonY}px;\n    }\n\n    [dir=rtl].gleap-frame-container--classic-left {\n      left: auto;\n      right: ${buttonX}px;\n      bottom: ${buttonY}px;\n    }\n\n    .gleap-frame-container--modern-left {\n      right: auto;\n      left: ${buttonX}px;\n      bottom: ${61 + buttonY}px;\n    }\n\n    [dir=rtl].gleap-frame-container--modern-left {\n      left: auto;\n      right: ${buttonX}px;\n      bottom: ${61 + buttonY}px;\n    }\n\n    .gleap-frame-container--animate {\n      pointer-events: auto !important;\n    }\n\n    @keyframes gleapFadeInUp {\n      from {\n          opacity: 0;\n          transform: translate3d(0, 100%, 0);\n      }\n      to {\n          opacity: 1;\n          transform: translate3d(0, 0, 0);\n      }\n    }\n\n    @keyframes gleapFadeInUpMobile {\n      from {\n          opacity: 0;\n          transform: translate3d(0, 10%, 0);\n      }\n      to {\n          opacity: 1;\n          transform: translate3d(0, 0, 0);\n      }\n    }\n\n    .gleap-notification-container {\n      position: fixed;\n      bottom: ${bottomInfoOffset}px;\n      right: ${buttonX}px;\n      z-index: ${zIndexBase + 30};\n      display: flex;\n      flex-direction: column;\n      align-items: flex-end;\n      width: 100%;\n      max-width: min(340px, 80vw);\n    }\n\n    .gleap-notification-container--left {\n      left: ${4 + buttonX}px;\n      right: initial !important;\n    }\n\n    [dir=rtl].gleap-notification-container {\n      left: ${4 + buttonX}px;\n      right: initial !important;\n    }\n\n    [dir=rtl].gleap-notification-container--left {\n      left: initial !important;\n      right: ${buttonX}px !important;\n      align-items: flex-start !important;\n    }\n\n    .gleap-notification-container--no-button {\n      bottom: ${buttonY}px;\n    }\n\n    .gleap-notification-item {\n      animation-duration: 0.7s;\n      animation-fill-mode: both;\n      animation-name: bbFadeInOpacity;\n    }\n\n    .gleap-notification-close {\n      border-radius: 100%;\n      width: 28px;\n      height: 28px;\n      background-color: ${subTextColor};\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      margin-bottom: 8px;\n      cursor: pointer;\n      visibility: hidden;\n      pointer-events: none;\n    }\n\n    .gleap-notification-container:hover .gleap-notification-close {\n      visibility: visible;\n      pointer-events: auto;\n      animation-duration: 0.7s;\n      animation-fill-mode: both;\n      animation-name: bbFadeInOpacity;\n    }\n\n    @media only screen and (max-width: 450px) {\n      .gleap-notification-close {\n        visibility: visible;\n        pointer-events: auto;\n        animation-duration: 0.7s;\n        animation-fill-mode: both;\n        animation-name: bbFadeInOpacity;\n      }\n    }\n\n    .gleap-notification-close svg {\n      width: 45%;\n      height: 45%;\n      object-fit: contain;\n      fill: ${backgroundColor};\n    }\n\n    .gleap-notification-item-checklist-container {\n      display: flex;\n      animation: fadeIn;\n      animation-duration: .45s;\n      background-color: ${backgroundColor};\n      border-radius: ${subTextColor};\n      box-sizing: border-box;\n      cursor: pointer;\n      flex-direction: column;\n      overflow: hidden;\n      box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.2);\n      border-radius: ${chatRadius}px;\n      margin-bottom: 12px;\n    }\n\n    .gleap-notification-item-checklist-content {\n      align-items: flex-start;\n      display: flex;\n      flex-direction: column;\n      padding: 15px;\n      width: 100%;\n      width: min(310px, 70vw);\n      max-width: min(310px, 70vw);\n    }\n\n    .gleap-notification-item-checklist-content-title {\n      color: ${contrastBackgroundColor};\n      font-size: 15px;\n      font-weight: 500;\n      line-height: 21px;\n      margin-bottom: 10px;\n      max-width: 100%;\n      -webkit-line-clamp: 3;\n      -webkit-box-orient: vertical;\n      overflow: hidden;\n    }\n\n    .gleap-notification-item-checklist-content-progress {\n      width: 100%;\n      height: 8px;\n      border-radius: 8px;\n      background-color: ${backgroundColorHover};\n    }\n\n    .gleap-notification-item-checklist-content-progress-inner {\n      height: 100%;\n      border-radius: 8px;\n      background-color: ${primaryColor};\n    }\n\n    .gleap-notification-item-checklist-content-next {\n      color: ${subTextColor};\n      font-size: 15px;\n      font-weight: normal;\n      line-height: 21px;\n      margin-top: 10px;\n      max-width: 100%;\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      display: flex;\n      align-items: center;\n    }\n\n    .gleap-notification-item-checklist-content-next svg {\n      height: 18px;\n      margin-right: 5px;\n      width: auto;\n    }\n\n    .gleap-notification-item-checklist-content-next b {\n      font-size: 15px;\n      font-weight: normal;\n      color: ${contrastBackgroundColor};\n    }\n\n    .gleap-notification-item-news {\n      width: 100%;\n    }\n\n    .gleap-news-pagination {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      margin-top: 10px;\n      width: 100%;\n    }\n\n    .gleap-news-page-indicator {\n      font-size: 12px;\n      color: ${subTextColor};\n    }\n\n    .gleap-news-next-button {\n      background-color: ${primaryColor};\n      color: ${contrastColor};\n      border-radius: ${formItemSmallBorderRadius}px;\n      box-sizing: border-box;\n      padding: 5px 10px;\n      font-size: 14px;\n      font-weight: bold;\n      line-height: 21px;\n      border: none;\n      text-align: center;\n      cursor: pointer;\n      -webkit-tap-highlight-color: transparent;\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      box-shadow: none !important;\n      outline: none !important;^\n    }\n\n    .gleap-notification-item-news-content {\n      align-items: flex-start;\n      display: flex;\n      flex-direction: column;\n      padding: 15px;\n    }\n\n    .gleap-notification-item-news-preview {\n      color: ${subTextColor};\n      font-size: 14px;\n      line-height: 21px;\n      font-weight: 400;\n      overflow-wrap: break-word;\n      word-break: break-word;\n      display: block;\n      display: -webkit-box;\n      -webkit-line-clamp: 2;\n      -webkit-box-orient: vertical;\n      overflow: hidden;\n    }\n\n    .gleap-notification-item-news-sender {\n      display: flex;\n      align-items: center;\n      color: ${subTextColor};\n      font-size: 15px;\n      line-height: 21px;\n      font-weight: 400;\n    }\n    \n    .gleap-notification-item-news-content-title {\n      color: ${contrastBackgroundColor};\n      font-size: 15px;\n      font-weight: 500;\n      line-height: 21px;\n      margin-bottom: 6px;\n      max-width: 100%;\n      -webkit-line-clamp: 3;\n      -webkit-box-orient: vertical;\n      overflow: hidden;\n      cursor: pointer;\n    }\n\n    .gleap-notification-item-news-sender img {\n      border-radius: 100%;\n      height: 20px;\n      margin-right: 8px;\n      object-fit: cover;\n      width: 20px;\n    }\n\n    [dir=rtl] .gleap-notification-item-news-sender img {\n      margin-left: 8px;\n      margin-right: 0px !important;\n    }\n\n    .gleap-notification-item-news-container {\n      display: flex;\n      animation: fadeIn;\n      animation-duration: .45s;\n      background-color: ${backgroundColor};\n      border-radius: ${subTextColor};\n      box-sizing: border-box;\n      flex-direction: column;\n      overflow: hidden;\n      box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.2);\n      border-radius: ${chatRadius}px;\n      margin-bottom: 12px;\n    }\n\n    .gleap-notification-item-news-image {\n      background-color: ${subTextColor};\n      height: 170px;\n      max-height: 170px;\n      object-fit: cover;\n      width: 100%;\n      cursor: pointer;\n    }\n      \n    .gleap-notification-item-news-content-title:hover {\n      color: ${primaryColor};\n    }\n\n    .gleap-notification-item {\n      display: flex;\n      align-items: flex-end;\n      cursor: pointer;\n    }\n\n    .gleap-notification-item img {\n      width: 32px;\n      height: 32px;\n      min-width: 32px;\n      border-radius: 100%;\n      object-fit: cover;\n      margin-right: 8px;\n      margin-bottom: 12px;\n      cursor: pointer;\n    }\n\n    [dir=rtl] .gleap-notification-item img {\n      margin-left: 8px;\n      margin-right: 0px !important;\n    }\n\n    .gleap-notification-item-container {\n      box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.2);\n      border-radius: ${chatRadius}px;\n      border-bottom-left-radius: 0px;\n      padding: 20px;\n      background-color: ${backgroundColor};\n      margin-bottom: 12px;\n      cursor: pointer;\n      font-size: 15px;\n      line-height: 21px;\n      color: ${contrastBackgroundColor};\n      position: relative;\n    }\n\n    .gleap-notification-item-container::after {\n      content: \" \";\n      position: absolute;\n      bottom: 0px;\n      width: 0px;\n      height: 0px;\n      left: -6px;\n      border-style: solid;\n      border-width: 0px 0px 10px 6px;\n      border-color: transparent transparent ${backgroundColor};\n    }\n\n    .gleap-notification-item-sender {\n      color: ${subTextColor};\n      line-height: 20px;\n    }\n\n    .gleap-notification-item-content {\n      line-height: 20px;\n      color: ${contrastBackgroundColor};\n      margin-top: 4px;\n      min-width: min(200px, 50vw);\n      word-wrap: break-word;\n      word-break: break-word;\n    }\n\n    .gleap-frame-container-inner {\n      position: relative;\n      width: 100%;\n      height: calc(100vh - ${84 + buttonY}px);\n      max-height: ${widgetMaxHeight}px;\n    }\n\n    .gleap-frame-container--survey .gleap-frame-container-inner {\n      height: calc(100vh - 40px);\n    }\n    \n    .gleap-frame-container-inner:before {\n      content: \" \";\n      position: absolute;\n      width: 100%;\n      height: calc(100% - ${containerRadius}px);\n      top: ${containerRadius}px;\n      background-color: ${backgroundColor};\n      z-index: -1;\n    }\n    \n    .gleap-frame-container iframe {\n      height: 100% !important;\n      width: 100% !important;\n      max-width: 100% !important;\n      display: block !important;\n      pointer-events: auto !important;\n    }\n    \n    .gleap-frame-container--hidden {\n      display: none !important;\n      pointer-events: none;\n      animation: none !important;\n    }\n    \n    .bb-feedback-button {\n      margin: 0px;\n      position: fixed;\n      bottom: ${buttonY}px;\n      right: ${buttonX}px;\n      border-radius: 30px;\n      cursor: pointer;\n      -webkit-tap-highlight-color: transparent;\n      background-color: transparent;\n      color: #000000;\n      z-index: ${zIndexBase + 30};\n      box-sizing: border-box;\n      display: flex;\n      align-items: center;\n      padding: 0px;\n    }\n\n    @keyframes bbRedDotPulse {\n      0% {\n        opacity: 1;\n      }\n      50% {\n        opacity: 0.8;\n      }\n      100% {\n        opacity: 1;\n      }\n    }\n\n    .bb-feedback-button--red-dot {\n      position: absolute;\n      top: 0px;\n      right: 0px;\n      width: 14px;\n      height: 14px;\n      border-radius: 50%;\n      background-color: #ff3b30;\n      box-shadow: 0 2px 4px rgba(0,0,0,0.2);\n      z-index: ${zIndexBase + 31};\n      animation: bbRedDotPulse 2s ease-in-out infinite;\n    }\n\n    [dir=rtl].bb-feedback-button {\n      bottom: ${buttonY}px;\n      right: auto;\n      left: ${buttonX}px;\n    }\n    \n    .bb-feedback-button--bottomleft {\n      bottom: ${buttonY}px;\n      right: auto;\n      left: ${buttonX}px;\n    }\n\n    [dir=rtl].bb-feedback-button--bottomleft {\n      bottom: ${buttonY}px;\n      right: ${buttonX}px;\n      left: auto;\n    }\n    \n    .bb-feedback-button--disabled {\n      display: none !important;\n    }\n\n    .bb-feedback-button--hidden {\n      display: none !important;\n    }\n    \n    .bb-feedback-button-text {\n      padding: 8px 12px;\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      justify-content: center;\n      background-color: #fff;\n      border-radius: 8px;\n      box-shadow: 0px 0px 14px 0px rgba(0, 0, 0, 0.15);\n      position: relative;\n      z-index: 99;\n    }\n    \n    .bb-feedback-button-text:before {\n      content: \"\";\n      position: absolute;\n      box-shadow: rgba(0, 0, 0, 0.04) 6px 6px 5px;\n      transform: rotate(315deg);\n      bottom: 16px;\n      right: -4px;\n      border-width: 10px;\n      border-style: solid;\n      border-color: transparent #fff #fff transparent;\n    }\n    \n    .bb-feedback-button--bottomleft .bb-feedback-button-text:before {\n      display: none;\n    }\n    \n    .bb-feedback-button-text:after {\n      content: \"\";\n      position: absolute;\n      bottom: 12px;\n      right: 0px;\n      background-color: #fff;\n      width: 5px;\n      height: 30px;\n    }\n    \n    .bb-feedback-button-text-title {\n      font-family: sans-serif;\n      font-size: 14px;\n      color: #666;\n      line-height: 18px;\n      max-width: 220px;\n    }\n    \n    .bb-feedback-button-text-title b {\n      color: #000000;\n      font-weight: 600;\n    }\n\n    .bb-notification-bubble {\n      position: absolute;\n      top: -5px;\n      right: -5px;\n      min-width: 12px;\n      padding: 0px 4px;\n      height: 20px;\n      min-width: 20px;\n      border-radius: 20px;\n      background-color: red;\n      color: #fff;\n      font-size: 11px;\n      font-family: sans-serif;\n      text-align: center;\n      line-height: 20px;\n    }\n\n    .bb-notification-bubble--hidden {\n      display: none;\n    }\n    \n    .bb-feedback-button-icon {\n      width: 48px;\n      height: 48px;\n      border-radius: 48px;\n      background-color: #485bff;\n      transition: box-shadow, transform 0.2s ease-in-out;\n      box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.15), 0px 0px 20px rgba(0, 0, 0, 0.1);\n      position: relative;\n    }\n    \n    .bb-feedback-button-classic {\n      cursor: pointer;\n      -webkit-tap-highlight-color: transparent;\n      top: 50%;\n      right: 0px;\n      position: fixed;\n      transform: rotate(-90deg) translate(50%, -50%);\n      transform-origin: 100% 50%;\n      padding: 9px 20px;\n      text-align: center;\n      background-color: #485bff;\n      border-top-left-radius: 8px;\n      border-top-right-radius: 8px;\n      font-family: sans-serif;\n      font-size: 16px;\n      color: #fff;\n      box-shadow: 0px 0px 14px 0px rgba(0, 0, 0, 0.25);\n    }\n\n    [dir=rtl].bb-feedback-button .bb-feedback-button-classic {\n      top: 50%;\n      left: 0px;\n      right: auto;\n      transform: rotate(90deg) translate(-50%, -100%);\n      transform-origin: 0% 0%;\n    }\n    \n    .bb-feedback-button-classic--left {\n      top: 50%;\n      left: 0px;\n      right: auto;\n      transform: rotate(90deg) translate(-50%, -100%);\n      transform-origin: 0% 0%;\n    }\n\n    [dir=rtl].bb-feedback-button .bb-feedback-button-classic--left {\n      top: 50%;\n      right: 0px;\n      left: auto;\n      transform: rotate(-90deg) translate(50%, -50%);\n      transform-origin: 100% 50%;\n    }\n    \n    .bb-feedback-button-classic--bottom {\n      top: auto;\n      bottom: 0px;\n      transform: none;\n      right: ${buttonX}px;\n      left: auto;\n    }\n    \n    [dir=rtl].bb-feedback-button .bb-feedback-button-classic--bottom {\n      top: auto;\n      bottom: 0px;\n      transform: none;\n      left: ${buttonX}px;\n      right: auto;\n    }\n\n    .bb-feedback-button--classic-button-style {\n      animation-duration: 0.2s;\n      animation-fill-mode: both;\n      animation-name: bbFadeInOpacity;\n    }\n    \n    .bb-feedback-button--open.bb-feedback-button--classic-button-style {\n      animation-duration: 0.2s;\n      animation-fill-mode: both;\n      animation-name: bbFadeOutRight;\n    }\n    \n    .bb-feedback-button .bb-logo-logo {\n      position: absolute;\n      width: 30px;\n      height: 30px;\n      top: 9px;\n      left: 9px;\n      object-fit: contain;\n      animation-duration: 0.3s;\n      animation-fill-mode: both;\n      animation-name: bbZoomIn;\n    }\n    \n    .bb-feedback-button .bb-logo-arrowdown {\n      position: absolute;\n      width: 14px;\n      height: 14px;\n      top: 17px;\n      left: 17px;\n      object-fit: contain;\n      animation-duration: 0.3s;\n      animation-fill-mode: both;\n    }\n    \n    .bb-feedback-button .bb-logo-arrowdown {\n      animation-name: bbZoomOut;\n    }\n    \n    .bb-feedback-button--open .bb-logo-arrowdown {\n      animation-name: bbZoomIn;\n    }\n    \n    .bb-feedback-button--open .bb-logo-logo {\n      animation-name: bbZoomOut;\n    }\n    \n    .bb-feedback-button-icon:hover {\n      box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.25), 0px 0px 20px rgba(0, 0, 0, 0.2);\n      transform: scale(1.1);\n    }\n    \n    .bb-feedback-button--open .bb-feedback-button-text {\n      animation-name: bbFadeOutDown;\n    }\n    \n    .bb-feedback-button--open .bb-feedback-button-icon {\n      display: flex;\n    }\n    \n    .bb-capture-svg {\n      position: fixed;\n      z-index: ${zIndexBase + 14};\n      top: 0px;\n      left: 0px;\n      right: 0px;\n      width: 100%;\n      height: 100%;\n      padding: 0px;\n      margin: 0px;\n      cursor: crosshair;\n    }\n\n    .bb-capture-svg--preview {\n      cursor: auto !important;\n    }\n    \n    .bb-rec-on-circle {\n      animation-name: bbRecIconFade;\n      animation-duration: 2s;\n      animation-iteration-count: infinite;\n      animation-direction: alternate;\n    }\n    \n    .bb-rec-on-cont {\n      animation-name: bbRecIconContFade;\n      animation-duration: 2s;\n      animation-iteration-count: infinite;\n      animation-direction: alternate;\n    }\n    \n    .bb-capture-editor-drag-info {\n      position: fixed;\n      top: -200px;\n      left: 0px;\n      z-index: ${zIndexBase + 16};\n      transition: opacity 0.3s ease-in-out;\n    }\n    \n    .bb-capture-editor-drag-info svg {\n      width: 24px;\n      height: 24px;\n    }\n    \n    .bb-capture-editor-borderlayer {\n      position: fixed;\n      top: 0px;\n      left: 0px;\n      width: 100vw;\n      height: 100vh;\n      border: 4px solid ${primaryColor};\n      cursor: crosshair;\n      z-index: ${zIndexBase + 10};\n      box-sizing: border-box;\n      pointer-events: none;\n    }\n    \n    .bb-capture-editor-notrecording .bb-capture-editor-borderlayer {\n      background-color: rgba(0, 0, 0, 0.8);\n    }\n\n    .bb-capture-editor-recording .bb-capture-editor-borderlayer {\n      border: 4px solid #eb144c !important;\n    }\n    \n    .bb-capture-editor-recording .bb-capture-dismiss {\n      display: none;\n    }\n    \n    .bb-capture-editor-item-inactive {\n      opacity: 0.3;\n      cursor: not-allowed !important;\n    }\n    \n    .bb-capture-editor-notrecording .bb-capture-toolbar-drawingitem {\n      opacity: 0.3;\n      cursor: not-allowed !important;\n    }\n    \n    .bb-capture-editor-notrecording .bb-capture-editor-drag-info {\n      display: none;\n    }\n    \n    .bb-capture-editor-notrecording .bb-capture-svg {\n      pointer-events: none !important;\n    }\n    \n    .bb-capture-toolbar {\n      position: fixed;\n      top: 20px;\n      left: 50%;\n      transform: translateX(-50%);\n      z-index: ${zIndexBase + 18};\n      background-color: #fff;\n      padding: 5px;\n      display: flex;\n      align-items: center;\n      border-radius: 8px;\n      box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.15), 0px 0px 20px rgba(0, 0, 0, 0.1);\n      transition: opacity 0.3s ease-in-out;\n    }\n    \n    .bb-capture-dismiss {\n      position: fixed;\n      top: 0px;\n      right: 0px;\n      z-index: ${zIndexBase + 18};\n      cursor: pointer;\n      -webkit-tap-highlight-color: transparent;\n      width: 36px;\n      height: 36px;\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      background-color: ${primaryColor};\n      border-bottom-left-radius: ${formItemSmallBorderRadius}px;\n    }\n\n    [dir=rtl] .bb-capture-dismiss {\n      top: 0px;\n      left: 0px;\n      right: auto;\n      border-bottom-left-radius: 0px !important;\n      border-bottom-right-radius: ${formItemSmallBorderRadius}px;\n    }\n    \n    .bb-capture-dismiss svg path {\n      fill: ${contrastColor};\n    }\n    \n    .bb-capture-dismiss svg {\n      width: 20px;\n      height: 20px;\n      object-fit: contain;\n    }\n    \n    .bb-capture-button-next {\n      font-family: sans-serif;\n      box-sizing: border-box;\n      font-weight: 600;\n      text-align: center;\n      width: auto;\n      cursor: pointer;\n      -webkit-tap-highlight-color: transparent;\n      margin: 0px;\n      line-height: 36px;\n      padding: 0px 12px;\n      font-size: 15px;\n      margin-left: 12px;\n    }\n\n    [dir=rtl].bb-capture-editor .bb-capture-button-next {\n      margin-left: auto;\n      margin-right: 12px;\n    }\n    \n    .bb-capture-toolbar-item-spacer {\n      width: 1px;\n      height: 38px;\n      min-width: 1px;\n      margin: 0px 5px;\n    }\n    \n    .bb-capture-toolbar-item {\n      width: 42px;\n      height: 38px;\n      min-width: 42px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      cursor: pointer;\n      -webkit-tap-highlight-color: transparent;\n      position: relative;\n      margin-right: 5px;\n    }\n\n    .drag-handle-item {\n      cursor: grab !important;\n      width: 34px;\n      min-width: 34px;\n    }\n\n    .drag-handle-item svg {\n      width: 18px !important;\n      height: 18px !important;\n    }\n    \n    .bb-capture-toolbar-item svg {\n      width: 23px;\n      height: 23px;\n      object-fit: contain;\n    }\n    \n    .bb-capture-toolbar-item-selectedcolor {\n      border-radius: 100%;\n      width: 20px;\n      height: 20px;\n      background-color: #db4035;\n    }\n    \n    .bb-capture-toolbar-item[data-type=\"undo\"] svg {\n      width: 18px;\n      height: 18px;\n    }\n    \n    .bb-capture-toolbar-item[data-active=\"true\"] {\n      position: relative;\n    }\n    \n    .bb-capture-preview {\n      display: none;\n      background-color: rgba(0, 0, 0, 0.6);\n      position: fixed;\n      top: 0px;\n      left: 0px;\n      width: 100vw;\n      height: 100vh;\n      justify-content: center;\n      align-items: center;\n      z-index: ${zIndexBase + 20};\n    }\n    \n    .bb-capture-preview-inner {\n      background-color: #fff;\n      padding: 0px;\n      box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.15), 0px 0px 20px rgba(0, 0, 0, 0.1);\n      border-radius: 8px;\n      flex-direction: column;\n      max-width: 640px;\n      width: 100%;\n      margin: 20px;\n    }\n    \n    .bb-capture-preview-inner video {\n      border-radius: 8px 8px 0px 0px;\n      display: block;\n      border: 0px;\n      outline: none;\n      width: 100%;\n      max-height: 60vh;\n    }\n    \n    .bb-capture-preview-buttons {\n      display: flex;\n      justify-content: space-between;\n      padding: 14px;\n    }\n    \n    .bb-capture-preview-retrybutton {\n      font-family: sans-serif;\n      border-radius: 21px;\n      box-sizing: border-box;\n      padding: 12px 26px;\n      font-size: 16px;\n      line-height: 19px;\n      font-weight: 600;\n      text-align: center;\n      margin-top: 0px;\n      margin-bottom: 0px;\n      cursor: pointer;\n      -webkit-tap-highlight-color: transparent;\n    }\n    \n    .bb-capture-preview-sendbutton {\n      font-family: sans-serif;\n      border-radius: 21px;\n      box-sizing: border-box;\n      padding: 12px 26px;\n      font-size: 16px;\n      line-height: 19px;\n      font-weight: 600;\n      text-align: center;\n      margin-top: 0px;\n      margin-bottom: 0px;\n      cursor: pointer;\n      -webkit-tap-highlight-color: transparent;\n    }\n    \n    .bb-capture-preview-retrybutton:hover,\n    .bb-capture-preview-sendbutton:hover {\n      opacity: 0.9;\n    }\n    \n    .bb-capture-toolbar-item-recording {\n      margin-right: 0px;\n    }\n    \n    .bb-capture-toolbar-item-recording svg {\n      width: 33px;\n      height: 33px;\n    }\n    \n    .bb-capture-toolbar-item-colorpicker {\n      position: fixed;\n      top: 70px;\n      left: 50%;\n      transform: translateX(-50%);\n      z-index: ${zIndexBase + 18};\n      background-color: #fff;\n      display: none;\n      padding: 10px;\n      box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.15), 0px 0px 20px rgba(0, 0, 0, 0.1);\n      border-radius: 8px;\n    }\n    \n    .bb-capture-toolbar-item-color {\n      width: 20px;\n      height: 20px;\n      border-radius: 100%;\n      margin-right: 12px;\n      box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.15);\n      cursor: pointer;\n      -webkit-tap-highlight-color: transparent;\n    }\n    \n    .bb-capture-toolbar-item-color:hover {\n      box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.25);\n    }\n    \n    .bb-capture-toolbar-item-color:last-of-type {\n      margin-right: 0px;\n    }\n    \n    [dir=rtl].bb-capture-editor .bb-capture-toolbar-item-color {\n      margin-right: auto;\n      margin-left: 12px;\n    }\n    \n    [dir=rtl].bb-capture-editor .bb-capture-toolbar-item-color:last-of-type {\n      margin-right: auto;\n      margin-left: 0px;\n    }\n    \n    .bb-capture-toolbar-item-recording[data-active=\"true\"] svg:first-of-type {\n      display: none;\n    }\n    \n    .bb-capture-toolbar-item-recording[data-active=\"true\"] svg:nth-of-type(2) {\n      display: block;\n    }\n    \n    .bb-capture-toolbar-item-recording[data-active=\"false\"] svg:first-of-type {\n      display: block;\n    }\n    \n    .bb-capture-toolbar-item-recording[data-active=\"false\"] svg:nth-of-type(2) {\n      display: none;\n    }\n    \n    .bb-capture-toolbar-item--active {\n      background-color: #eee;\n    }\n    \n    .bb-capture-toolbar-item:hover svg {\n      opacity: 1;\n    }\n    \n    .bb-capture-toolbar-item--active {\n      background-color: #f8f8f8;\n    }\n    \n    .bb-capture-toolbar-item--active svg {\n      opacity: 1;\n    }\n    \n    .bb-capture-toolbar-item--inactivecross::before {\n      content: \"\";\n      position: absolute;\n      top: 0;\n      right: 0;\n      bottom: 0;\n      left: 0;\n      height: 3px;\n      width: 26px;\n      margin: auto;\n      border-radius: 4px;\n      background-color: #e80000;\n      transform: rotate(45deg);\n    }\n    \n    .bb-capture-toolbar-item--inactivecross svg {\n      fill: #eee;\n    }\n    \n    .bb-capture-toolbar-item-timer {\n      text-align: left;\n      line-height: 32px;\n      font-size: 14px;\n      font-family: sans-serif;\n      margin: 5px;\n      min-width: 40px;\n      display: none;\n    }\n    \n    .bb-capture-toolbar-item .bb-tooltip {\n      background-color: #555;\n      color: #fff;\n      visibility: hidden;\n      font-size: 14px;\n      font-family: sans-serif;\n      text-align: center;\n      padding: 5px 10px;\n      position: absolute;\n      z-index: 1;\n      top: 45px;\n      left: 0px;\n      transform: translateX(calc(-50% + 21px));\n      opacity: 0;\n      transition: opacity 0.3s;\n      white-space: nowrap;\n    }\n    \n    .bb-capture-toolbar-item .bb-tooltip::after {\n      content: \"\";\n      position: absolute;\n      bottom: 100%;\n      left: 50%;\n      margin-left: -5px;\n      border-width: 5px;\n      border-style: solid;\n      transform: rotate(180deg);\n      border-color: #555 transparent transparent transparent;\n    }\n    \n    .bb-capture-toolbar-item:hover .bb-tooltip {\n      visibility: visible;\n      opacity: 1;\n    }\n    \n    .bb-capture-options {\n      display: none;\n    }\n    \n    .bb-capture-options--active {\n      display: flex;\n    }\n\n    @keyframes bbFadeOutRight {\n      from {\n        opacity: 1;\n      }\n    \n      to {\n        opacity: 0;\n      }\n    }\n    \n    @keyframes bbFadeOutDown {\n      from {\n        opacity: 1;\n      }\n    \n      to {\n        opacity: 0;\n        transform: translate3d(0, 100%, 0);\n      }\n    }\n    \n    @keyframes bbFadeInOpacity {\n      from {\n        opacity: 0;\n      }\n    \n      to {\n        opacity: 1;\n      }\n    }\n    \n    @keyframes bbZoomOut {\n      from {\n        opacity: 1;\n      }\n    \n      50% {\n        opacity: 0;\n        transform: scale3d(0.3, 0.3, 0.3);\n      }\n    \n      to {\n        opacity: 0;\n      }\n    }\n    \n    @keyframes bbZoomIn {\n      from {\n        opacity: 0;\n        transform: scale3d(0.3, 0.3, 0.3);\n      }\n    \n      50% {\n        opacity: 1;\n      }\n    }\n    \n    @keyframes bbRecIconContFade {\n      0% {\n        fill: #b10802;\n      }\n      50% {\n        fill: #ff0000;\n      }\n      100% {\n        fill: #b10802;\n      }\n    }  \n    .bb-capture-preview-retrybutton {\n      color: ${contrastBackgroundColor};\n      border-radius: ${buttonBorderRadius}px;\n      background-color: ${backgroundColorHover};\n    }\n    .bb-capture-preview-retrybutton:hover {\n      background-color: ${hoverHoverColor};\n    }\n    @keyframes bb-suc-fill {\n      100% {\n        box-shadow: inset 0px 0px 0px 30px ${primaryColor};\n      }\n    }\n    .bb-capture-toolbar-item-spacer {\n      background-color: ${backgroundColorHover};\n    }\n    .bb-tooltip {\n      border-radius: ${formItemBorderRadius}px;\n    }\n    @keyframes bbRecIconFade {\n      0% {\n        fill: transparent;\n      }\n      50% {\n        fill: ${hoverHoverColor};\n      }\n      100% {\n        fill: transparent;\n      }\n    }\n    .bb-capture-preview-sendbutton {\n      color: ${contrastColor};\n      background-color: ${primaryColor};\n      border-radius: ${buttonBorderRadius}px;\n    }\n    .bb-capture-button-next {\n      color: ${contrastColor};\n      background-color: ${primaryColor};\n      border-radius: ${formItemSmallBorderRadius}px;\n    }\n    .bb-capture-preview-inner {\n      background-color: ${backgroundColor};\n      border-radius: ${formItemBorderRadius}px;\n    }\n    .bb-capture-toolbar-item-timer {\n      color: ${subTextColor};\n    }\n    .bb-svg-path {\n      fill: ${contrastBackgroundColor};\n    }\n    .bb-capture-toolbar-item {\n      border-radius: ${formItemBorderRadius}px;\n    }\n    .bb-capture-toolbar {\n      background-color: ${backgroundColor};\n      border-radius: ${formItemBorderRadius}px;\n    }\n    .bb-capture-toolbar-item-colorpicker {\n      background-color: ${backgroundColor};\n    }\n    .bb-capture-toolbar-item--active {\n      background-color: ${backgroundColorHover};\n    }\n    .bb-feedback-button-classic {\n      border-top-left-radius: ${formItemBorderRadius}px;\n      border-top-right-radius: ${formItemBorderRadius}px;\n    }\n    .bb-logo-logo--default path {\n      fill: ${contrastButtonColor};\n    }\n    .bb-logo-arrowdown {\n      fill: ${contrastButtonColor};\n    }\n    .bb-feedback-button-icon {\n        background-color: ${buttonColor};\n    }\n    .bb-feedback-button-classic {\n      background-color: ${buttonColor};\n      color: ${contrastButtonColor};\n    }\n\n    @media only screen and (max-width: 450px) {\n      [dir=rtl].gleap-frame-container,\n      .gleap-frame-container {\n        left: 0px;\n        right: 0px;\n        width: 100vw;\n        max-width: 100vw;\n        min-height: 100vh;\n        max-height: 100vh;\n        min-height: 100dvh !important;\n        max-height: 100dvh !important;\n        top: 0px;\n        bottom: 0px;\n        border-radius: 0px;\n        animation-name: gleapFadeInUpMobile;\n      }\n\n      .gleap-frame-container-inner {\n        width: 100vw;\n        height: 100%;\n      }\n\n      .gleap-frame-container:not(.gleap-frame-container--survey):not(.gleap-frame-container--survey-full) .gleap-frame-container-inner {\n        max-height: calc(var(--glvh, 1vh) * 100) !important;\n      }\n\n      .gleap-frame-container--survey {\n        height: auto !important;\n        top: initial !important;\n        bottom: 0px !important;\n        min-height: initial !important;\n      }\n\n      .gleap-frame-container--survey .gleap-frame-container-inner {\n        height: 100vh !important;\n      }\n\n      .bb-tooltip {\n        display: none !important;\n      }\n    \n      .bb-capture-toolbar-item-colorpicker {\n        top: 75px;\n      }\n    \n      .bb-capture-button-next {\n        margin-left: auto;\n      }\n    \n      .bb-capture-dismiss {\n        display: none;\n      }\n    \n      .bb-capture-toolbar {\n        top: 15px;\n        right: 15px;\n        left: 15px;\n        width: auto;\n        transform: none;\n      }\n\n      .bb-capture-editor-drag-info {\n        display: none;\n      }\n    \n      .bb-capture-editor-borderlayer {\n        border-width: 4px;\n      }\n    }\n    \n    @media print {\n      .bb-feedback-button {\n        display: none !important;\n      }\n      \n      .gleap-frame-container {\n        display: none !important;\n      }\n    }\n\n    .gleap-tour-sender {\n      display: flex;\n      align-items: center;\n      justify-content: flex-start;\n      margin-bottom: 10px;\n    }\n\n    .gleap-tour-sender-image {\n      width: 32px;\n      height: 32px;\n      border-radius: 32px;\n      margin-right: 10px;\n      background-size: cover;\n      background-repeat: no-repeat;\n    }\n\n    .gleap-tour-popover.gleap-tour-popover-post {\n      min-width: 550px;\n      max-width: 550px;\n    }\n\n    @media only screen and (max-width: 450px) {\n      .gleap-tour-popover.gleap-tour-popover-post {\n        min-width: calc(100vw - 40px);\n        max-width: calc(100vw - 40px);\n      }\n    }\n\n    .gleap-tour-message,\n    .gleap-tour-message p,\n    .gleap-tour-message ul {\n      color: ${contrastBackgroundColor};\n    }\n\n    .gleap-tour-message h2 {\n      font-weight: 600;\n      font-size: 22px;\n    }\n\n    .gleap-tour-message h3 {\n      font-weight: 600;\n      font-size: 18px;\n    }\n\n    .gleap-tour-message p {\n      line-height: 1.3;\n      margin-bottom: 10px !important;\n      margin-top: 10px !important;\n    }\n\n    .gleap-tour-message ul {\n      line-height: 1.3;\n      padding-left: 20px;\n      margin-top: 10px !important;\n      margin-bottom: 10px !important;\n    }\n\n    .gleap-tour-message {\n      max-height: calc(80vh - 100px) !important;\n      overflow-y: auto;\n      min-width: 270px;\n    }\n\n    .gleap-tour-message::-webkit-scrollbar {\n      width: 5px;\n    }\n\n    .gleap-tour-message::-webkit-scrollbar-track {\n      border-radius: 0px;\n    }\n    \n    .gleap-tour-message::-webkit-scrollbar-thumb {\n      background: ${hoverHoverColor}; \n      border-radius: 5px;\n    }\n\n    .gleap-tour-message::-webkit-scrollbar-thumb:hover {\n      background: ${subTextColor};\n    }\n\n    @media only screen and (max-width: 450px) {\n      .gleap-tour-message {\n        min-width: auto !important;\n      }\n    }\n\n    .gleap-tour-message iframe {\n      width: 100%;\n      height: 300px;\n      margin-top: 10px;\n      margin-bottom: 10px;\n      border: none;\n      outline: none;\n      display: block;\n    }\n\n    .gleap-tour-sender-name {\n      font-size: 15px;\n    }\n\n    .gleap-tour-video {\n      width: 100%;\n      max-width: 100%;\n    }\n\n    .gleap-tour-video-svg--fullscreen {\n      width: 100% !important;\n      height: 100% !important;\n      top: 0px !important;\n      left: 0px !important;\n      right: 0px !important;\n      bottom: 0px !important;\n    }\n\n    .gleap-tour-video--playing .gleap-tour-video-playpause {\n      opacity: 0;\n    }\n    \n    .gleap-tour-video--playing:hover .gleap-tour-video-playpause {\n      opacity: 1;\n    }\n\n    .gleap-tour-popover-video-pointer {\n      padding: 0px !important;\n      border-radius: 8px;\n      position: relative;\n      background-color: transparent !important;\n    }\n\n    .gleap-tour-popover-video-pointer .gleap-tour-popover-footer {\n      position: absolute;\n      top: 0px;\n      left: 20px;\n      right: 20px;\n      opacity: 0;\n      transition: opacity 200ms ease-in-out;\n    }\n\n    .gleap-tour-popover-video-pointer .gleap-tour-popover-footer button {\n      padding: 5px 12px;\n    }\n\n    .gleap-tour-popover-video-pointer.gleap-tour-popover-can-close .gleap-tour-popover-footer {\n      right: 40px !important;\n    }\n\n    .gleap-tour-popover-video-pointer:hover .gleap-tour-popover-footer {\n      opacity: 1;\n    }\n\n    .gleap-tour-popover-pointer.gleap-tour-popover-no-sender .gleap-tour-message {\n      padding-right: 20px;\n    }\n\n    .gleap-tour-video video {\n      width: 100%;\n      max-width: 100%;\n      height: auto;\n      border: none;\n      outline: none;\n      display: block;\n      border-radius: 8px;\n    }\n\n    .gleap-admin-collapse-ui {\n      z-index: ${zIndexBase + 35};\n      cursor: pointer;\n      position: fixed;\n      bottom: 75px;\n      right: 20px;\n      width: 32px;\n      height: 32px;\n      border-radius: 100%;\n      background-color: #fff;\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      box-shadow: rgba(0, 0, 0, 0.16) 0px 10px 36px 0px, rgba(0, 0, 0, 0.06) 0px 0px 0px 1px;\n    }\n\n    .gleap-admin-collapse-ui svg {\n      width: 20px;\n      height: 14px;\n      fill: #000 !important;\n    }\n\n    .gleap-admin-collapse-ui-active {\n      bottom: 20px !important;\n    }\n\n    .gleap-admin-collapse-ui-active svg {\n      transform: rotate(180deg);\n    }\n\n    .gleap-admin-frame-container-active {\n      display: none !important;\n    }\n\n    .gleap-admin-frame-container {\n      position: fixed;\n      bottom: 0px;\n      left: 0px;\n      right: 0px;\n      width: 100vw;\n      z-index: ${zIndexBase + 40};\n    }\n\n    .gleap-admin-frame {\n      width: 100%;\n      height: 100% !important;\n      border: none;\n      outline: none;\n      display: block;\n    }\n    \n    .gleap-tour-message .linktype-link {\n      display: inline-block !important;\n      background-color: transparent !important;\n      color: ${buttonColor} !important;\n    }\n\n    .gleap-tooltip .linktype-button,\n    .gleap-tour-message .linktype-button {\n      display: inline-block !important;\n      border-radius: 5px;\n      box-sizing: border-box;\n      padding: 10px 20px !important;\n      text-decoration: none !important;\n      background-color: ${buttonColor} !important;\n      color: ${contrastButtonColor} !important;\n    }\n\n    .gleap-tour-message img {\n      width: 100%;\n      max-width: 100%;\n      min-height: 260px;\n      height: auto;\n      margin-top: 10px;\n      margin-bottom: 10px;\n      object-fit: cover;\n    }\n\n    .gleap-tour-active .gleap-tour-overlay {\n      pointer-events: none;\n    }\n    \n    .gleap-tour-active * {\n      pointer-events: none;\n    }\n    \n    .gleap-tour-active .gleap-tour-active-element,\n    .gleap-tour-active .gleap-tour-active-element *,\n    .gleap-tour-popover,\n    .gleap-tour-popover * {\n      pointer-events: auto;\n    }\n    \n    @keyframes animate-fade-in {\n      0% {\n        opacity: 0;\n      }\n    \n      to {\n        opacity: 1;\n      }\n    }\n    \n    .gleap-tour-fade .gleap-tour-overlay {\n      animation: animate-fade-in 200ms ease-in-out;\n    }\n    \n    .gleap-tour-fade .gleap-tour-popover {\n      animation: animate-fade-in 200ms;\n    }\n\n    .gleap-tour-video-playpause {\n      position: absolute;\n      bottom: 8px;\n      left: 8px;\n      width: 32px;\n      height: 32px;\n      padding: 4px;\n      background-color: rgba(0,0,0,0.5);\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      cursor: pointer;\n      border-radius: 8px;\n      transition: opacity 200ms ease-in-out;\n    }\n\n    .gleap-tour-popover-video-pointer .gleap-tour-popover-arrow {\n      display: none !important;\n    }\n\n    .gleap-tour-video-playpause svg {\n      width: 34px;\n      height: auto;\n      fill: #fff;\n    }\n    \n    /* Popover styles */\n    .gleap-tour-popover {\n      all: unset;\n      box-sizing: border-box;\n      color: #2d2d2d;\n      margin: 0;\n      padding: 15px;\n      border-radius: ${formItemBorderRadius}px;\n      min-width: 250px;\n      max-width: 300px;\n      box-shadow: 0 1px 10px #0006;\n      z-index: 1000000000;\n      position: fixed;\n      top: 0;\n      right: 0;\n      background-color: #fff;\n    }\n    \n    .gleap-tour-popover * {\n      font-family: \"Helvetica Neue\", Inter, ui-sans-serif, \"Apple Color Emoji\", Helvetica, Arial, sans-serif;\n    }\n    \n    .gleap-tour-popover-title {\n      font: 19px / normal sans-serif;\n      font-weight: 700;\n      display: block;\n      position: relative;\n      line-height: 1.5;\n      zoom: 1;\n      margin: 0;\n    }\n    \n    .gleap-tour-popover-close-btn {\n      all: unset;\n      position: absolute;\n      top: 5px;\n      right: 5px;\n      width: 32px;\n      height: 32px;\n      cursor: pointer;\n      font-size: 30px;\n      font-weight: 500;\n      line-height: 32px;\n      color: #d2d2d2;\n      z-index: 1;\n      text-align: center;\n      transition: color;\n      transition-duration: 200ms;\n    }\n    \n    .gleap-tour-popover-close-btn:hover,\n    .gleap-tour-popover-close-btn:focus {\n      color: #2d2d2d;\n    }\n    \n    .gleap-tour-popover-title[style*=\"block\"] + .gleap-tour-popover-description {\n      margin-top: 5px;\n    }\n    \n    .gleap-tour-popover-description {\n      margin-bottom: 0;\n      font: 15px / normal sans-serif;\n      line-height: 1.5;\n      font-weight: 400;\n      zoom: 1;\n    }\n    \n    .gleap-tour-popover-footer {\n      margin-top: 15px;\n      text-align: right;\n      zoom: 1;\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n    }\n    \n    .gleap-tour-popover-progress-text {\n      font-size: 13px;\n      font-weight: 400;\n      color: #727272;\n      zoom: 1;\n    }\n    \n    .gleap-tour-popover-footer button {\n      background-color: ${primaryColor};\n      color: ${contrastColor};\n      border-radius: ${formItemSmallBorderRadius}px;\n      box-sizing: border-box;\n      padding: 10px 20px;\n      font-size: 14px;\n      font-weight: bold;\n      line-height: 21px;\n      border: none;\n      text-align: center;\n      cursor: pointer;\n      -webkit-tap-highlight-color: transparent;\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      box-shadow: none !important;\n      outline: none !important;\n    }\n\n    .gleap-tour-popover-prev-btn {\n      color: ${contrastBackgroundColor} !important;\n      background-color: ${backgroundColorHover} !important;\n      margin-right: 3px;\n    }\n\n    .gleap-tour-popover-prev-btn:hover {\n      background-color: ${primaryColor}22 !important;\n      color: ${primaryColor} !important;\n    }\n    \n    .gleap-tour-popover-footer .gleap-tour-popover-btn-disabled {\n      opacity: 0.5;\n      pointer-events: none;\n    }\n    \n    .gleap-tour-no-interaction, .gleap-tour-no-interaction * {\n      pointer-events: none !important;\n    }\n    \n    .gleap-tour-popover-navigation-btns {\n      display: flex;\n      flex-grow: 1;\n      justify-content: flex-end;\n    }\n    \n    .gleap-tour-popover-navigation-btns button + button {\n      margin-left: 4px;\n    }\n    \n    .gleap-tour-popover-arrow {\n      content: \"\";\n      position: absolute;\n      border: 5px solid #fff;\n    }\n    \n    .gleap-tour-popover-arrow-side-over {\n      display: none;\n    }\n    \n    /** Popover Arrow Sides **/\n    .gleap-tour-popover-arrow-side-left {\n      left: 100%;\n      border-right-color: transparent;\n      border-bottom-color: transparent;\n      border-top-color: transparent;\n    }\n    \n    .gleap-tour-popover-arrow-side-right {\n      right: 100%;\n      border-left-color: transparent;\n      border-bottom-color: transparent;\n      border-top-color: transparent;\n    }\n    \n    .gleap-tour-popover-arrow-side-top {\n      top: 100%;\n      border-right-color: transparent;\n      border-bottom-color: transparent;\n      border-left-color: transparent;\n    }\n    \n    .gleap-tour-popover-arrow-side-bottom {\n      bottom: 100%;\n      border-left-color: transparent;\n      border-top-color: transparent;\n      border-right-color: transparent;\n    }\n    \n    .gleap-tour-popover-arrow-side-center {\n      display: none;\n    }\n    \n    /* Left/Start + Right/Start */\n    .gleap-tour-popover-arrow-side-left.gleap-tour-popover-arrow-align-start,\n    .gleap-tour-popover-arrow-side-right.gleap-tour-popover-arrow-align-start {\n      top: 15px;\n    }\n    \n    /* Top/Start + Bottom/Start */\n    .gleap-tour-popover-arrow-side-top.gleap-tour-popover-arrow-align-start,\n    .gleap-tour-popover-arrow-side-bottom.gleap-tour-popover-arrow-align-start {\n      left: 15px;\n    }\n    \n    /* End/Left + End/Right */\n    .gleap-tour-popover-arrow-align-end.gleap-tour-popover-arrow-side-left,\n    .gleap-tour-popover-arrow-align-end.gleap-tour-popover-arrow-side-right {\n      bottom: 15px;\n    }\n    \n    /* Top/End + Bottom/End */\n    .gleap-tour-popover-arrow-side-top.gleap-tour-popover-arrow-align-end,\n    .gleap-tour-popover-arrow-side-bottom.gleap-tour-popover-arrow-align-end {\n      right: 15px;\n    }\n    \n    /* Left/Center + Right/Center */\n    .gleap-tour-popover-arrow-side-left.gleap-tour-popover-arrow-align-center,\n    .gleap-tour-popover-arrow-side-right.gleap-tour-popover-arrow-align-center {\n      top: 50%;\n      margin-top: -5px;\n    }\n    \n    /* Top/Center + Bottom/Center */\n    .gleap-tour-popover-arrow-side-top.gleap-tour-popover-arrow-align-center,\n    .gleap-tour-popover-arrow-side-bottom.gleap-tour-popover-arrow-align-center {\n      left: 50%;\n      margin-left: -5px;\n    }\n    \n    /* No arrow */\n    .gleap-tour-popover-arrow-none {\n      display: none;\n    }    \n\n    /* Modal styles */\n    .gleap-modal-wrapper {\n      position: fixed;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      z-index: ${zIndexBase + 40};\n      display: flex;\n      align-items: center;\n      justify-content: center;\n    }\n\n    .gleap-modal-backdrop {\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      background-color: rgba(0, 0, 0, 0.5);\n      z-index: ${zIndexBase + 41};\n    }\n\n    .gleap-modal {\n      position: relative;\n      width: 90%;\n      max-width: 600px;\n      max-height: 90vh;\n      z-index: ${zIndexBase + 100};\n      background-color: ${backgroundColor};\n      border-radius: ${containerRadius}px;\n      overflow: hidden;\n      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);\n      animation-duration: 0.3s;\n      animation-fill-mode: both;\n      animation-name: gleapFadeInUp;\n    }\n\n    .gleap-modal-frame {\n      width: 100%;\n      border: none;\n      display: block;\n      outline: none;\n    }\n\n    body.gleap-modal-open {\n      overflow: hidden;\n    }\n\n    /* Agent Popup styles */\n    .gleap-agent-popup-wrapper {\n      position: fixed;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      z-index: ${zIndexBase + 40};\n      display: flex;\n      align-items: center;\n      justify-content: center;\n    }\n\n    .gleap-agent-popup-backdrop {\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      background-color: rgba(0, 0, 0, 0.5);\n      z-index: ${zIndexBase + 41};\n    }\n\n    .gleap-agent-popup {\n      position: relative;\n      width: 95%;\n      max-width: 700px;\n      height: 85vh;\n      max-height: 800px;\n      z-index: ${zIndexBase + 100};\n      background-color: ${backgroundColor};\n      border-radius: ${containerRadius}px;\n      overflow: hidden;\n      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);\n      animation-duration: 0.3s;\n      animation-fill-mode: both;\n      animation-name: gleapFadeInUp;\n    }\n\n    .gleap-agent-popup-frame {\n      width: 100%;\n      height: 100%;\n      border: none;\n      display: block;\n      outline: none;\n    }\n\n    body.gleap-agent-popup-open {\n      overflow: hidden;\n    }\n\n    @keyframes gleapFadeInUp {\n      from {\n        opacity: 0;\n        transform: translate3d(0, 20px, 0);\n      }\n      to {\n        opacity: 1;\n        transform: translate3d(0, 0, 0);\n      }\n    }\n\n    .gleap-admin-frame-container,\n    .gleap-frame-container,\n    .bb-feedback-button,\n    .gleap-notification-container,\n    .gleap-tooltip,\n    .gleap-ai-ui-widget {\n      pointer-events: auto !important;\n    }\n    `;\n\n  const oldNode = document.querySelector('.gleap-styles');\n  if (oldNode) {\n    oldNode.remove();\n  }\n  const node = document.createElement('style');\n  node.innerHTML = colorStyleSheet;\n  node.className = 'gleap-styles';\n  document.body.appendChild(node);\n};\n\nexport const loadIcon = function (name, color) {\n  if (name === 'button') {\n    return `<svg class=\"bb-logo-logo bb-logo-logo--default\" width=\"145\" height=\"144\" viewBox=\"0 0 145 144\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M38.9534 15H105.047C113.857 15 121 22.1426 121 30.9534L121 89.5238L121 96.015L121 125.541C121 128.759 117.393 130.66 114.739 128.84L90.1188 111.968H38.9534C30.1426 111.968 23 104.826 23 96.015V30.9534C23 22.1426 30.1426 15 38.9534 15Z\" fill=\"white\"/>\n    </svg>`;\n  }\n\n  if (name === 'drag') {\n    return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"><!--!Font Awesome Pro 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc.--><path d=\"M64 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm0 160a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM96 416a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96-288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32 128a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM192 448a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"/></svg>`;\n  }\n\n  if (name === 'unmute') {\n    return `<svg id=\"tooltip-svg-unmute\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 512\"><path id=\"tooltip-svg-unmute-path\" d=\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.1 386.2C556.7 352 576 306.3 576 256c0-60.1-27.7-113.8-70.9-149c-10.3-8.4-25.4-6.8-33.8 3.5s-6.8 25.4 3.5 33.8C507.3 170.7 528 210.9 528 256c0 39.1-15.6 74.5-40.9 100.5L449 326.6c19-17.5 31-42.7 31-70.6c0-30.1-13.9-56.9-35.4-74.5c-10.3-8.4-25.4-6.8-33.8 3.5s-6.8 25.4 3.5 33.8C425.1 227.6 432 241 432 256s-6.9 28.4-17.7 37.3c-1.3 1-2.4 2.2-3.4 3.4L352 250.6V64c0-12.6-7.4-24-18.9-29.2s-25-3.1-34.4 5.3L197.8 129.8 38.8 5.1zM352 373.3L82.9 161.3C53.8 167.4 32 193.1 32 224v64c0 35.3 28.7 64 64 64h67.8L298.7 471.9c9.4 8.4 22.9 10.4 34.4 5.3S352 460.6 352 448V373.3z\"/></svg>`;\n  }\n\n  if (name === 'mute') {\n    return `<svg id=\"tooltip-svg-mute\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 512\"><path id=\"tooltip-svg-mute-path\" d=\"M533.6 32.5C598.5 85.3 640 165.8 640 256s-41.5 170.8-106.4 223.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C557.5 398.2 592 331.2 592 256s-34.5-142.2-88.7-186.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zM473.1 107c43.2 35.2 70.9 88.9 70.9 149s-27.7 113.8-70.9 149c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C475.3 341.3 496 301.1 496 256s-20.7-85.3-53.2-111.8c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zm-60.5 74.5C434.1 199.1 448 225.9 448 256s-13.9 56.9-35.4 74.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C393.1 284.4 400 271 400 256s-6.9-28.4-17.7-37.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zM301.1 34.8C312.6 40 320 51.4 320 64V448c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L131.8 352H64c-35.3 0-64-28.7-64-64V224c0-35.3 28.7-64 64-64h67.8L266.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3z\"/></svg>`;\n  }\n\n  if (name === 'replay') {\n    return `<svg id=\"tooltip-svg-replay\" width=\"512\" height=\"512\" viewBox=\"0 0 512 512\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path id=\"tooltip-svg-replay-path\" d=\"M48.5 224H40C26.7 224 16 213.3 16 200V72C16 62.3 21.8 53.5 30.8 49.8C39.8 46.1 50.1 48.1 57 55L98.6 96.6C186.2 10.1 327.3 10.4 414.4 97.6C501.9 185.1 501.9 326.9 414.4 414.4C326.9 501.9 185.1 501.9 97.6 414.4C85.1 401.9 85.1 381.6 97.6 369.1C110.1 356.6 130.4 356.6 142.9 369.1C205.4 431.6 306.7 431.6 369.2 369.1C431.7 306.6 431.7 205.3 369.2 142.8C307 80.6 206.5 80.3 143.9 141.8L185 183C191.9 189.9 193.9 200.2 190.2 209.2C186.5 218.2 177.7 224 168 224H48.5Z\" />\n    </svg>`;\n  }\n\n  if (name === 'dismiss') {\n    return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"><path d=\"M294.6 166.6L317.3 144 272 98.7l-22.6 22.6L160 210.7 70.6 121.4 48 98.7 2.7 144l22.6 22.6L114.7 256 25.4 345.4 2.7 368 48 413.3l22.6-22.6L160 301.3l89.4 89.4L272 413.3 317.3 368l-22.6-22.6L205.3 256l89.4-89.4z\"/></svg>`;\n  }\n\n  if (name === 'blur') {\n    return `<svg width=\"1200pt\" height=\"1200pt\" version=\"1.1\" viewBox=\"0 0 1200 1200\" xmlns=\"http://www.w3.org/2000/svg\">\n <path class=\"bb-svg-path\" d=\"m602.25 1200c238.2 0 435.95-193.26 435.95-435.95 0-269.66-220.23-615.73-435.95-764.05-220.23 161.8-440.45 485.39-440.45 764.05 0 242.7 197.75 435.95 440.45 435.95zm-260.68-382.02c0 112.36 89.887 206.74 206.74 206.74v62.922c-148.32 0-274.16-121.35-274.16-269.66z\" fill=\"#333\"/>\n</svg>`;\n  }\n\n  if (name === 'pen') {\n    return `<svg width=\"1072px\" height=\"1034px\" viewBox=\"0 0 1072 1034\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n    <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g transform=\"translate(-907.000000, -217.000000)\" fill-rule=\"nonzero\">\n            <g transform=\"translate(907.268457, 217.009827)\">\n                <g transform=\"translate(132.335119, 0.000000)\" fill=\"#000\" class=\"bb-svg-path\">\n                    <path d=\"M20.3764235,730.530173 L10.1884235,720.342173 C-0.791576454,709.362173 -3.16357645,692.432173 4.37592355,678.858173 L83.1809235,537.018173 C71.7589235,502.979173 82.3098335,463.998173 112.254924,440.706173 L655.334924,18.3161733 C689.951924,-8.6058267 739.197924,-5.5388267 770.214924,25.4684733 L913.774924,169.028473 C944.782924,200.040473 947.848924,249.286473 920.927224,283.908473 L498.537224,826.988473 C496.322424,829.836173 493.935624,832.543173 491.384924,835.090073 C467.271924,859.207073 432.513924,866.195073 402.232924,856.063073 L260.382924,934.868073 C246.804924,942.407173 229.874924,940.036073 218.894924,929.055573 L208.706924,918.867573 L20.3764235,730.530173 Z M866.006424,241.190173 C871.393124,234.264373 870.779824,224.417173 864.576724,218.213173 L721.016724,74.6531733 C714.813624,68.4500733 704.965724,67.8367733 698.043724,73.2234733 L154.963724,495.613473 C147.381724,501.507973 146.018424,512.433473 151.912924,520.015473 C152.358234,520.585783 152.834804,521.128773 153.346524,521.636573 L417.586524,785.886573 C424.379524,792.675673 435.391524,792.675673 442.180524,785.886573 C442.692244,785.374853 443.168804,784.831873 443.610224,784.265473 L866.006424,241.190173 Z M342.796424,809.480173 L129.746424,596.430173 L77.9264235,689.707173 L249.516424,861.297173 L342.796424,809.480173 Z\"></path>\n                </g>\n                <g transform=\"translate(-0.000000, 755.530173)\" fill=\"#EB144C\">\n                    <path d=\"M124.711543,0 L313.042043,188.3374 L233.288043,268.0914 C222.003043,279.3764 204.483043,281.5324 190.800043,273.3219 L16.8900429,168.9719 C-2.51595711,157.3309 -5.80895711,130.5499 10.1908429,114.5499 L124.711543,0 Z\" class=\"bb-pen-tip\"></path>\n                </g>\n            </g>\n        </g>\n    </g>\n</svg>`;\n  }\n\n  if (name === 'rect') {\n    return `<svg width=\"339px\" height=\"241px\" viewBox=\"0 0 339 241\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n    <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g transform=\"translate(-0.000865, 0.000000)\" fill-rule=\"nonzero\">\n            <g transform=\"translate(0.000865, 0.000000)\" fill=\"#000000\" class=\"bb-svg-path\">\n                <path d=\"M339,0 L339,241 L0,241 L0,0 L339,0 Z M312.826351,26.168387 L26.1855674,26.168387 L26.1855674,214.41156 L312.826351,214.41156 L312.826351,26.168387 Z\"></path>\n            </g>\n            <g transform=\"translate(0.000000, 83.206095)\" fill=\"#EB144C\" class=\"bb-pen-tip\">\n                <path d=\"M0,0 L26.186,26.186 L26.1864325,131.205465 L131.204,131.205 L157.792,157.793 L0.000865118243,157.793905 L0,0 Z\"></path>\n            </g>\n        </g>\n    </g>\n</svg>`;\n  }\n\n  if (name === 'pointer') {\n    return `<svg width=\"1200pt\" height=\"1200pt\" version=\"1.1\" viewBox=\"0 0 1200 1200\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path d=\"m1050.7 508.95-225.94 157.5 160.31 160.31c4.4531 4.4531 6.9141 10.43 6.9141 16.758s-2.4609 12.305-6.9141 16.758l-126.09 126.09c-4.4531 4.4531-10.43 6.9141-16.758 6.9141-6.3281 0-12.188-2.4609-16.758-6.9141l-160.2-160.43-157.62 225.94c-3.3984 4.9219-9.0234 7.8516-14.883 7.8516-0.70313 0-1.5234 0-2.2266-0.11719-6.7969-0.82031-12.422-5.2734-14.766-11.719l-333.16-880.55c-2.5781-6.6797-0.9375-14.297 4.2188-19.336 5.0391-5.0391 12.656-6.6797 19.336-4.2188l880.66 333.05c6.3281 2.3438 10.781 8.0859 11.602 14.766 0.82031 6.7969-2.1094 13.359-7.7344 17.344z\" fill=\"#333\"/>\n   </svg>`;\n  }\n\n  if (name === 'clip') {\n    return `<svg width=\"600px\" height=\"1126px\" viewBox=\"0 0 600 1126\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n    <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g transform=\"translate(-0.002000, 0.501000)\" fill=\"#333333\" fill-rule=\"nonzero\">\n            <path d=\"M225.002,1124.999 C165.33,1124.999 108.102,1101.292 65.902,1059.097 C23.707,1016.902 5.68434189e-14,959.671 5.68434189e-14,899.997 L5.68434189e-14,299.997 C5.68434189e-14,220.431 31.605,144.127 87.867,87.867 C144.129,31.605 220.437,-4.26325641e-14 299.997,-4.26325641e-14 C379.557,-4.26325641e-14 455.867,31.605 512.127,87.867 C568.389,144.129 599.994,220.437 599.994,299.997 L599.994,1012.497 C599.994,1025.895 592.8456,1038.274 581.244,1044.974 C569.642,1051.6732 555.346,1051.6732 543.744,1044.974 C532.142,1038.2748 524.994,1025.896 524.994,1012.497 L524.994,299.997 C524.994,240.325 501.287,183.097 459.092,140.897 C416.897,98.702 359.666,74.995 299.992,74.995 C240.318,74.995 183.092,98.702 140.892,140.897 C98.697,183.092 74.99,240.323 74.99,299.997 L74.99,899.997 C74.99,953.587 103.58,1003.107 149.99,1029.897 C196.4,1056.694 253.58,1056.694 299.99,1029.897 C346.4,1003.104 374.99,953.585 374.99,899.997 L374.99,337.497 C374.99,310.704 360.697,285.942 337.49,272.544 C314.283,259.149 285.697,259.149 262.49,272.544 C239.283,285.942 224.99,310.704 224.99,337.497 L224.99,824.997 C224.99,838.395 217.8416,850.774 206.24,857.474 C194.638,864.1732 180.342,864.1732 168.74,857.474 C157.138,850.7748 149.99,838.396 149.99,824.997 L149.99,337.497 C149.99,283.907 178.58,234.387 224.99,207.597 C271.4,180.8 328.58,180.8 374.99,207.597 C421.4,234.39 449.99,283.909 449.99,337.497 L449.99,899.997 C449.99,959.669 426.283,1016.897 384.088,1059.097 C341.893,1101.292 284.662,1124.999 224.988,1124.999 L225.002,1124.999 Z\" id=\"Path\"></path>\n        </g>\n    </g>\n</svg>`;\n  }\n\n  if (name === 'mic') {\n    return `<svg\n    width=\"1200pt\"\n    height=\"1200pt\"\n    version=\"1.1\"\n    viewBox=\"0 0 1200 1200\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <g class=\"bb-svg-path\">\n      <path\n        d=\"m600 862.5c144.75 0 262.5-117.75 262.5-262.5v-300c0-144.75-117.75-262.5-262.5-262.5s-262.5 117.75-262.5 262.5v300c0 144.75 117.75 262.5 262.5 262.5z\"\n      />\n      <path\n        d=\"m1012.5 600c0-20.707-16.793-37.5-37.5-37.5s-37.5 16.793-37.5 37.5c0 186.11-151.41 337.5-337.5 337.5s-337.5-151.39-337.5-337.5c0-20.707-16.793-37.5-37.5-37.5s-37.5 16.793-37.5 37.5c0 214.8 165.08 391.57 375 410.6v114.4c0 20.727 16.793 37.5 37.5 37.5s37.5-16.773 37.5-37.5v-114.4c209.92-19.031 375-195.8 375-410.6z\"\n      />\n    </g>\n  </svg>`;\n  }\n\n  if (name === 'camera') {\n    return `<svg width=\"1155px\" height=\"1004px\" viewBox=\"0 0 1155 1004\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n    <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g fill=\"#333333\" fill-rule=\"nonzero\">\n            <g transform=\"translate(128.324095, 0.000000)\">\n                <path d=\"M42.7803063,0.00413459787 C31.4357421,0.00413459787 20.5549853,4.41399115 12.5336107,12.2572687 C4.51223664,20.1005462 0.00420584816,30.741831 0.00420584816,41.8370305 L0.00420584816,251.00151 C-0.156199045,262.200455 4.27736739,272.989996 12.315738,280.963903 C20.3585574,288.938257 31.3288589,293.431222 42.7803063,293.431222 C54.2317532,293.431222 65.2018267,288.938592 73.2448746,280.963903 C81.2832452,272.989549 85.7172445,262.200455 85.5564062,251.00151 L85.5564062,83.6699265 L256.660808,83.6699265 C268.112255,83.8267939 279.145066,79.4909873 287.298762,71.6298611 C295.452913,63.7643845 300.04718,53.0359758 300.04718,41.8370305 C300.04718,30.6380854 295.453255,19.9098998 287.298762,12.0441998 C279.144611,4.18307356 268.112255,-0.153157091 256.660808,0.00413459787 L42.7803063,0.00413459787 Z\"></path>\n                <path d=\"M983.227131,710.59444 C971.895913,710.764382 961.099907,715.326799 953.20401,723.279287 C945.312674,731.227538 940.964345,741.91668 941.119476,752.99849 L941.119476,920.330075 L770.015075,920.330075 C758.563631,920.173205 747.530815,924.509015 739.377123,932.370139 C731.222968,940.235615 726.628705,950.964028 726.628705,962.16297 C726.628705,973.361918 731.222627,984.090105 739.377123,991.955802 C747.531272,999.816926 758.563631,1004.15316 770.015075,1003.99587 L983.895579,1003.99587 C995.24014,1003.99587 1006.1209,999.586011 1014.14227,991.742733 C1022.16365,983.899455 1026.67168,973.258169 1026.67168,962.16297 L1026.67168,752.99849 C1026.83208,741.690223 1022.30053,730.801401 1014.11489,722.812989 C1005.93394,714.825472 994.790363,710.415949 983.227131,710.59444 L983.227131,710.59444 Z\"></path>\n                <path d=\"M983.227131,375.93127 C971.895913,376.101212 961.099907,380.66363 953.20401,388.61612 C945.312674,396.56437 940.964345,407.253512 941.119476,418.335325 L941.119476,585.66691 C940.959072,596.865853 945.39264,607.655394 953.431008,615.629303 C961.47383,623.603658 972.444131,628.096618 983.895579,628.096618 C995.347023,628.096618 1006.3171,623.603989 1014.36015,615.629303 C1022.39852,607.654947 1026.83251,596.865853 1026.67168,585.66691 L1026.67168,418.335325 C1026.83208,407.027056 1022.30053,396.138232 1014.11489,388.149822 C1005.93394,380.162305 994.790363,375.752783 983.227131,375.93127 L983.227131,375.93127 Z\"></path>\n                <path d=\"M769.974012,0.00413459787 C758.522563,-0.152733184 747.489752,4.18307356 739.336055,12.0441998 C731.181906,19.9096767 726.587637,30.6380854 726.587637,41.8370305 C726.587637,53.0359758 731.181564,63.7641611 739.336055,71.6298611 C747.490209,79.4909873 758.522563,83.8272181 769.974012,83.6699265 L941.078414,83.6699265 L941.078414,251.00151 C940.918009,262.200455 945.351572,272.989996 953.389945,280.963903 C961.432763,288.938257 972.403063,293.431222 983.854512,293.431222 C995.30596,293.431222 1006.27603,288.938592 1014.31908,280.963903 C1022.35745,272.989549 1026.79145,262.200455 1026.63061,251.00151 L1026.63061,41.8370305 C1026.63061,30.7426118 1022.12133,20.1017733 1014.10121,12.2572687 C1006.08109,4.41276405 995.199876,0.00413459787 983.854512,0.00413459787 L769.974012,0.00413459787 Z\"></path>\n                <path d=\"M427.765208,0.00413459787 C416.31376,-0.152733184 405.280949,4.18307356 397.127256,12.0441998 C388.973102,19.9096767 384.378838,30.6380854 384.378838,41.8370305 C384.378838,53.0359758 388.972761,63.7641611 397.127256,71.6298611 C405.281406,79.4909873 416.31376,83.8272181 427.765208,83.6699265 L598.86961,83.6699265 C610.321058,83.8267939 621.35387,79.4909873 629.507562,71.6298611 C637.661716,63.7643845 642.255985,53.0359758 642.255985,41.8370305 C642.255985,30.6380854 637.662058,19.9098998 629.507562,12.0441998 C621.353413,4.18307356 610.321058,-0.153157091 598.86961,0.00413459787 L427.765208,0.00413459787 Z\"></path>\n            </g>\n            <g transform=\"translate(0.000000, 427.000000)\">\n                <path d=\"M768.516184,22.1826583 C752.659627,13.73125 732.573775,13.73125 717.773442,24.29375 L562.379192,124.6375 L562.379192,31.6875 C562.379192,13.7330104 548.635081,0 530.666079,0 L31.7131123,0 C13.7441105,0 0,13.7330104 0,31.6875 L0,475.3125 C0,493.26699 13.7441105,507 31.7131123,507 L530.666079,507 C548.635081,507 562.379192,493.26699 562.379192,475.3125 L562.379192,382.3625 L717.773442,482.70625 C726.231681,487.9875 735.742444,491.157658 745.257258,491.157658 C753.715498,491.157658 761.113815,489.046567 769.572406,484.820862 C786.485185,475.313732 796,458.414612 796,439.400352 L796,68.6566021 C794.943601,48.5869719 785.428963,31.6878521 768.516184,22.1807219 L768.516184,22.1826583 Z\"></path>\n            </g>\n        </g>\n    </g>\n</svg>`;\n  }\n\n  if (name === 'recorderon') {\n    return `<svg width=\"1251px\" height=\"1251px\" viewBox=\"0 0 1251 1251\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n    <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g>\n            <circle fill=\"#E31810\" cx=\"625.5\" cy=\"625.5\" r=\"625.5\"></circle>\n            <circle fill=\"#F71008\" cx=\"625\" cy=\"625\" r=\"507\"></circle>\n            <g transform=\"translate(175.000000, 449.000000)\" fill=\"#FFFFFF\" fill-rule=\"nonzero\">\n                <path d=\"M0,347.097493 L0,4.90250696 L135.528311,4.90250696 C161.471024,4.90250696 183.639743,9.49741034 202.034469,18.6872171 C220.429194,27.8770239 234.46286,40.8541449 244.135466,57.6185803 C253.808072,74.3830156 258.644376,94.0714804 258.644376,116.683975 C258.644376,139.40786 253.724206,158.929238 243.883867,175.248107 C234.043527,191.566976 219.814173,204.070682 201.195803,212.759227 C182.577434,221.447772 160.073248,225.792044 133.683247,225.792044 L42.9396629,225.792044 L42.9396629,167.64563 L121.941933,167.64563 C135.807866,167.64563 147.325536,165.751973 156.494943,161.964659 C165.66435,158.177344 172.51345,152.496373 177.042243,144.921744 C181.571035,137.347116 183.835432,127.934526 183.835432,116.683975 C183.835432,105.322032 181.571035,95.7423543 177.042243,87.9449425 C172.51345,80.1475308 165.636395,74.2159282 156.411077,70.1501349 C147.185759,66.0843416 135.584222,64.051445 121.606467,64.051445 L72.6284142,64.051445 L72.6284142,347.097493 L0,347.097493 Z M185.512762,191.37204 L270.888889,347.097493 L190.712487,347.097493 L107.181424,191.37204 L185.512762,191.37204 Z\"></path>\n                <polygon points=\"309.166667 347.097493 309.166667 4.90250696 540.126846 4.90250696 540.126846 64.5527072 381.634607 64.5527072 381.634607 146.091356 528.244113 146.091356 528.244113 205.741556 381.634607 205.741556 381.634607 287.447293 540.796296 287.447293 540.796296 347.097493\"></polygon>\n                <path d=\"M901,124.638783 L827.757943,124.638783 C826.420189,115.158428 823.68894,106.709759 819.564197,99.2927757 C815.439454,91.8757921 810.144176,85.5462611 803.678363,80.3041825 C797.212549,75.0621039 789.77129,71.0468948 781.354585,68.2585551 C772.93788,65.4702155 763.824427,64.0760456 754.014228,64.0760456 C736.288981,64.0760456 720.849065,68.4537389 707.69448,77.2091255 C694.539894,85.964512 684.339516,98.6793409 677.093346,115.353612 C669.847176,132.027883 666.224091,152.243346 666.224091,176 C666.224091,200.425856 669.875046,220.948035 677.176956,237.56654 C684.478866,254.185044 694.707113,266.732573 707.861699,275.209125 C721.016285,283.685678 736.233242,287.923954 753.51257,287.923954 C763.21129,287.923954 772.213263,286.641318 780.518488,284.076046 C788.823714,281.510773 796.209233,277.746515 802.675047,272.78327 C809.14086,267.820025 814.519748,261.769328 818.81171,254.631179 C823.103672,247.493029 826.08575,239.351077 827.757943,230.205323 L901,230.539924 C899.104848,246.26616 894.394837,261.406844 886.869968,275.961977 C879.3451,290.51711 869.256201,303.510773 856.603274,314.942966 C843.950346,326.375158 828.900608,335.409379 811.45406,342.045627 C794.007513,348.681876 774.303504,352 752.342035,352 C721.796641,352 694.512024,345.084918 670.488184,331.254753 C646.464343,317.424588 627.512821,297.404309 613.633619,271.193916 C599.754416,244.983523 592.814815,213.252218 592.814815,176 C592.814815,138.636248 599.838026,106.849176 613.884448,80.6387833 C627.93087,54.4283904 646.993871,34.4359949 671.073451,20.661597 C695.153031,6.88719899 722.242559,0 752.342035,0 C772.185393,0 790.607387,2.78833967 807.608016,8.36501901 C824.608646,13.9416984 839.686254,22.0557668 852.840839,32.7072243 C865.995425,43.3586819 876.72533,56.3802281 885.030556,71.7718631 C893.335782,87.1634981 898.65893,104.785805 901,124.638783 Z\"></path>\n            </g>\n        </g>\n    </g>\n</svg>`;\n  }\n\n  if (name === 'recorderoff') {\n    return `<svg width=\"1251px\" height=\"1251px\" viewBox=\"0 0 1251 1251\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n      <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n          <g class=\"bb-rec-on-circle\" fill=\"#EEEEEE\" fill-rule=\"nonzero\">\n              <path d=\"M625.5,0 C970.954111,0 1251,280.045889 1251,625.5 C1251,970.954111 970.954111,1251 625.5,1251 C280.045889,1251 0,970.954111 0,625.5 C0,280.045889 280.045889,0 625.5,0 Z M626,124 C348.753056,124 124,348.753056 124,626 C124,903.246944 348.753056,1128 626,1128 C903.246944,1128 1128,903.246944 1128,626 C1128,348.753056 903.246944,124 626,124 Z\"></path>\n          </g>\n          <g class=\"bb-rec-on-cont\" fill=\"#E31810\" transform=\"translate(86.000000, 86.000000)\" fill-rule=\"nonzero\">\n              <path d=\"M540,0 C241.2,0 0,241.2 0,540 C0,838.8 241.2,1080 540,1080 C838.8,1080 1080,838.8 1080,540 C1080,241.2 838.8,0 540,0 Z M777.6,741.6 C777.6,761.998 761.998,777.6 741.6,777.6 L338.4,777.6 C318.002,777.6 302.4,761.998 302.4,741.6 L302.4,338.4 C302.4,318.002 318.002,302.4 338.4,302.4 L741.6,302.4 C761.998,302.4 777.6,318.002 777.6,338.4 L777.6,741.6 Z\"></path>\n          </g>\n      </g>\n  </svg>`;\n  }\n\n  if (name === 'arrowdown') {\n    return `<svg class=\"bb-logo-arrowdown\" fill=\"${color}\" width=\"100pt\" height=\"100pt\" version=\"1.1\" viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path d=\"m50 77.637c-1.3477 0-2.6953-0.51562-3.7266-1.543l-44.73-44.73c-2.0586-2.0586-2.0586-5.3945 0-7.4531 2.0586-2.0586 5.3945-2.0586 7.4531 0l41.004 41 41.004-41c2.0586-2.0586 5.3945-2.0586 7.4531 0 2.0586 2.0586 2.0586 5.3945 0 7.4531l-44.73 44.727c-1.0312 1.0312-2.3789 1.5469-3.7266 1.5469z\"/>\n   </svg>`;\n  }\n\n  if (name === 'arrowleft') {\n    return `<svg fill=\"${color}\" width=\"100pt\" height=\"100pt\" version=\"1.1\" viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path d=\"m70.988 1.6211c2.1875-2.168 5.7344-2.168 7.9297 0 2.1836 2.168 2.1836 5.7227 0 7.8906l-46.016 40.445 46.016 40.5c2.1836 2.168 2.1836 5.668 0 7.8906-2.1953 2.168-5.7383 2.168-7.9297 0l-50.039-44.109c-1.168-1.168-1.668-2.7227-1.5898-4.2773-0.078125-1.5 0.42188-3.0547 1.5898-4.2227l50.039-44.109z\" fill-rule=\"evenodd\"/>\n   </svg>`;\n  }\n\n  if (name === 'close') {\n    return `<svg fill=\"${color}\" width=\"100pt\" height=\"100pt\" version=\"1.1\" viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path d=\"m72.812 33.02l-5.832-5.832-16.98 16.875-16.98-16.875-5.832 5.832 16.875 16.98-16.875 16.98 5.832 5.832 16.98-16.875 16.98 16.875 5.832-5.832-16.875-16.98z\"/>\n   </svg>`;\n  }\n\n  if (name === 'undo') {\n    return `<svg width=\"62px\" height=\"60px\" viewBox=\"0 0 62 60\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n    <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n      <g class=\"bb-svg-path\" transform=\"translate(-0.000500, 0.001926)\" fill-rule=\"nonzero\">\n        <path d=\"M28.0005,51.6270739 C24.9653,51.0684839 22.0825,49.8731739 19.5396,48.1192739 L13.8208,53.8380739 C17.9536,57.0060739 22.8403,59.0333739 28.0008,59.7286739 L28.0005,51.6270739 Z\" id=\"Path\"></path>\n        <path d=\"M2.2705,33.9980739 C2.96581,39.1582739 4.9932,44.0450739 8.1611,48.1780739 L13.8799,42.4592739 C12.126,39.9162739 10.9307,37.0334739 10.3721,33.9983739 L2.2705,33.9980739 Z\" id=\"Path\"></path>\n        <path d=\"M61.7305,33.9980739 L53.6289,33.9980739 C53.07031,37.0332739 51.875,39.9160739 50.1211,42.4589739 L55.8399,48.1777739 C59.0079,44.0449739 61.0352,39.1582739 61.7305,33.9977739 L61.7305,33.9980739 Z\" id=\"Path\"></path>\n        <path d=\"M4.0005,24.9980739 L24.0005,24.9980739 L24.0005,16.9980739 L14.27,16.9980739 C17.6762,12.3613739 22.7622,9.24417393 28.442,8.31057393 C34.1178,7.38088393 39.934,8.70901393 44.645,12.0175739 C49.352,15.3222739 52.5786,20.3417739 53.6294,25.9975739 L61.731,25.9975739 C60.6646,18.0834739 56.4888,10.9235739 50.129,6.09957393 C43.7657,1.27147393 35.746,-0.818426068 27.836,0.290973932 C19.9298,1.39647393 12.793,5.61127393 8,11.9979739 L8,0.997973932 L-3.55271368e-15,0.997973932 L-3.55271368e-15,20.9979739 C-3.55271368e-15,22.0604739 0.42188,23.0760739 1.1719,23.8260739 C1.92192,24.5760739 2.9375,24.9979739 4,24.9979739 L4.0005,24.9980739 Z\" id=\"Path\"></path>\n        <path d=\"M36.0005,51.6270739 L36.0005,59.7286739 C41.1607,59.0333639 46.0475,57.0059739 50.1805,53.8380739 L44.4617,48.1192739 C41.9187,49.8731739 39.0359,51.0684739 36.0008,51.6270739 L36.0005,51.6270739 Z\" id=\"Path\"></path>\n      </g>\n    </g>\n  </svg>`;\n  }\n\n  if (name === 'circle-dot') {\n    return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"${color}\" d=\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"/></svg>`;\n  }\n\n  if (name === 'circle-question') {\n    return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"${color}\" d=\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM169.8 165.3c7.9-22.3 29.1-37.3 52.8-37.3h58.3c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24V250.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1H222.6c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"/></svg>`;\n  }\n\n  if (name === 'circle-info') {\n    return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"${color}\" d=\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216 192V224h24 48 24v24 88h8 24v48H296 216 192V336h24zm72-144H224V128h64v64z\"/></svg>`;\n  }\n\n  if (name === 'circle-exclamation') {\n    return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"${color}\" d=\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm24-384v24V264v24H232V264 152 128h48zM232 368V320h48v48H232z\"/></svg>`;\n  }\n\n  if (name === 'circle-up') {\n    return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"${color}\" d=\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM384 256H304V384H208V256H128V224L256 96 384 224v32z\"/></svg>`;\n  }\n\n  if (name === 'circle-right') {\n    return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"${color}\" d=\"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM256 384l0-80-128 0 0-96 128 0 0-80 32 0L416 256 288 384l-32 0z\"/></svg>`;\n  }\n\n  return '';\n};\n","class GleapNetworkIntercepter {\n  startTimestamp = Date.now();\n  requestId = 0;\n  requests = {};\n  externalRequests = [];\n  maxRequests = 30;\n  filters = [];\n  defaultBlacklist = ['gleap.io'];\n  blacklist = [];\n  initialized = false;\n  stopped = false;\n  loadAllResources = false;\n\n  // GleapNetworkIntercepter singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapNetworkIntercepter();\n    }\n    return this.instance;\n  }\n\n  setLoadAllResources(loadAllResources) {\n    this.loadAllResources = loadAllResources;\n  }\n\n  isContentTypeSupported(contentType) {\n    if (typeof contentType !== 'string') {\n      return false;\n    }\n\n    if (contentType === '') {\n      return true;\n    }\n\n    contentType = contentType.toLocaleLowerCase();\n\n    const supportedContentTypes = ['text/', 'xml', 'json'];\n    for (var i = 0; i < supportedContentTypes.length; i++) {\n      if (contentType.includes(supportedContentTypes[i])) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  getRequests() {\n    var requests = JSON.parse(JSON.stringify(Object.values(this.requests)));\n\n    // Merge external requests into internal requests.\n    if (this.externalRequests && this.externalRequests.length > 0) {\n      requests = requests.concat(this.externalRequests);\n    }\n\n    if (this.filters && this.filters.length > 0) {\n      // Perform network log filtering.\n      for (var i = 0; i < requests.length; i++) {\n        var request = requests[i];\n\n        // Headers\n        if (request && request.request && request.request.headers) {\n          for (var j = 0; j < this.filters.length; j++) {\n            delete request.request.headers[this.filters[j]];\n          }\n        }\n\n        // Payload\n        if (request && request.request && request.request.payload) {\n          var payloadObj = request.request.payload;\n          try {\n            payloadObj = JSON.parse(request.request.payload);\n          } catch (e) {}\n\n          if (payloadObj) {\n            for (var j = 0; j < this.filters.length; j++) {\n              delete payloadObj[this.filters[j]];\n            }\n            request.request.payload = JSON.stringify(payloadObj);\n          }\n        }\n\n        // Response\n        if (request && request.response && request.response.responseText) {\n          try {\n            var data = JSON.parse(request.response.responseText);\n            for (var j = 0; j < this.filters.length; j++) {\n              delete data[this.filters[j]];\n            }\n            request.response.responseText = JSON.stringify(data);\n          } catch (e) {}\n        }\n      }\n    }\n\n    // Get static resources from performance.\n    try {\n      if (typeof window !== 'undefined' && window.performance) {\n        var resources = window.performance.getEntriesByType('resource');\n        for (var i = 0; i < resources.length; i++) {\n          var resource = resources[i];\n          if (resource && resource.name) {\n            if (\n              (this.loadAllResources || ['xmlhttprequest', 'fetch'].indexOf(resource.initiatorType) > -1) &&\n              !requests.find((request) => request.url === resource.name)\n            ) {\n              requests.push({\n                type: 'RESOURCE',\n                date: new Date(this.startTimestamp + resource.startTime),\n                url: resource.name,\n                duration: Math.round(resource.duration),\n                initiatorType: resource.initiatorType,\n              });\n            }\n          }\n        }\n      }\n    } catch (exp) {}\n\n    var blacklist = this.blacklist.concat(this.defaultBlacklist);\n    if (blacklist && blacklist.length > 0) {\n      try {\n        requests = requests.filter((request) => {\n          for (var i = 0; i < blacklist.length; i++) {\n            if (request && request.url && request.url.includes(blacklist[i])) {\n              return false;\n            }\n          }\n          return true;\n        });\n      } catch (exp) {}\n    }\n\n    return requests;\n  }\n\n  setMaxRequests(maxRequests) {\n    if (maxRequests > 70) {\n      maxRequests = 70;\n    }\n    this.maxRequests = maxRequests;\n  }\n\n  setStopped(stopped) {\n    this.stopped = stopped;\n  }\n\n  setFilters(filters) {\n    this.filters = this.filters.concat(filters ? filters : []);\n  }\n\n  setBlacklist(blacklist) {\n    this.blacklist = this.blacklist.concat(blacklist ? blacklist : []);\n  }\n\n  cleanRequests() {\n    var keys = Object.keys(this.requests);\n    if (keys.length > this.maxRequests) {\n      var keysToRemove = keys.slice(0, keys.length - this.maxRequests);\n      for (var i = 0; i < keysToRemove.length; i++) {\n        delete this.requests[keysToRemove[i]];\n      }\n    }\n  }\n\n  calcRequestTime(bbRequestId) {\n    if (!bbRequestId || !this.requests || !this.requests[bbRequestId]) {\n      return;\n    }\n\n    var startDate = this.requests[bbRequestId]['date'];\n    if (startDate) {\n      this.requests[bbRequestId]['duration'] = new Date().getTime() - startDate.getTime();\n    }\n  }\n\n  getTextContentSize(text) {\n    var size = 0;\n    try {\n      size = new TextEncoder().encode(text).length;\n    } catch (exp) {\n      try {\n        size = encodeURI(s).split(/%..|./).length - 1;\n      } catch (exp) {\n        try {\n          size = new Blob([text]).size;\n        } catch (exp) {\n          size = text.length;\n        }\n      }\n    }\n\n    const kiloBytes = size / 1024;\n    const megaBytes = kiloBytes / 1024;\n    return megaBytes;\n  }\n\n  cleanupContentSize(text) {\n    const contentSize = this.getTextContentSize(text);\n    if (contentSize > 0.15) {\n      return '<content_too_large>';\n    }\n\n    return text;\n  }\n\n  cleanupPayload(payload) {\n    if (payload === undefined || payload === null) {\n      return '{}';\n    }\n\n    try {\n      if (typeof TextDecoder !== undefined && ArrayBuffer.isView(payload)) {\n        let value = new TextDecoder().decode(payload);\n        return value;\n      }\n    } catch (exp) {}\n\n    return payload;\n  }\n\n  preparePayload(payload) {\n    var payloadText = this.cleanupPayload(payload);\n    return this.cleanupContentSize(payloadText);\n  }\n\n  start() {\n    if (this.initialized) {\n      return;\n    }\n\n    this.initialized = true;\n    const self = this;\n    this.interceptNetworkRequests({\n      onFetch: (params, bbRequestId) => {\n        if (this.stopped || !bbRequestId || !this.requests) {\n          return;\n        }\n\n        if (params.length > 0 && typeof params[0] !== 'undefined' && typeof params[0].url !== 'undefined') {\n          this.requests[bbRequestId] = {\n            url: params[0].url,\n            date: new Date(),\n            request: {\n              payload: '',\n              headers: typeof params[0].headers !== 'undefined' ? Object.fromEntries(params[0].headers.entries()) : {},\n            },\n            type: typeof params[0].method !== 'undefined' ? params[0].method : '',\n          };\n        } else {\n          if (params.length >= 2 && params[1]) {\n            var method = params[1] && params[1].method ? params[1].method : 'GET';\n            this.requests[bbRequestId] = {\n              request: {\n                payload: self.preparePayload(params[1].body),\n                headers: params[1].headers,\n              },\n              type: method,\n              url: params[0],\n              date: new Date(),\n            };\n          } else {\n            this.requests[bbRequestId] = {\n              url: params[0],\n              date: new Date(),\n            };\n          }\n        }\n\n        this.cleanRequests();\n      },\n      onFetchLoad: (req, bbRequestId) => {\n        if (this.stopped || !bbRequestId || !this.requests || !this.requests[bbRequestId]) {\n          return;\n        }\n\n        try {\n          this.requests[bbRequestId]['success'] = true;\n          this.requests[bbRequestId]['response'] = {\n            status: req.status,\n            statusText: '',\n            responseText: '<request_still_open>',\n          };\n          this.calcRequestTime(bbRequestId);\n        } catch (exp) {}\n\n        try {\n          var contentType = '';\n          if (req.headers && typeof req.headers.get !== 'undefined') {\n            contentType = req.headers.get('content-type');\n          }\n\n          if (this.isContentTypeSupported(contentType)) {\n            req\n              .text()\n              .then((responseText) => {\n                if (this.requests[bbRequestId]) {\n                  this.requests[bbRequestId]['success'] = true;\n                  this.requests[bbRequestId]['response'] = {\n                    status: req.status,\n                    statusText: req.statusText,\n                    responseText: self.cleanupContentSize(responseText),\n                  };\n                }\n                this.calcRequestTime(bbRequestId);\n                this.cleanRequests();\n              })\n              .catch((err) => {\n                this.cleanRequests();\n              });\n          } else {\n            if (this.requests[bbRequestId]) {\n              this.requests[bbRequestId]['success'] = true;\n              this.requests[bbRequestId]['response'] = {\n                status: req.status,\n                statusText: req.statusText,\n                responseText: '<content_type_not_supported>',\n              };\n            }\n            this.calcRequestTime(bbRequestId);\n            this.cleanRequests();\n          }\n        } catch (exp) {}\n      },\n      onFetchFailed: (err, bbRequestId) => {\n        if (this.stopped || !bbRequestId || !this.requests || !this.requests[bbRequestId]) {\n          return;\n        }\n\n        this.requests[bbRequestId]['success'] = false;\n        this.calcRequestTime(bbRequestId);\n        this.cleanRequests();\n      },\n      onOpen: (request, args) => {\n        if (this.stopped) {\n          return;\n        }\n\n        if (request && request.bbRequestId && args.length >= 2 && this.requests) {\n          this.requests[request.bbRequestId] = {\n            type: args[0],\n            url: args[1],\n            date: new Date(),\n          };\n        }\n\n        this.cleanRequests();\n      },\n      onSend: (request, args) => {\n        if (this.stopped) {\n          return;\n        }\n\n        if (request && request.bbRequestId && this.requests && this.requests[request.bbRequestId]) {\n          this.requests[request.bbRequestId]['request'] = {\n            payload: this.preparePayload(args.length > 0 ? args[0] : '{}'),\n            headers: request.requestHeaders,\n          };\n        }\n\n        this.cleanRequests();\n      },\n      onError: (request, args) => {\n        if (\n          !this.stopped &&\n          this.requests &&\n          request &&\n          request.currentTarget &&\n          request.currentTarget.bbRequestId &&\n          this.requests[request.currentTarget.bbRequestId]\n        ) {\n          this.requests[request.currentTarget.bbRequestId]['success'] = false;\n          this.calcRequestTime(request.bbRequestId);\n        }\n\n        this.cleanRequests();\n      },\n      onLoad: (request, args) => {\n        if (this.stopped) {\n          return;\n        }\n\n        if (\n          request &&\n          request.currentTarget &&\n          request.currentTarget.bbRequestId &&\n          this.requests &&\n          this.requests[request.currentTarget.bbRequestId]\n        ) {\n          var target = request.currentTarget;\n          var responseType = target.responseType;\n          var responseText = '<' + responseType + '>';\n          if (responseType === '' || responseType === 'text') {\n            responseText = this.cleanupContentSize(target.responseText);\n          }\n\n          this.requests[target.bbRequestId]['success'] = true;\n          this.requests[target.bbRequestId]['response'] = {\n            status: target.status,\n            statusText: target.statusText,\n            responseText: responseText,\n          };\n\n          this.calcRequestTime(target.bbRequestId);\n        }\n\n        this.cleanRequests();\n      },\n    });\n  }\n\n  interceptNetworkRequests(callback) {\n    var self = this;\n    const open = XMLHttpRequest.prototype.open;\n    const send = XMLHttpRequest.prototype.send;\n\n    // Only override open and send if they haven't been overridden already.\n    if (XMLHttpRequest.prototype.gleapSetRequestHeader === undefined) {\n      XMLHttpRequest.prototype.gleapSetRequestHeader = XMLHttpRequest.prototype.setRequestHeader;\n    }\n\n    if (XMLHttpRequest.prototype.gleapSetRequestHeader) {\n      XMLHttpRequest.prototype.setRequestHeader = function (header, value) {\n        // Track headers for logging only. Never let logging alter the request:\n        // always forward to the native setRequestHeader, including repeated\n        // headers (which the spec combines into a single comma-joined value).\n        try {\n          if (!this.requestHeaders) {\n            this.requestHeaders = {};\n          }\n          if (!this.requestHeaders[header]) {\n            this.requestHeaders[header] = [];\n          }\n          this.requestHeaders[header].push(value);\n        } catch (exp) {}\n\n        return this.gleapSetRequestHeader(header, value);\n      };\n    }\n\n    XMLHttpRequest.prototype.open = function () {\n      // Logging must never break the intercepted request, so guard every\n      // callback and always fall through to the native open.\n      try {\n        this['bbRequestId'] = ++self.requestId;\n        callback.onOpen && callback.onOpen(this, arguments);\n        if (callback.onLoad) {\n          this.addEventListener('load', callback.onLoad.bind(callback));\n        }\n        if (callback.onError) {\n          this.addEventListener('error', callback.onError.bind(callback));\n        }\n      } catch (exp) {}\n      return open.apply(this, arguments);\n    };\n    XMLHttpRequest.prototype.send = function () {\n      try {\n        callback.onSend && callback.onSend(this, arguments);\n      } catch (exp) {}\n      return send.apply(this, arguments);\n    };\n\n    if (window.fetch) {\n      (function () {\n        var originalFetch = window.fetch;\n        window.fetch = function () {\n          var bbRequestId = ++self.requestId;\n          try {\n            callback.onFetch(arguments, bbRequestId);\n          } catch (exp) {}\n\n          return originalFetch\n            .apply(this, arguments)\n            .then(function (response) {\n              try {\n                if (response && typeof response.clone === 'function') {\n                  const data = response.clone();\n                  callback.onFetchLoad(data, bbRequestId);\n                }\n              } catch (exp) {}\n\n              return response;\n            })\n            .catch((err) => {\n              try {\n                callback.onFetchFailed(err, bbRequestId);\n              } catch (exp) {}\n              throw err;\n            });\n        };\n      })();\n    }\n\n    return callback;\n  }\n\n  blobToTextPromise(blob) {\n    return new Promise(function (resolve, reject) {\n      var fr = new FileReader();\n      fr.onload = function (evt) {\n        if (evt && evt.target && evt.target.result) {\n          resolve(evt.target.result);\n        } else {\n          reject();\n        }\n      };\n      fr.onerror = function (err) {\n        reject(err);\n      };\n      fr.readAsText(blob);\n    });\n  }\n}\n\nexport default GleapNetworkIntercepter;\n","/**\n * Bootstraps an iframe by injecting a Gleap-hosted HTML document via about:blank + doc.write,\n * so the iframe inherits the parent page's origin instead of being a cross-site iframe to a\n * classified tracker domain.\n *\n * Why: Safari ITP applies restrictions (storage block, classification-based heuristics) to\n * iframes whose src is a classified tracker domain. By creating the iframe as about:blank and\n * writing the document content from the parent, the iframe becomes same-origin to the parent,\n * which Safari treats as first-party. The scripts inside the iframe still load from the\n * original Gleap origin, but as cross-origin script loads (not iframe navigations), which\n * ITP does not throttle.\n *\n * Requirements: the Gleap origin must serve the index.html with CORS (Access-Control-Allow-Origin).\n * `messenger-app.gleap.io` already does. For `outboundmedia.gleap.io` the helper will fall back\n * to direct iframe.src loading until CORS is enabled there.\n *\n * @param {HTMLIFrameElement} iframe - the iframe element (must already be appended to the DOM)\n * @param {string} url - the Gleap origin URL (e.g. https://messenger-app.gleap.io). May include a path.\n * @returns {void}\n */\nexport const bootstrapGleapFrame = (iframe, url) => {\n  if (!iframe || !url) {\n    return;\n  }\n\n  const fallbackToSrc = () => {\n    try {\n      iframe.src = url;\n    } catch (e) {}\n  };\n\n  try {\n    if (!iframe.contentDocument) return fallbackToSrc();\n  } catch (e) {\n    return fallbackToSrc();\n  }\n\n  // The asset base is the URL's origin + any path (e.g. https://outboundmedia.gleap.io/modal/).\n  // We need a trailing slash so root-relative URLs resolve correctly via <base>.\n  let baseHref;\n  try {\n    const parsed = new URL(url);\n    // For a URL like https://outboundmedia.gleap.io/modal, assets are served from the origin root,\n    // not from /modal/. So we use the origin as base. The path is just the entry HTML.\n    baseHref = parsed.origin + '/';\n  } catch (e) {\n    return fallbackToSrc();\n  }\n\n  fetch(url, { mode: 'cors', credentials: 'omit' })\n    .then((response) => {\n      if (!response.ok) {\n        throw new Error('Bootstrap fetch failed: ' + response.status);\n      }\n      return response.text();\n    })\n    .then((html) => {\n      // Rewrite root-relative URLs (href=\"/x\", src=\"/x\") to absolute URLs on the Gleap origin,\n      // so that the about:blank document (which has no base URL) can still resolve them.\n      const absolutized = html.replace(\n        /(\\s(?:href|src)\\s*=\\s*[\"'])\\/([^\"'/][^\"']*)/g,\n        '$1' + baseHref + '$2'\n      );\n\n      // The Gleap apps (banner, modal, agent-conversation, chatbar) are SPAs that route based\n      // on window.location.pathname. Since the iframe inherits the parent's origin via about:blank,\n      // pathname would be the parent page's pathname — not the intended app route.\n      // We use history.replaceState() to set the iframe's URL to the intended path BEFORE the\n      // app's router initializes. replaceState is allowed because the iframe is same-origin to the parent.\n      let targetPath = '/';\n      try {\n        const parsedTarget = new URL(url);\n        targetPath = parsedTarget.pathname + parsedTarget.search + parsedTarget.hash;\n      } catch (e) {}\n      const routeScript =\n        '<script>try{history.replaceState(null,\"\",' +\n        JSON.stringify(targetPath) +\n        ');}catch(e){}</script>';\n\n      // Inject the route-setter script BEFORE the first existing <script> tag so it runs\n      // before any app bundle. If no <script> is found, inject just before </head> as a fallback.\n      let withRouteScript;\n      if (/<script\\b/i.test(absolutized)) {\n        withRouteScript = absolutized.replace(/<script\\b/i, routeScript + '<script');\n      } else if (/<\\/head>/i.test(absolutized)) {\n        withRouteScript = absolutized.replace(/<\\/head>/i, routeScript + '</head>');\n      } else {\n        withRouteScript = absolutized;\n      }\n\n      // Re-grab contentDocument here — Firefox may have replaced the initial about:blank\n      // document during the fetch. Writing into the original reference would be a silent no-op.\n      let doc;\n      try {\n        doc = iframe.contentDocument;\n      } catch (e) {\n        return fallbackToSrc();\n      }\n      if (!doc) {\n        return fallbackToSrc();\n      }\n\n      try {\n        doc.open();\n        doc.write(withRouteScript);\n        doc.close();\n      } catch (e) {\n        fallbackToSrc();\n      }\n    })\n    .catch(() => {\n      // CORS error, network error, or non-OK status: fall back to direct iframe.src loading.\n      // This preserves the original behavior — the patch is a no-op when bootstrap can't work.\n      fallbackToSrc();\n    });\n};\n\nexport const resizeImage = (base64Str, maxWidth = 400, maxHeight = 400) => {\n  return new Promise((resolve, reject) => {\n    var isJPEG = base64Str.indexOf('data:image/jpeg') === 0;\n    var img = new Image();\n    img.src = base64Str;\n    img.onerror = () => {\n      reject();\n    };\n    img.onload = () => {\n      var canvas = document.createElement('canvas');\n      var MAX_WIDTH = maxWidth;\n      var MAX_HEIGHT = maxHeight;\n\n      // Adjust max width / height based on image props\n      if (maxWidth > img.width / 1.5) {\n        MAX_WIDTH = img.width / 1.5;\n      }\n\n      if (maxHeight > img.height / 1.5) {\n        MAX_HEIGHT = img.height / 1.5;\n      }\n\n      var width = img.width;\n      var height = img.height;\n\n      if (width > height) {\n        if (width > MAX_WIDTH) {\n          height *= MAX_WIDTH / width;\n          width = MAX_WIDTH;\n        }\n      } else {\n        if (height > MAX_HEIGHT) {\n          width *= MAX_HEIGHT / height;\n          height = MAX_HEIGHT;\n        }\n      }\n      canvas.width = width;\n      canvas.height = height;\n      var ctx = canvas.getContext('2d');\n      ctx.drawImage(img, 0, 0, width, height);\n\n      if (isJPEG) {\n        resolve(canvas.toDataURL('image/jpeg', 0.7));\n      } else {\n        resolve(canvas.toDataURL());\n      }\n    };\n  });\n};\n\nconst MOBILE_UA_REGEX = /(android|iphone|ipod|ipad|blackberry|iemobile|opera mini|webos)/i;\n\nexport const getDeviceType = () => {\n  return isMobile() ? 'mobile' : 'desktop';\n};\n\nexport const isMobile = () => {\n  if (typeof window === 'undefined') {\n    return false;\n  }\n\n  try {\n    const nav = typeof navigator !== 'undefined' ? navigator : undefined;\n\n    if (nav?.userAgentData && typeof nav.userAgentData.mobile === 'boolean' && nav.userAgentData.mobile !== null) {\n      return nav.userAgentData.mobile;\n    }\n\n    if (nav && MOBILE_UA_REGEX.test(nav.userAgent || nav.vendor || '')) {\n      return true;\n    }\n\n    if (nav?.maxTouchPoints > 1 && window.matchMedia) {\n      const coarsePointer = window.matchMedia('(hover: none) and (pointer: coarse)');\n      if (coarsePointer?.matches) {\n        return true;\n      }\n    }\n  } catch (exp) {\n    // Swallow errors and treat as desktop fallback.\n  }\n\n  return false;\n};\n\nexport const gleapDataParser = function (data) {\n  if (!data) {\n    return {};\n  }\n  if (typeof data === 'string' || data instanceof String) {\n    try {\n      return JSON.parse(data);\n    } catch (e) {\n      return {};\n    }\n  }\n  return data;\n};\n\nexport const truncateString = (str, num) => {\n  if (str.length > num) {\n    return str.slice(0, num) + '...';\n  } else {\n    return str;\n  }\n};\n\nconst removeSubDomain = (v) => {\n  try {\n    var parts = v.split('.');\n    var is2ndLevelDomain = false;\n    const secondLevel = parts[parts.length - 2];\n    if (\n      secondLevel === 'co' ||\n      secondLevel === 'com' ||\n      secondLevel === 'gv' ||\n      secondLevel === 'ac' ||\n      secondLevel === 'edu' ||\n      secondLevel === 'gov' ||\n      secondLevel === 'mil' ||\n      secondLevel === 'net' ||\n      secondLevel === 'org'\n    ) {\n      is2ndLevelDomain = true;\n    }\n    parts = parts.slice(is2ndLevelDomain ? -3 : -2);\n    return parts.join('.');\n  } catch (exp) {}\n  return v;\n};\n\nexport const loadFromGleapCache = (key) => {\n  try {\n    const cachedData = localStorage.getItem(`gleap-widget-${key}`);\n    if (cachedData) {\n      const config = JSON.parse(cachedData);\n      return config;\n    }\n  } catch (exp) {}\n  return null;\n};\n\nexport const saveToGleapCache = (key, data) => {\n  const k = `gleap-widget-${key}`;\n  if (data) {\n    try {\n      localStorage.setItem(k, JSON.stringify(data));\n    } catch (exp) {}\n  } else {\n    localStorage.removeItem(k);\n  }\n};\n\nexport const clearGleapCache = (key) => {\n  try {\n    const k = `gleap-widget-${key}`;\n    localStorage.removeItem(k);\n  } catch {}\n};\n\nexport const setGleapCookie = (name, value, days) => {\n  try {\n    var expires = '';\n    if (days) {\n      var date = new Date();\n      date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n      expires = '; expires=' + date.toUTCString();\n    }\n    const host = removeSubDomain(window.location.host.split(':')[0]);\n    document.cookie = name + '=' + (value || '') + expires + '; path=/; domain=' + host;\n  } catch (exp) {}\n};\n\nexport const getGleapCookie = (name) => {\n  try {\n    var nameEQ = name + '=';\n    var ca = document.cookie.split(';');\n    for (var i = 0; i < ca.length; i++) {\n      var c = ca[i];\n      while (c.charAt(0) == ' ') c = c.substring(1, c.length);\n      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);\n    }\n  } catch (exp) {}\n  return null;\n};\n\nexport const eraseGleapCookie = (name) => {\n  try {\n    const host = removeSubDomain(window.location.host.split(':')[0]);\n    document.cookie = name + '=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT; Domain=' + host;\n  } catch (exp) {}\n};\n\nexport const getDOMElementDescription = (element, html = true) => {\n  var innerText = truncateString(element.innerText || '', 40)\n    .replace(/(\\r\\n|\\n|\\r)/gm, '')\n    .replace(/ +(?= )/g, '');\n  var elementId = '';\n  var elementClass = '';\n  if (typeof element.getAttribute !== 'undefined') {\n    const elemId = element.getAttribute('id');\n    if (elemId) {\n      elementId = ` id=\"${elemId}\"`;\n    }\n    const elemClass = element.getAttribute('class');\n    if (elemClass) {\n      elementClass = ` class=\"${elemClass}\"`;\n    }\n  }\n  const elementTag = (element.tagName || '').toLowerCase();\n\n  var htmlPre = '<';\n  var htmlPost = '>';\n  if (!html) {\n    htmlPre = '[';\n    htmlPost = ']';\n  }\n\n  return `${htmlPre}${elementTag}${elementId}${elementClass}${htmlPost}${innerText}${htmlPre}/${elementTag}${htmlPost}`;\n};\n\nexport const runFunctionWhenDomIsReady = (callback) => {\n  if (document.readyState === 'complete' || document.readyState === 'loaded' || document.readyState === 'interactive') {\n    callback();\n  } else {\n    document.addEventListener('DOMContentLoaded', () => {\n      callback();\n    });\n  }\n};\n\n// Bind the iOS keyboard viewport fix at most once per page session. Even though\n// fixGleapHeight() is only called from Gleap.initialize() today, a SPA re-init\n// must never stack a second set of visualViewport listeners — duplicates would\n// fight each other on every event, which can leave the widget stuck shrunk.\nlet gleapHeightFixInstalled = false;\n\nexport const fixGleapHeight = () => {\n  try {\n    // Strict no-op off iOS / when the VisualViewport API is unavailable.\n    if (\n      !('visualViewport' in window) ||\n      !window.visualViewport ||\n      !/iPad|iPhone|iPod/.test(navigator.userAgent)\n    ) {\n      return;\n    }\n\n    // Idempotent: install the listeners only once.\n    if (gleapHeightFixInstalled) {\n      return;\n    }\n    gleapHeightFixInstalled = true;\n\n    // Minimum keyboard height that counts as \"the keyboard is open\". We detect\n    // the keyboard as the gap between the LAYOUT viewport (window.innerHeight)\n    // and the VISUAL viewport (visualViewport.height): on iOS the soft keyboard\n    // shrinks ONLY the visual viewport, so innerHeight - visualViewport.height is\n    // the keyboard height. Crucially, the iOS dynamic toolbar (address bar /\n    // bottom bar) shrinks BOTH viewports together, so it leaves this gap at ~0 —\n    // it can never be misread as a keyboard (measured on iPhone the toolbar moves\n    // the viewport by ~160px, which a naive \"shrunk vs full height\" check would\n    // wrongly treat as a keyboard and leave the widget stuck). Real iOS keyboards\n    // are ~260px+; 150px sits in the safe valley above toolbar/rounding noise and\n    // below the smallest real keyboard. Erring below the threshold always means\n    // \"treat as closed\" (full size) — the safe direction that can never stick.\n    const KEYBOARD_OPEN_THRESHOLD = 150;\n\n    // iOS usually fires a single visualViewport 'resize' at the END of the\n    // keyboard transition, and that value can still be mid-animation. Some\n    // dismiss gestures fire no final event at all. So after every event we also\n    // re-measure once, slightly later, to read the settled dimensions. This is\n    // the self-correcting safety net that removes the styles even if no further\n    // event arrives.\n    const SETTLE_DELAY = 350;\n\n    const round = (value) => Math.round(value);\n\n    let settleTimer = null;\n    let pendingUpdate = false;\n\n    // Set true when the composer loses focus (e.g. when a message is sent, which\n    // blurs the input) and no other input takes focus. While set, the keyboard is\n    // treated as closed regardless of the visual viewport — iOS 26 sometimes does\n    // NOT reset visualViewport.height/offsetTop after a dismiss (FB19889436), so\n    // the resize-driven reset never fires and the widget would stay shrunk. This\n    // is cleared the instant an input is focused again, so the keyboard can\n    // re-open normally.\n    let keyboardForcedClosed = false;\n\n    // The iframe document we've attached focus listeners to (same-origin case).\n    let keyboardFocusDoc = null;\n\n    function measure() {\n      try {\n        const gleapFrameContainer = document.querySelector(\n          '.gleap-frame-container-inner iframe'\n        );\n\n        if (!gleapFrameContainer) {\n          return;\n        }\n\n        // Attach focus listeners to the (same-origin) iframe document so we get\n        // a reliable \"keyboard is closing\" signal independent of the viewport.\n        ensureKeyboardFocusListeners(gleapFrameContainer);\n\n        const visualViewport = window.visualViewport;\n\n        // Keyboard height = layout viewport - visual viewport. Read live every\n        // time (never a stale once-captured baseline). Rounded so a fractional\n        // visualViewport.height can't sit a sub-pixel below innerHeight and read\n        // as open. Toolbar moves both viewports together -> gap ~0 -> closed.\n        const keyboardHeight = round(window.innerHeight) - round(visualViewport.height);\n        // keyboardForcedClosed wins so a stuck iOS 26 viewport can't keep the\n        // widget shrunk after a send/dismiss (it's cleared on the next focus).\n        const keyboardIsOpen =\n          !keyboardForcedClosed && keyboardHeight >= KEYBOARD_OPEN_THRESHOLD;\n\n        if (keyboardIsOpen) {\n          gleapFrameContainer.style.setProperty(\n            'max-height',\n            visualViewport.height + 'px',\n            'important'\n          );\n          // When the keyboard opens, iOS pans the visual viewport up to reveal\n          // the focused field. The widget is position:fixed (anchored to the\n          // layout viewport), so without compensation it appears to \"scroll up\"\n          // behind the status bar. Translate it down by the viewport offset to\n          // keep it pinned to the visible area above the keyboard.\n          gleapFrameContainer.style.setProperty(\n            'transform',\n            'translateY(' + visualViewport.offsetTop + 'px)',\n            'important'\n          );\n        } else {\n          // Reset in EVERY non-open path. removeProperty is idempotent and safe\n          // even when nothing was set.\n          gleapFrameContainer.style.removeProperty('max-height');\n          gleapFrameContainer.style.removeProperty('transform');\n        }\n      } catch (error) {}\n    }\n\n    // When the composer loses focus (e.g. after sending a message, which blurs\n    // the input) the keyboard is closing. iOS 26 sometimes leaves the visual\n    // viewport shrunk/panned, so the resize-driven reset never fires and the\n    // widget stays in the small \"keyboard\" size. Force the reset here and latch\n    // keyboardForcedClosed so a stale viewport can't re-shrink until the next\n    // focus. The short delay lets focus settle (so a blur that immediately\n    // refocuses another field doesn't reset).\n    function handleComposerBlur() {\n      try {\n        window.setTimeout(() => {\n          try {\n            const active = keyboardFocusDoc && keyboardFocusDoc.activeElement;\n            if (\n              active &&\n              (active.tagName === 'INPUT' ||\n                active.tagName === 'TEXTAREA' ||\n                active.isContentEditable)\n            ) {\n              return; // focus moved to another field — keyboard stays open\n            }\n\n            keyboardForcedClosed = true;\n\n            const frame = document.querySelector(\n              '.gleap-frame-container-inner iframe'\n            );\n            if (frame) {\n              frame.style.removeProperty('max-height');\n              frame.style.removeProperty('transform');\n            }\n            scheduleUpdate();\n          } catch (innerError) {}\n        }, 100);\n      } catch (error) {}\n    }\n\n    function handleComposerFocus() {\n      // A real focus means the keyboard is (re)opening; release the latch so\n      // measure() is free to shrink again.\n      keyboardForcedClosed = false;\n      scheduleUpdate();\n    }\n\n    // Attach focus listeners to the iframe's own document. The widget iframe is\n    // bootstrapped same-origin (about:blank + doc.write), so this works in the\n    // common case; the legacy cross-origin src fallback throws on contentDocument\n    // access (caught) and there we just rely on the viewport detection.\n    function ensureKeyboardFocusListeners(frame) {\n      try {\n        const frameDoc = frame.contentDocument;\n        if (!frameDoc || frameDoc === keyboardFocusDoc) {\n          return;\n        }\n        keyboardFocusDoc = frameDoc;\n        frameDoc.addEventListener('focusout', handleComposerBlur, true);\n        frameDoc.addEventListener('focusin', handleComposerFocus, true);\n      } catch (error) {}\n    }\n\n    // Coalesce simultaneous resize + scroll into a single update per frame\n    // (canonical VisualViewport pattern), then arm a delayed settle re-check to\n    // read the final post-animation dimensions.\n    function scheduleUpdate() {\n      try {\n        if (!pendingUpdate) {\n          pendingUpdate = true;\n          window.requestAnimationFrame(() => {\n            pendingUpdate = false;\n            measure();\n          });\n        }\n\n        if (settleTimer) {\n          clearTimeout(settleTimer);\n        }\n        settleTimer = setTimeout(measure, SETTLE_DELAY);\n      } catch (error) {}\n    }\n\n    function handleOrientationChange() {\n      try {\n        // innerHeight/visualViewport settle a bit after a rotation; the settle\n        // timer re-checks with the gap method, which needs no per-orientation\n        // baseline.\n        scheduleUpdate();\n      } catch (error) {}\n    }\n\n    const visualViewport = window.visualViewport;\n\n    // Keyboard show/hide and viewport resizes.\n    visualViewport.addEventListener('resize', scheduleUpdate);\n\n    // Visual-viewport pan (offsetTop changes) while the keyboard animates in/out\n    // so the widget stays aligned with the visible area.\n    visualViewport.addEventListener('scroll', scheduleUpdate);\n\n    // Re-check after orientation changes.\n    window.addEventListener('orientationchange', handleOrientationChange);\n\n    // Initial measure (no keyboard expected -> no-op).\n    measure();\n  } catch (error) {}\n};\n","import { GleapSession, GleapTranslationManager } from './Gleap'; // Adjust path if needed\n\n// Enum for request states\nconst RequestStatus = {\n  PENDING: 'pending',\n  SUCCESS: 'success',\n  ERROR: 'error',\n};\n\nclass ChecklistNetworkManager {\n  static instance = null;\n\n  /** @private {Map<string, Promise<string>>} outboundId -> Promise<internalId> */\n  validationRequests = new Map();\n  /** @private {Map<string, { status: RequestStatus, internalId?: string, error?: any }>} */\n  validationCache = new Map(); // Caches final results (success/error)\n\n  /** @private {Map<string, Promise<any>>} internalId -> Promise<checklistData> */\n  fetchRequests = new Map();\n  /** @private {Map<string, { status: RequestStatus, data?: any, error?: any }>} */\n  fetchCache = new Map(); // Caches final results (success/error)\n\n  // Private constructor for Singleton\n  constructor() {\n    if (ChecklistNetworkManager.instance) {\n      return ChecklistNetworkManager.instance;\n    }\n    ChecklistNetworkManager.instance = this;\n  }\n\n  /**\n   * Gets the singleton instance of the ChecklistNetworkManager.\n   * @returns {ChecklistNetworkManager} The singleton instance.\n   */\n  static getInstance() {\n    if (!ChecklistNetworkManager.instance) {\n      ChecklistNetworkManager.instance = new ChecklistNetworkManager();\n    }\n    return ChecklistNetworkManager.instance;\n  }\n\n  clearCache() {\n    this.validationCache.clear();\n    this.fetchCache.clear();\n    this.validationRequests.clear();\n    this.fetchRequests.clear();\n  }\n\n  /**\n   * @private\n   * Gets common query parameters for API requests.\n   * @returns {string} Query parameter string.\n   */\n  _getQueryParams() {\n    const gleapSessionInstance = GleapSession.getInstance();\n    const session = gleapSessionInstance?.session;\n    const lang = GleapTranslationManager.getInstance().getActiveLanguage() || 'en';\n    return `gleapId=${session?.gleapId || ''}&gleapHash=${session?.gleapHash || ''}&lang=${lang}`;\n  }\n\n  /**\n   * @private\n   * Gets the API base URL.\n   * @returns {string | null} The API URL or null if not configured.\n   */\n  _getApiUrl() {\n    const gleapSessionInstance = GleapSession.getInstance();\n    return gleapSessionInstance?.apiUrl || null;\n  }\n\n  /**\n   * @private\n   * Makes an XMLHttpRequest and returns a Promise.\n   * @param {string} method - HTTP method.\n   * @param {string} url - The request URL.\n   * @param {object|null} data - Data to send in the request body.\n   * @returns {Promise<any>} Promise resolving with parsed JSON response on success, rejecting on error.\n   */\n  _makeRequest(method, url, data) {\n    return new Promise((resolve, reject) => {\n      const xhr = new XMLHttpRequest();\n      xhr.open(method, url);\n\n      const gleapSessionInstance = GleapSession.getInstance();\n      gleapSessionInstance?.injectSession(xhr); // Inject session headers\n\n      if (data) {\n        xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');\n      }\n\n      xhr.onreadystatechange = () => {\n        if (xhr.readyState === 4) {\n          if (xhr.status >= 200 && xhr.status < 300) {\n            try {\n              // Handle potential empty success responses (e.g., 204)\n              const responseData = xhr.responseText ? JSON.parse(xhr.responseText) : null;\n              resolve(responseData);\n            } catch (err) {\n              reject({\n                status: xhr.status,\n                statusText: 'JSON Parse Error',\n                responseText: xhr.responseText,\n                error: err,\n              });\n            }\n          } else {\n            reject({\n              status: xhr.status,\n              statusText: xhr.statusText,\n              responseText: xhr.responseText,\n            });\n          }\n        }\n      };\n\n      xhr.onerror = () => {\n        reject({ status: 0, statusText: 'Network Error', responseText: null });\n      };\n\n      xhr.send(data ? JSON.stringify(data) : null);\n    });\n  }\n\n  /**\n   * @private\n   * Creates a cache key from outboundId and sharedKey\n   * @param {string} outboundId - The public/outbound checklist ID.\n   * @param {string|undefined} sharedKey - Optional shared key.\n   * @returns {string} Combined cache key.\n   */\n  _createCacheKey(outboundId, sharedKey) {\n    return sharedKey ? `${outboundId}::${sharedKey}` : outboundId;\n  }\n\n  /**\n   * Validates an outbound checklist ID, returning a Promise for the internal ID.\n   * Manages caching and deduplicates requests.\n   * @param {string} outboundId - The public/outbound checklist ID.\n   * @param {string} [sharedKey] - Optional shared key for the checklist.\n   * @returns {Promise<string>} A promise that resolves with the internal checklist ID.\n   */\n  validateChecklist(outboundId, sharedKey) {\n    const cacheKey = this._createCacheKey(outboundId, sharedKey);\n\n    // 1. Check cache for final result (success or error)\n    const cachedResult = this.validationCache.get(cacheKey);\n    if (cachedResult) {\n      if (cachedResult.status === RequestStatus.SUCCESS) {\n        return Promise.resolve(cachedResult.internalId);\n      } else {\n        return Promise.reject(cachedResult.error);\n      }\n    }\n\n    // 2. Check for an ongoing request\n    if (this.validationRequests.has(cacheKey)) {\n      return this.validationRequests.get(cacheKey);\n    }\n\n    // 3. Start a new request\n    const apiUrl = this._getApiUrl();\n    if (!apiUrl) {\n      const error = new Error('ChecklistNetworkManager: Gleap API URL not configured.');\n      this.validationCache.set(cacheKey, {\n        status: RequestStatus.ERROR,\n        error,\n      });\n      return Promise.reject(error);\n    }\n\n    const url = `${apiUrl}/outbound/checklists?${this._getQueryParams()}`;\n    const requestPromise = this._makeRequest('POST', url, {\n      outboundId,\n      sharedKey,\n    })\n      .then((responseData) => {\n        if (responseData && responseData.id) {\n          this.validationCache.set(cacheKey, {\n            status: RequestStatus.SUCCESS,\n            internalId: responseData.id,\n          });\n          return responseData.id;\n        } else {\n          const error = new Error('Validation response missing checklist ID.');\n          this.validationCache.set(cacheKey, {\n            status: RequestStatus.ERROR,\n            error: responseData || error,\n          });\n          throw error; // Rethrow to be caught by catch block\n        }\n      })\n      .catch((error) => {\n        // Store the error object itself in the cache\n        this.validationCache.set(cacheKey, {\n          status: RequestStatus.ERROR,\n          error,\n        });\n        throw error; // Re-throw so callers can catch it\n      })\n      .finally(() => {\n        // Remove from pending requests map once done (success or fail)\n        this.validationRequests.delete(cacheKey);\n      });\n\n    // Store the promise for potential concurrent requests\n    this.validationRequests.set(cacheKey, requestPromise);\n    return requestPromise;\n  }\n\n  /**\n   * Fetches the full checklist data using the internal ID, returning a Promise.\n   * Manages caching and deduplicates requests.\n   * @param {string} internalId - The internal checklist ID.\n   * @returns {Promise<object>} A promise that resolves with the full checklist data.\n   */\n  fetchChecklist(internalId) {\n    // 1. Check cache for final result (success or error)\n    const cachedResult = this.fetchCache.get(internalId);\n    if (cachedResult) {\n      if (cachedResult.status === RequestStatus.SUCCESS) {\n        // Return a deep copy to prevent mutation issues if multiple components use it\n        return Promise.resolve(JSON.parse(JSON.stringify(cachedResult.data)));\n      } else {\n        return Promise.reject(cachedResult.error);\n      }\n    }\n\n    // 2. Check for an ongoing request\n    if (this.fetchRequests.has(internalId)) {\n      // Return a promise that resolves with a deep copy\n      return this.fetchRequests.get(internalId).then((data) => JSON.parse(JSON.stringify(data)));\n    }\n\n    // 3. Start a new request\n    const apiUrl = this._getApiUrl();\n    if (!apiUrl) {\n      const error = new Error('ChecklistNetworkManager: Gleap API URL not configured.');\n      this.fetchCache.set(internalId, { status: RequestStatus.ERROR, error });\n      return Promise.reject(error);\n    }\n\n    const url = `${apiUrl}/outbound/checklists/${internalId}?convertTipTap=true&${this._getQueryParams()}`;\n    const requestPromise = this._makeRequest('GET', url, null)\n      .then((responseData) => {\n        if (responseData) {\n          // Cache the successful data\n          this.fetchCache.set(internalId, {\n            status: RequestStatus.SUCCESS,\n            data: responseData,\n          });\n          // Return a deep copy of the data\n          return JSON.parse(JSON.stringify(responseData));\n        } else {\n          // Should not happen with successful GET usually, but handle defensively\n          const error = new Error('Empty response received for checklist fetch.');\n          this.fetchCache.set(internalId, {\n            status: RequestStatus.ERROR,\n            error: responseData || error,\n          });\n          throw error;\n        }\n      })\n      .catch((error) => {\n        this.fetchCache.set(internalId, { status: RequestStatus.ERROR, error });\n        throw error; // Re-throw so callers can catch it\n      })\n      .finally(() => {\n        // Remove from pending requests map once done (success or fail)\n        this.fetchRequests.delete(internalId);\n      });\n\n    this.fetchRequests.set(internalId, requestPromise);\n    // Return a promise that resolves with a deep copy\n    return requestPromise.then((data) => JSON.parse(JSON.stringify(data)));\n  }\n}\n\nexport default ChecklistNetworkManager;\n","/**\n * Shared SSE (Server-Sent Events) stream parser.\n *\n * Reads a fetch Response body as an SSE stream and dispatches\n * parsed events to callbacks. Used by both the JavaScript SDK\n * and the Gleap Frontend dashboard.\n *\n * @example\n * import { parseSSEStream, dispatchSSEEvent } from 'gleap/sse'; // or from './GleapSSEParser'\n *\n * const response = await fetch(url, { method: 'POST', ... });\n * await parseSSEStream(response, {\n *   onMeta: (data) => { ... },\n *   onToken: (data) => { ... },\n *   onDone: (data) => { ... },\n *   onError: (data) => { ... },\n * });\n */\n\n/**\n * Dispatch a single parsed SSE event to the appropriate callback.\n *\n * @param {string} event - Event type: 'meta', 'token', 'tool_start', 'tool_end', 'done', 'error'\n * @param {object} data - Parsed JSON data\n * @param {object} callbacks - { onMeta, onToken, onToolStart?, onToolEnd?, onDone, onError }\n */\nexport const dispatchSSEEvent = (event, data, callbacks) => {\n  switch (event) {\n    case 'meta': callbacks.onMeta?.(data); break;\n    case 'token': callbacks.onToken?.(data); break;\n    case 'tool_start': callbacks.onToolStart?.(data); break;\n    case 'tool_end': callbacks.onToolEnd?.(data); break;\n    case 'done': callbacks.onDone?.(data); break;\n    case 'error': callbacks.onError?.(data); break;\n    case 'handoff': callbacks.onHandoff?.(data); break;\n  }\n};\n\n/**\n * Parse an SSE stream from a fetch Response and dispatch events to callbacks.\n *\n * @param {Response} response - A fetch Response with a readable body (text/event-stream).\n * @param {object} callbacks - { onMeta, onToken, onToolStart?, onToolEnd?, onDone, onError }\n * @returns {Promise<void>}\n */\nexport const parseSSEStream = async (response, callbacks) => {\n  if (!response.body) {\n    callbacks.onError?.({ message: 'No response body.' });\n    return;\n  }\n\n  const reader = response.body.getReader();\n  const decoder = new TextDecoder();\n  let buffer = '';\n  let currentEvent = '';\n  let currentData = '';\n\n  try {\n    while (true) {\n      const { done, value } = await reader.read();\n      if (done) break;\n\n      buffer += decoder.decode(value, { stream: true });\n      const lines = buffer.split('\\n');\n      buffer = lines.pop() ?? '';\n\n      for (const line of lines) {\n        const trimmed = line.replace(/\\r$/, '');\n\n        if (trimmed.startsWith('event: ')) {\n          currentEvent = trimmed.slice(7).trim();\n        } else if (trimmed.startsWith('data: ')) {\n          currentData += (currentData ? '\\n' : '') + trimmed.slice(6);\n        } else if (trimmed === '') {\n          if (currentEvent && currentData) {\n            try {\n              const parsed = JSON.parse(currentData);\n              dispatchSSEEvent(currentEvent, parsed, callbacks);\n            } catch { /* skip malformed event */ }\n          }\n          currentEvent = '';\n          currentData = '';\n        }\n      }\n    }\n\n    // Flush any remaining buffered event\n    if (currentEvent && currentData) {\n      try {\n        const parsed = JSON.parse(currentData);\n        dispatchSSEEvent(currentEvent, parsed, callbacks);\n      } catch { /* skip */ }\n    }\n  } catch (err) {\n    if (err?.name !== 'AbortError') {\n      callbacks.onError?.({ message: 'Stream interrupted.' });\n    }\n  }\n};\n","import { GleapSession, GleapTranslationManager } from './Gleap';\nimport { parseSSEStream } from './GleapSSEParser';\n\nconst RequestStatus = {\n  PENDING: 'pending',\n  SUCCESS: 'success',\n  ERROR: 'error',\n};\n\nclass AgentNetworkManager {\n  static instance = null;\n\n  /** @private {Map<string, boolean>} agentId -> true if currently executing */\n  executeInFlight = new Map();\n\n  /** @private {Map<string, { status, data?, error? }>} */\n  messagesCache = new Map();\n  /** @private {Map<string, Promise>} */\n  messagesRequests = new Map();\n\n  constructor() {\n    if (AgentNetworkManager.instance) {\n      return AgentNetworkManager.instance;\n    }\n    AgentNetworkManager.instance = this;\n  }\n\n  static getInstance() {\n    if (!AgentNetworkManager.instance) {\n      AgentNetworkManager.instance = new AgentNetworkManager();\n    }\n    return AgentNetworkManager.instance;\n  }\n\n  clearCache() {\n    this.messagesCache.clear();\n    this.messagesRequests.clear();\n    this.executeInFlight.clear();\n  }\n\n  /** @private */\n  _getApiUrl() {\n    const s = GleapSession.getInstance();\n    return s?.apiUrl || null;\n  }\n\n  /** @private — build auth headers for fetch */\n  _getHeaders() {\n    const s = GleapSession.getInstance();\n    const headers = { 'Content-Type': 'application/json' };\n    if (s?.sdkKey) headers['Api-Token'] = s.sdkKey;\n    if (s?.session?.gleapId) headers['Gleap-Id'] = s.session.gleapId;\n    if (s?.session?.gleapHash) headers['Gleap-Hash'] = s.session.gleapHash;\n    return headers;\n  }\n\n  /** @private — XHR for non-streaming requests */\n  _makeRequest(method, url, data) {\n    return new Promise((resolve, reject) => {\n      const xhr = new XMLHttpRequest();\n      xhr.open(method, url);\n      const s = GleapSession.getInstance();\n      s?.injectSession(xhr);\n      if (data) xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');\n\n      xhr.onreadystatechange = () => {\n        if (xhr.readyState === 4) {\n          if (xhr.status >= 200 && xhr.status < 300) {\n            try {\n              resolve(xhr.responseText ? JSON.parse(xhr.responseText) : null);\n            } catch (err) {\n              reject({ status: xhr.status, statusText: 'JSON Parse Error', error: err });\n            }\n          } else {\n            reject({ status: xhr.status, statusText: xhr.statusText, responseText: xhr.responseText });\n          }\n        }\n      };\n      xhr.onerror = () => reject({ status: 0, statusText: 'Network Error' });\n      xhr.send(data ? JSON.stringify(data) : null);\n    });\n  }\n\n  /**\n   * Stream an agent execution via SSE.\n   *\n   * @param {string} agentId\n   * @param {object} body - { messages, conversationId?, additionalContext? }\n   * @param {object} callbacks - { onMeta, onToken, onDone, onError, onToolStart?, onToolEnd? }\n   * @param {AbortSignal} [signal] - optional abort signal\n   * @returns {Promise<void>}\n   */\n  async streamAgent(agentId, body, callbacks, signal) {\n    if (this.executeInFlight.get(agentId)) return;\n    this.executeInFlight.set(agentId, true);\n\n    const apiUrl = this._getApiUrl();\n    if (!apiUrl) {\n      this.executeInFlight.delete(agentId);\n      callbacks.onError?.({ message: 'Gleap API URL not configured.' });\n      return;\n    }\n\n    const url = `${apiUrl}/v3/shared/agents/${agentId}/stream`;\n    const headers = { ...this._getHeaders(), Accept: 'text/event-stream' };\n\n    let response;\n    try {\n      response = await fetch(url, {\n        method: 'POST',\n        headers,\n        body: JSON.stringify(body),\n        signal,\n      });\n    } catch (err) {\n      this.executeInFlight.delete(agentId);\n      if (err?.name === 'AbortError') return;\n      callbacks.onError?.({ message: 'Failed to connect to agent.' });\n      return;\n    }\n\n    if (!response.ok) {\n      this.executeInFlight.delete(agentId);\n      callbacks.onError?.({ message: `Server error: ${response.status}` });\n      return;\n    }\n\n    // Use shared SSE parser\n    await parseSSEStream(response, callbacks);\n\n    // Invalidate caches\n    if (body.conversationId) this._invalidateMessagesCache(body.conversationId);\n    this.executeInFlight.delete(agentId);\n  }\n\n  /**\n   * Non-streaming execute (fallback).\n   */\n  executeAgent(agentId, body) {\n    if (this.executeInFlight.get(agentId)) {\n      return Promise.reject(new Error('Agent execution already in progress.'));\n    }\n\n    const apiUrl = this._getApiUrl();\n    if (!apiUrl) return Promise.reject(new Error('AgentNetworkManager: Gleap API URL not configured.'));\n\n    this.executeInFlight.set(agentId, true);\n    const url = `${apiUrl}/v3/shared/agents/${agentId}/execute`;\n    return this._makeRequest('POST', url, body)\n      .then((responseData) => {\n        if (body.conversationId) this._invalidateMessagesCache(body.conversationId);\n        if (responseData?.conversationId) this._invalidateMessagesCache(responseData.conversationId);\n        return responseData;\n      })\n      .finally(() => { this.executeInFlight.delete(agentId); });\n  }\n\n  getConversationMessages(agentId, conversationId, limit = 50, skip = 0) {\n    if (agentId === 'kai') return Promise.resolve({ messages: [] });\n\n    const cacheKey = `${conversationId}:${limit}:${skip}`;\n    const cached = this.messagesCache.get(cacheKey);\n    if (cached) {\n      return cached.status === RequestStatus.SUCCESS\n        ? Promise.resolve(JSON.parse(JSON.stringify(cached.data)))\n        : Promise.reject(cached.error);\n    }\n    if (this.messagesRequests.has(cacheKey)) {\n      return this.messagesRequests.get(cacheKey).then((d) => JSON.parse(JSON.stringify(d)));\n    }\n\n    const apiUrl = this._getApiUrl();\n    if (!apiUrl) return Promise.reject(new Error('AgentNetworkManager: Gleap API URL not configured.'));\n\n    const url = `${apiUrl}/v3/shared/agents/${agentId}/conversations/${conversationId}/messages?limit=${limit}&skip=${skip}`;\n    const p = this._makeRequest('GET', url, null)\n      .then((d) => { this.messagesCache.set(cacheKey, { status: RequestStatus.SUCCESS, data: d }); return JSON.parse(JSON.stringify(d)); })\n      .catch((e) => { this.messagesCache.set(cacheKey, { status: RequestStatus.ERROR, error: e }); throw e; })\n      .finally(() => { this.messagesRequests.delete(cacheKey); });\n\n    this.messagesRequests.set(cacheKey, p);\n    return p.then((d) => JSON.parse(JSON.stringify(d)));\n  }\n\n  getConversations(agentId, limit = 10, skip = 0) {\n    if (agentId === 'kai') return Promise.resolve({ conversations: [] });\n\n    const apiUrl = this._getApiUrl();\n    if (!apiUrl) return Promise.reject(new Error('AgentNetworkManager: Gleap API URL not configured.'));\n    return this._makeRequest('GET', `${apiUrl}/v3/shared/agents/${agentId}/conversations?limit=${limit}&skip=${skip}`, null);\n  }\n\n  /** @private */\n  _invalidateMessagesCache(conversationId) {\n    for (const key of this.messagesCache.keys()) {\n      if (key.startsWith(conversationId + ':')) this.messagesCache.delete(key);\n    }\n    for (const key of this.messagesRequests.keys()) {\n      if (key.startsWith(conversationId + ':')) this.messagesRequests.delete(key);\n    }\n  }\n}\n\nexport default AgentNetworkManager;\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nconst yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);\nfunction getSideAxis(placement) {\n  return yAxisSides.has(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rlPlacement : lrPlacement;\n      return isStart ? lrPlacement : rlPlacement;\n    case 'left':\n    case 'right':\n      return isStart ? tbPlacement : btPlacement;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    var _platform$detectOverf;\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform: {\n        ...platform,\n        detectOverflow: (_platform$detectOverf = platform.detectOverflow) != null ? _platform$detectOverf : detectOverflow\n      },\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const initialSideAxis = getSideAxis(initialPlacement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n          if (!ignoreCrossAxisOverflow ||\n          // We leave the current main axis only if every placement on that axis\n          // overflows the main axis.\n          overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n            // Try next placement and re-run the lifecycle.\n            return {\n              data: {\n                index: nextIndex,\n                overflows: overflowsData\n              },\n              reset: {\n                placement: nextPlacement\n              }\n            };\n          }\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects,\n        platform\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await platform.detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await platform.detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = originSides.has(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        platform\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y,\n          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = originSides.has(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      var _state$middlewareData, _state$middlewareData2;\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n        availableHeight = maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n  return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nconst invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);\n}\nconst tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);\nfunction isTableElement(element) {\n  return tableElements.has(getNodeName(element));\n}\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(element) {\n  return topLayerSelectors.some(selector => {\n    try {\n      return element.matches(selector);\n    } catch (_e) {\n      return false;\n    }\n  });\n}\nconst transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];\nconst willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];\nconst containValues = ['paint', 'layout', 'strict', 'content'];\nfunction isContainingBlock(elementOrCss) {\n  const webkit = isWebKit();\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n  return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nconst lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);\nfunction isLastTraversableNode(node) {\n  return lastTraversableNodeNames.has(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.scrollX,\n    scrollTop: element.scrollY\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle$1(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle$1(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n  const leftScroll = getNodeScroll(element).scrollLeft;\n  if (!rect) {\n    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n  }\n  return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n  const htmlRect = documentElement.getBoundingClientRect();\n  const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n  const y = htmlRect.top + scroll.scrollTop;\n  return {\n    x,\n    y\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle$1(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  const windowScrollbarX = getWindowScrollBarX(html);\n  // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n  // visual width of the <html> but this is not considered in the size\n  // of `html.clientWidth`.\n  if (windowScrollbarX <= 0) {\n    const doc = html.ownerDocument;\n    const body = doc.body;\n    const bodyStyles = getComputedStyle(body);\n    const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n    const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n    if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n      width -= clippingStableScrollbarWidth;\n    }\n  } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n    // If the <body> scrollbar is on the left, the width needs to be extended\n    // by the scrollbar amount so there isn't extra space on the right.\n    width += windowScrollbarX;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nconst absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y,\n      width: clippingAncestor.width,\n      height: clippingAncestor.height\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle$1(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, 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  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n\n  // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n  // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n  function setLeftRTLScrollbarOffset() {\n    offsets.x = getWindowScrollBarX(documentElement);\n  }\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      setLeftRTLScrollbarOffset();\n    }\n  }\n  if (isFixed && !isOffsetParentAnElement && documentElement) {\n    setLeftRTLScrollbarOffset();\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  let rawOffsetParent = element.offsetParent;\n\n  // Firefox returns the <html> element as the offsetParent if it's non-static,\n  // while Chrome and Safari return the <body> element. The <body> element must\n  // be used to perform the correct calculations even if the <html> element is\n  // non-static.\n  if (getDocumentElement(element) === rawOffsetParent) {\n    rawOffsetParent = rawOffsetParent.ownerDocument.body;\n  }\n  return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const elementRectForRootMargin = element.getBoundingClientRect();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = elementRectForRootMargin;\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n        // It's possible that even though the ratio is reported as 1, the\n        // element is not actually fully within the IntersectionObserver's root\n        // area anymore. This can happen under performance constraints. This may\n        // be a bug in the browser's IntersectionObserver implementation. To\n        // work around this, we compare the element's bounding rect now with\n        // what it was at the time we created the IntersectionObserver. If they\n        // are not equal then the element moved, so we refresh.\n        refresh();\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (_e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","export const checkPageFilter = (currentUrl, pageFilter, pageFilterType) => {\n  // If any parameter is missing, consider the filter passed.\n  if (!currentUrl || !pageFilter || !pageFilterType) {\n    return true;\n  }\n\n  // Helper to remove trailing slashes.\n  const removeTrailingSlash = (url) => url.replace(/\\/$/, '');\n\n  // Generates a regex from a match string by replacing dynamic segments (e.g., {id}).\n  const generateRegex = (match) => {\n    if (!match) return null;\n    try {\n      // If match starts with \"/\", remove it to work with Regex\n      if (match.startsWith('/')) {\n        match = match.substring(1);\n      }\n\n      // Replace dynamic patterns {anything} with a placeholder first\n      var dynamicPattern = /{\\w+}/g;\n      var regexPattern = match.replace(dynamicPattern, '___PLACEHOLDER___');\n\n      // Escape special regex characters in the URL pattern\n      regexPattern = regexPattern.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n      // Replace our placeholder with the actual regex pattern\n      regexPattern = regexPattern.replace(/___PLACEHOLDER___/g, '[^&?]+');\n      var pattern = new RegExp(regexPattern, 'i');\n\n      return pattern;\n    } catch (e) {\n      return null;\n    }\n  };\n\n  // Checks if the provided URL matches the given match string.\n  const isMatchingUrl = (url, match) => {\n    if (!url || !match) return false;\n    try {\n      // First, a simple substring check.\n      if (url.includes(match)) {\n        return true;\n      }\n    } catch (e) {\n      // Continue to regex matching.\n    }\n    const regex = generateRegex(match);\n    if (!regex) return false;\n    try {\n      return regex.test(url);\n    } catch (e) {\n      return false;\n    }\n  };\n\n  let matched = false;\n\n  // Check matching based on the provided pageFilterType.\n  switch (pageFilterType) {\n    case 'is':\n      matched = removeTrailingSlash(currentUrl) === removeTrailingSlash(pageFilter);\n      break;\n    case 'isnot':\n      matched = removeTrailingSlash(currentUrl) !== removeTrailingSlash(pageFilter);\n      break;\n    case 'contains':\n      matched = isMatchingUrl(currentUrl, pageFilter);\n      break;\n    case 'startswith':\n      matched = currentUrl.startsWith(pageFilter);\n      break;\n    case 'endswith':\n      matched = currentUrl.endsWith(pageFilter);\n      break;\n    case 'notcontains':\n      matched = !isMatchingUrl(currentUrl, pageFilter);\n      break;\n    default:\n      matched = false;\n  }\n\n  return matched;\n};\n\n// Exclusion (negative) rule types. These express \"hide here\" and must all\n// hold simultaneously, so they are combined with AND. Everything else is a\n// positive \"show here\" rule and is combined with OR.\nconst NEGATIVE_FILTER_TYPES = ['notcontains', 'isnot'];\n\nexport const checkPageRules = (currentUrl, action) => {\n  const rules = action.pageRules && action.pageRules.length > 0\n    ? action.pageRules\n    : (action.pageFilter ? [{ pageFilter: action.pageFilter, pageFilterType: action.pageFilterType }] : []);\n  if (rules.length === 0) return true;\n\n  const positiveRules = rules.filter(r => !NEGATIVE_FILTER_TYPES.includes(r.pageFilterType));\n  const negativeRules = rules.filter(r => NEGATIVE_FILTER_TYPES.includes(r.pageFilterType));\n\n  // Positive rules are an allow-list: show if the page matches ANY of them.\n  const positivesPass = positiveRules.length === 0\n    ? true\n    : positiveRules.some(r => checkPageFilter(currentUrl, r.pageFilter, r.pageFilterType));\n\n  // Negative rules are a deny-list: only show if the page passes EVERY\n  // exclusion. Combining exclusions with OR (the previous behaviour) made any\n  // multi-page exclusion a tautology that always resolved to \"show\".\n  const negativesPass = negativeRules.length === 0\n    ? true\n    : negativeRules.every(r => checkPageFilter(currentUrl, r.pageFilter, r.pageFilterType));\n\n  return positivesPass && negativesPass;\n};\n","import { arrow, autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom';\nimport { GleapSession } from './Gleap';\nimport { loadIcon } from './UI';\nimport { checkPageFilter, checkPageRules } from './GleapPageFilter';\n\nexport default class GleapTooltipManager {\n  tooltips = [];\n  filteredTooltips = [];\n  lastUrl = null;\n  elementToFloatingUIMap = new WeakMap();\n  elementToTooltipMap = new WeakMap();\n  nextId = 0;\n\n  // GleapTooltipManager singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapTooltipManager();\n      this.instance.start();\n    }\n    return this.instance;\n  }\n\n  // Recursive function to process each node and its children\n  processNodeInsertion(node) {\n    if (node.nodeType === Node.ELEMENT_NODE) {\n      // Check the node itself\n      this.checkNodeTooltip(node);\n\n      // Check all children of the node recursively\n      if (node.childNodes) {\n        node.childNodes.forEach((childNode) => {\n          this.processNodeInsertion(childNode);\n        });\n      }\n    }\n  }\n\n  // Function to check a single node against the filtered tooltips\n  checkNodeTooltip(node) {\n    if (this.filteredTooltips.length > 0) {\n      this.filteredTooltips.forEach((tooltip) => {\n        if (tooltip.selector && node.matches(tooltip.selector)) {\n          this.linkTooltip(node, tooltip);\n        }\n      });\n    }\n  }\n\n  start() {\n    const self = this;\n\n    if (!window) {\n      return;\n    }\n\n    const throttle = (fn, time) => {\n      let timeout = null;\n      return function () {\n        if (timeout) return;\n        const context = this;\n        const args = arguments;\n        const later = () => {\n          fn.call(context, ...args);\n          timeout = null;\n        };\n        timeout = setTimeout(later, time);\n      };\n    };\n\n    const handleResizeThrottled = throttle(self.updateHotspotPositions.bind(self), 250);\n    window.addEventListener('resize', handleResizeThrottled);\n\n    window.requestAnimationFrame(() => {\n      this.observer = new MutationObserver((mutations) => {\n        if (self.lastUrl !== window.location.href) {\n          self.lastUrl = window.location.href;\n          self.filteredTooltips = self.getFilteredTooltips();\n        }\n\n        mutations.forEach((mutation) => {\n          // Check for attribute changes that might affect hotspot positioning\n          if (mutation.type === 'attributes') {\n            const target = mutation.target;\n            if (target.nodeType === Node.ELEMENT_NODE) {\n              // Check if the changed element has tooltip hotspots or is a parent of tooltip elements\n              const hasTooltipHotspots =\n                target.querySelector('[data-gleap-tooltip-hotspot]') || target.hasAttribute('data-gleap-tooltip-mode');\n\n              if (hasTooltipHotspots || target.hasAttribute('data-gleap-tooltip')) {\n                self.updateHotspotPositions();\n              }\n            }\n          }\n\n          // Check for added nodes\n          mutation.addedNodes.forEach((node) => {\n            if (node.nodeType === Node.ELEMENT_NODE) {\n              self.processNodeInsertion(node);\n            }\n          });\n\n          // Check for removed nodes\n          mutation.removedNodes.forEach((node) => {\n            if (node.nodeType === Node.ELEMENT_NODE && this.elementToFloatingUIMap.has(node)) {\n              const floatingUI = this.elementToFloatingUIMap.get(node);\n              if (floatingUI) {\n                if (floatingUI.tooltip) {\n                  floatingUI.tooltip.remove();\n                }\n                floatingUI.cleanup();\n\n                this.elementToFloatingUIMap.delete(node);\n              }\n            }\n\n            if (this.elementToTooltipMap.has(node)) {\n              this.elementToTooltipMap.delete(node);\n            }\n          });\n        });\n      });\n\n      // Start observing the document for changes.\n      this.observer.observe(document.body, {\n        childList: true,\n        subtree: true,\n        attributes: true,\n        attributeFilter: ['style', 'class'],\n      });\n    });\n  }\n\n  updateHotspotPositions() {\n    const elements = document.querySelectorAll(`[data-gleap-tooltip-mode='hotspot']`);\n    elements.forEach((element) => {\n      const tooltip = this.elementToTooltipMap.get(element);\n      if (tooltip) {\n        this.repositionHotspot(element, tooltip);\n      }\n    });\n  }\n\n  createTooltip(element, tooltipText, tooltipData) {\n    // Create tooltip element\n    const tooltip = document.createElement('div');\n    tooltip.className = 'gleap-tooltip';\n    tooltip.innerHTML = `<div class=\"gleap-tooltip-inner\">\n            ${tooltipText}\n            <div class=\"gleap-tooltip-arrow\">\n                <svg width=\"116\" height=\"56\" viewBox=\"0 0 116 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M57.75 0.74998L115.5 0.680177L66.8726 49.3076C61.7958 54.3844 53.5646 54.3844 48.4878 49.3076L4.05618e-05 0.819784L57.75 0.74998Z\" fill=\"white\"/>\n                </svg>\n            </div>\n        </div>`;\n    document.body.appendChild(tooltip);\n\n    // Create a Popper instance with arrow and offset\n\n    const arrowEl = tooltip.querySelector('.gleap-tooltip-arrow');\n    const cleanup = autoUpdate(element, tooltip, () => {\n      computePosition(element, tooltip, {\n        placement: tooltipData.posX === 'left' ? 'left' : 'right',\n        middleware: [offset(10), flip(), shift(), arrow({ element: arrowEl })],\n      }).then(({ x, y, middlewareData, placement }) => {\n        try {\n          Object.assign(tooltip.style, {\n            left: `${x}px`,\n            top: `${y}px`,\n          });\n\n          if (middlewareData.arrow) {\n            let arrowSize = 20; // Arrow size should be consistent with the border width used in CSS\n            let arrowPos = { left: '', top: '', transform: '' };\n\n            if (middlewareData.arrow.x != null) {\n              arrowPos.left = `${middlewareData.arrow.x}px`;\n              if (placement === 'bottom') {\n                arrowPos.transform = 'translateY(-7px) rotate(180deg)';\n                arrowPos.top = `${-arrowSize}px`; // Move arrow outside the tooltip\n              } else if (placement === 'top') {\n                arrowPos.transform = 'translateY(7px) rotate(0deg)';\n                arrowPos.top = `100%`; // Adjust based on the tooltip's height\n              }\n            }\n            if (middlewareData.arrow.y != null) {\n              arrowPos.top = `${middlewareData.arrow.y}px`;\n              if (placement === 'right') {\n                arrowPos.transform = 'translateX(-7px) rotate(90deg)';\n                arrowPos.left = `${-arrowSize}px`; // Move arrow outside the tooltip\n              } else if (placement === 'left') {\n                arrowPos.transform = 'translateX(7px) rotate(270deg)';\n                arrowPos.left = `100%`; // Adjust based on the tooltip's width\n              }\n            }\n            // Apply the computed styles to the arrow\n            Object.assign(arrowEl.style, arrowPos);\n          }\n        } catch (exp) {}\n      });\n    });\n\n    let hideTimeout;\n\n    function show() {\n      clearTimeout(hideTimeout);\n      tooltip.style.visibility = 'visible';\n      tooltip.style.opacity = '1';\n      tooltip.style.pointerEvents = 'auto';\n    }\n\n    function hide() {\n      hideTimeout = setTimeout(() => {\n        tooltip.style.opacity = '0';\n\n        setTimeout(() => {\n          tooltip.style.visibility = 'hidden';\n          tooltip.style.pointerEvents = 'none';\n        }, 200);\n      }, 500);\n    }\n\n    // Event listeners to show/hide the tooltip\n    element.addEventListener('mouseenter', show);\n    element.addEventListener('mouseleave', hide);\n    tooltip.addEventListener('mouseenter', show);\n    tooltip.addEventListener('mouseleave', hide);\n\n    element.addEventListener('click', hide);\n    tooltip.addEventListener('click', hide);\n\n    return {\n      cleanup,\n      tooltip,\n    };\n  }\n\n  canEmbed(element) {\n    const voidElements = new Set(['area', 'base', 'br', 'embed', 'hr', 'img', 'input', 'source', 'track', 'wbr', 'canvas']);\n\n    return element && !voidElements.has(element.tagName.toLowerCase());\n  }\n\n  linkTooltip = (element, tooltip) => {\n    if (element.hasAttribute('data-gleap-tooltip')) {\n      return;\n    }\n\n    const nextId = this.nextId++;\n    element.setAttribute('data-gleap-tooltip', nextId);\n    if (element) {\n      var tooltipElem = null;\n\n      if (tooltip.mode === 'hotspot') {\n        // Create hotspot container.\n        const hotspotContainer = document.createElement('div');\n        hotspotContainer.setAttribute('data-gleap-tooltip-anchor', nextId);\n        hotspotContainer.classList.add('gleap-tooltip-anchor');\n        element.setAttribute('data-gleap-tooltip-mode', 'hotspot');\n\n        if (this.canEmbed(element)) {\n          if (element.firstChild) {\n            element.insertBefore(hotspotContainer, element.firstChild);\n          } else {\n            element.appendChild(hotspotContainer);\n          }\n        } else {\n          element.parentNode.insertBefore(hotspotContainer, element.nextSibling);\n        }\n\n        // Create hotspot.\n        const hotspot = document.createElement('div');\n        hotspot.classList.add('gleap-tooltip-hotspot');\n        hotspot.setAttribute('data-gleap-tooltip-hotspot', nextId);\n\n        hotspot.innerHTML = `${loadIcon(tooltip.icon, tooltip.color)}${\n          tooltip.animated\n            ? `<div style=\"background-color: ${tooltip.color}\" class=\"gleap-tooltip-hotspot-animation\"></div>`\n            : ''\n        }`;\n        hotspotContainer.appendChild(hotspot);\n\n        // Update hotspot position.\n        this.repositionHotspot(element, tooltip);\n\n        tooltipElem = hotspot;\n        this.elementToTooltipMap.set(element, tooltip);\n      } else {\n        tooltipElem = element;\n      }\n\n      const floatingUIInstance = this.createTooltip(tooltipElem, tooltip.html, tooltip);\n\n      this.elementToFloatingUIMap.set(element, floatingUIInstance);\n    }\n  };\n\n  destroy() {\n    // Disconnect the MutationObserver if it exists.\n    if (this.observer) {\n      this.observer.disconnect();\n      this.observer = null;\n    }\n\n    // Remove the window resize event listener if it was stored.\n    // (In start() you can assign the listener to a class property, e.g., this.resizeListener.)\n    if (this.resizeListener) {\n      window.removeEventListener('resize', this.resizeListener);\n      this.resizeListener = null;\n    }\n\n    // Remove all tooltip elements created by Gleap.\n    const tooltipElements = document.querySelectorAll('.gleap-tooltip');\n    tooltipElements.forEach((tooltip) => tooltip.remove());\n\n    // Remove any tooltip anchors and hotspots.\n    const anchors = document.querySelectorAll('[data-gleap-tooltip-anchor]');\n    anchors.forEach((anchor) => anchor.remove());\n    const hotspots = document.querySelectorAll('[data-gleap-tooltip-hotspot]');\n    hotspots.forEach((hotspot) => hotspot.remove());\n\n    // Remove all attributes from elements.\n    const elements = document.querySelectorAll('[data-gleap-tooltip]');\n    elements.forEach((element) => element.removeAttribute('data-gleap-tooltip'));\n\n    // Remove all attributes from elements.\n    const modeElements = document.querySelectorAll('[data-gleap-tooltip-mode]');\n    modeElements.forEach((element) => element.removeAttribute('data-gleap-tooltip-mode'));\n\n    // Clear internal references.\n    this.elementToFloatingUIMap = new WeakMap();\n    this.elementToTooltipMap = new WeakMap();\n    this.tooltips = [];\n    this.filteredTooltips = [];\n  }\n\n  repositionHotspot(element, tooltip) {\n    if (!element || !tooltip) {\n      return;\n    }\n\n    const tooltipId = element.getAttribute('data-gleap-tooltip');\n    if (!tooltipId) {\n      return;\n    }\n\n    const hotspot = document.querySelector(`[data-gleap-tooltip-hotspot=\"${tooltipId}\"]`);\n    if (!hotspot) {\n      return;\n    }\n\n    if (!tooltip.posX) {\n      tooltip.posX = 'right';\n    }\n    if (!tooltip.posY) {\n      tooltip.posY = 'center';\n    }\n    if (!tooltip.offsetX) {\n      tooltip.offsetX = 4;\n    }\n    if (!tooltip.offsetY) {\n      tooltip.offsetY = 0;\n    }\n\n    var elementRect = element.getBoundingClientRect();\n\n    try {\n      // Improve width calculation for text elements.\n      var range = document.createRange();\n      range.selectNodeContents(element);\n      const style = window.getComputedStyle(element);\n      const fixedWidth = range.getBoundingClientRect().width + parseFloat(style.paddingLeft);\n      if (fixedWidth < elementRect.width) {\n        elementRect.width = fixedWidth;\n      }\n    } catch (exp) {}\n\n    const anchorElement = document.querySelector(`[data-gleap-tooltip-anchor=\"${tooltipId}\"]`);\n    const anchorRect = anchorElement.getBoundingClientRect();\n\n    // Offset calculation for hotspot position.\n    const offsetX = anchorRect.left - elementRect.left;\n    const offsetY = anchorRect.top - elementRect.top;\n\n    let top = 0;\n    let left = 0;\n    let tooltipSize = 17 / 2;\n\n    switch (tooltip.posX) {\n      case 'left':\n        left = (tooltip.offsetX + tooltipSize * 2) * -1;\n        break;\n      case 'right':\n        left = elementRect.width + tooltip.offsetX;\n        break;\n    }\n\n    switch (tooltip.posY) {\n      case 'top':\n        top = 0 + tooltip.offsetY;\n        break;\n      case 'bottom':\n        top = elementRect.height - tooltipSize * 2 + tooltip.offsetY;\n        break;\n      case 'center':\n        top = elementRect.height / 2 - tooltipSize + tooltip.offsetY;\n        break;\n    }\n\n    if (hotspot) {\n      hotspot.style.position = 'absolute';\n      hotspot.style.top = top - offsetY + 'px';\n      hotspot.style.left = left - offsetX + 'px';\n    }\n  }\n\n  updateFilteredTooltips = () => {\n    this.filteredTooltips = this.getFilteredTooltips();\n    this.checkForTooltips();\n  };\n\n  getFilteredTooltips = () => {\n    if (!this.tooltips) {\n      return [];\n    }\n\n    const currentUrl = window.location.href;\n\n    return this.tooltips.filter((tooltip) => {\n      if (tooltip.pageRules && tooltip.pageRules.length > 0) {\n        return checkPageRules(currentUrl, { pageRules: tooltip.pageRules });\n      }\n\n      if (!tooltip.page || tooltip.page.length === 0) {\n        return true;\n      }\n\n      const passed = checkPageFilter(currentUrl, tooltip.page, tooltip.pageType);\n\n      if (!passed) {\n        return false;\n      }\n      return true;\n    });\n  };\n\n  checkForTooltips = () => {\n    for (let i = 0; i < this.filteredTooltips.length; i++) {\n      const tooltip = this.filteredTooltips[i];\n\n      try {\n        const elements = document.querySelectorAll(tooltip.selector);\n\n        for (let j = 0; j < elements.length; j++) {\n          const element = elements[j];\n\n          if (element) {\n            this.linkTooltip(element, tooltip);\n          }\n        }\n      } catch (exp) {}\n    }\n  };\n\n  load = () => {\n    const self = this;\n    const sessionInstance = GleapSession.getInstance();\n\n    const http = new XMLHttpRequest();\n    http.open('GET', sessionInstance.apiUrl + '/config/' + sessionInstance.sdkKey + '/tooltips');\n    http.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');\n    http.setRequestHeader('Api-Token', sessionInstance.sdkKey);\n    try {\n      http.setRequestHeader('Gleap-Id', sessionInstance.session.gleapId);\n      http.setRequestHeader('Gleap-Hash', sessionInstance.session.gleapHash);\n    } catch (exp) {}\n\n    http.onerror = () => {\n      console.error('Failed to fetch tooltips');\n    };\n    http.onreadystatechange = function (e) {\n      if (http.readyState === 4) {\n        if (http.status === 200) {\n          try {\n            self.tooltips = JSON.parse(http.responseText);\n            self.updateFilteredTooltips();\n          } catch (exp) {\n            console.error('Failed to parse tooltips', exp);\n          }\n        }\n      }\n    };\n\n    http.send();\n  };\n}\n","import ChecklistNetworkManager from './ChecklistNetworkManager';\nimport AgentNetworkManager from './AgentNetworkManager';\nimport {\n  GleapBannerManager,\n  GleapEventManager,\n  GleapFrameManager,\n  GleapModalManager,\n  GleapNotificationManager,\n  GleapStreamedEvent,\n  GleapTranslationManager,\n} from './Gleap';\nimport {\n  eraseGleapCookie,\n  getDeviceType,\n  getGleapCookie,\n  loadFromGleapCache,\n  saveToGleapCache,\n  setGleapCookie,\n} from './GleapHelper';\nimport GleapTooltipManager from './GleapTooltipManager';\n\nexport default class GleapSession {\n  apiUrl = 'https://api.gleap.io';\n  wsApiUrl = 'wss://ws.gleap.io';\n  sdkKey = null;\n  updatingSession = false;\n  useCookies = true;\n  localStorageDisabled = false;\n  session = {\n    gleapId: null,\n    gleapHash: null,\n    name: '',\n    email: '',\n    userId: '',\n    phone: '',\n    value: 0,\n  };\n  ready = false;\n  onSessionReadyListener = [];\n\n  // GleapSession singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapSession();\n      return this.instance;\n    } else {\n      return this.instance;\n    }\n  }\n\n  /**\n   * Returns the current session name.\n   * @returns string\n   */\n  getName() {\n    try {\n      return this.session.name ? this.session.name.split(' ')[0].split('@')[0].split('.')[0].split('+')[0] : '';\n    } catch (exp) {\n      return this.session.name;\n    }\n  }\n\n  /**\n   * Returns the Gleap session object.\n   * @returns\n   */\n  getSession() {\n    return this.session;\n  }\n\n  /**\n   * Returns the Gleap session object.\n   * @returns\n   */\n  getGleapId() {\n    if (this.session && this.session.gleapId) {\n      return this.session.gleapId;\n    }\n\n    return null;\n  }\n\n  /**\n   * Determines if the current session is a identified user.\n   * @returns boolean\n   */\n  isUser() {\n    if (this.session && this.session.userId) {\n      return true;\n    }\n    return false;\n  }\n\n  constructor() {}\n\n  setOnSessionReady = (onSessionReady) => {\n    if (this.ready) {\n      onSessionReady();\n    } else {\n      this.onSessionReadyListener.push(onSessionReady);\n    }\n  };\n\n  injectSession = (http) => {\n    if (http && this.session) {\n      http.setRequestHeader('Api-Token', this.sdkKey);\n      http.setRequestHeader('Gleap-Id', this.session.gleapId);\n      http.setRequestHeader('Gleap-Hash', this.session.gleapHash);\n    }\n  };\n\n  clearSession = (attemp = 0, retry = true) => {\n    if (this.session && this.session.gleapHash) {\n      GleapEventManager.notifyEvent('unregister-pushmessage-group', `gleapuser-${this.session.gleapHash}`);\n    }\n\n    try {\n      saveToGleapCache(`session-${this.sdkKey}`, null);\n    } catch (exp) {}\n\n    if (this.useCookies) {\n      try {\n        eraseGleapCookie(`session-${this.sdkKey}`);\n      } catch (exp) {}\n    }\n\n    this.ready = false;\n    this.session = {\n      gleapId: null,\n      gleapHash: null,\n      name: '',\n      email: '',\n      userId: '',\n      phone: '',\n      value: 0,\n    };\n\n    GleapFrameManager.getInstance().sendMessage(\n      {\n        name: 'session-cleared',\n      },\n      true\n    );\n    GleapNotificationManager.getInstance().clearAllNotifications(false);\n    GleapNotificationManager.getInstance().setNotificationCount(0);\n    GleapBannerManager.getInstance().removeBannerUI();\n    GleapModalManager.getInstance().hideModal();\n\n    if (retry) {\n      if (!isNaN(attemp)) {\n        // Exponentially retry to renew session.\n        const newTimeout = Math.pow(attemp, 2) * 10;\n        setTimeout(() => {\n          this.startSession(attemp + 1);\n        }, newTimeout * 1000);\n      }\n    }\n  };\n\n  validateSession = (session) => {\n    if (!session || !session.gleapId) {\n      return;\n    }\n\n    let sessionChanged = false;\n    if (this.session?.gleapId !== session?.gleapId) {\n      sessionChanged = true;\n    }\n\n    // Unregister previous group.\n    if (this.session && this.session.gleapHash) {\n      GleapEventManager.notifyEvent('unregister-pushmessage-group', `gleapuser-${this.session.gleapHash}`);\n    }\n\n    if (!this.localStorageDisabled) {\n      saveToGleapCache(`session-${this.sdkKey}`, session);\n    }\n    if (this.useCookies) {\n      setGleapCookie(`session-${this.sdkKey}`, encodeURIComponent(JSON.stringify(session)), 365);\n    }\n\n    this.session = session;\n    this.ready = true;\n\n    // Register new push group.\n    if (this.session && this.session.gleapHash) {\n      GleapEventManager.notifyEvent('register-pushmessage-group', `gleapuser-${this.session.gleapHash}`);\n    }\n\n    if (sessionChanged) {\n      // Load tooltips.\n      setTimeout(() => {\n        // Clear cache first, as the session context has changed.\n        ChecklistNetworkManager.getInstance().clearCache();\n        AgentNetworkManager.getInstance().clearCache();\n\n        // Initially track.\n        GleapStreamedEvent.getInstance().restart();\n\n        const tooltipManager = GleapTooltipManager.getInstance();\n        if (tooltipManager) {\n          try {\n            tooltipManager.destroy();\n          } catch (exp) {}\n\n          tooltipManager.load();\n        }\n      }, 0);\n\n      if (typeof window.dispatchEvent === 'function') {\n        window.dispatchEvent(new CustomEvent('session-updated'));\n      }\n    }\n\n    this.notifySessionReady();\n  };\n\n  startSession = (attemp = 0) => {\n    // Check if we already have a session cookie.\n    try {\n      if (this.useCookies) {\n        const sessionCookie = getGleapCookie(`session-${this.sdkKey}`);\n        if (sessionCookie) {\n          const sessionData = JSON.parse(decodeURIComponent(sessionCookie));\n          this.validateSession(sessionData);\n        }\n      }\n    } catch (exp) {}\n\n    // Try to load session from local storage, if not already loaded.\n    if (!this.localStorageDisabled && !(this.session && this.session.gleapId && this.session.gleapId.length > 0)) {\n      const cachedSession = loadFromGleapCache(`session-${this.sdkKey}`);\n      if (cachedSession) {\n        this.validateSession(cachedSession);\n      }\n    }\n\n    const self = this;\n    const http = new XMLHttpRequest();\n    http.open('POST', self.apiUrl + '/sessions');\n    http.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');\n    http.setRequestHeader('Api-Token', self.sdkKey);\n    try {\n      if (this.session && this.session.gleapId && this.session.gleapHash) {\n        http.setRequestHeader('Gleap-Id', this.session.gleapId);\n        http.setRequestHeader('Gleap-Hash', this.session.gleapHash);\n      }\n    } catch (exp) {}\n    http.onreadystatechange = function (e) {\n      if (http.readyState === 4) {\n        if (http.status === 200 || http.status === 201) {\n          try {\n            const sessionData = JSON.parse(http.responseText);\n            self.validateSession(sessionData);\n          } catch (exp) {}\n        } else {\n          if (http.status !== 429) {\n            self.clearSession(attemp, true);\n          }\n        }\n      }\n    };\n    http.send(\n      JSON.stringify({\n        lang: GleapTranslationManager.getInstance().getActiveLanguage(),\n        deviceType: getDeviceType(),\n        platform: 'web',\n      })\n    );\n  };\n\n  notifySessionReady() {\n    if (this.onSessionReadyListener.length > 0) {\n      for (var i = 0; i < this.onSessionReadyListener.length; i++) {\n        this.onSessionReadyListener[i]();\n      }\n    }\n    this.onSessionReadyListener = [];\n\n    // Send session update to frame.\n    GleapFrameManager.getInstance().sendSessionUpdate();\n  }\n\n  checkIfSessionNeedsUpdate = (userId, userData) => {\n    if (!this.session || !this.session.userId || !userId) {\n      return true;\n    }\n\n    try {\n      if (this.session.userId.toString() !== userId.toString()) {\n        return true;\n      }\n    } catch (exp) {}\n\n    return this.checkIfSessionDataNeedsUpdate(userData);\n  };\n\n  checkIfSessionDataNeedsUpdate = (userData) => {\n    if (userData) {\n      var userDataKeys = Object.keys(userData);\n      for (var i = 0; i < userDataKeys.length; i++) {\n        var userDataKey = userDataKeys[i];\n        if (JSON.stringify(this.session[userDataKey]) !== JSON.stringify(userData[userDataKey])) {\n          // Check custom data for a match.\n          if (\n            !(\n              this.session.customData &&\n              JSON.stringify(this.session.customData[userDataKey]) === JSON.stringify(userData[userDataKey])\n            )\n          ) {\n            return true;\n          }\n        }\n      }\n    }\n\n    return false;\n  };\n\n  updateSession = (userData) => {\n    // Check if session needs update.\n    const sessionNeedsUpdate = this.checkIfSessionDataNeedsUpdate(userData);\n    if (!sessionNeedsUpdate) {\n      return;\n    }\n\n    const self = this;\n    return new Promise((resolve, reject) => {\n      // Wait for gleap session to be ready.\n      this.setOnSessionReady(function () {\n        if (!self.session.gleapId || !self.session.gleapHash) {\n          return reject('Session not ready yet.');\n        }\n\n        const http = new XMLHttpRequest();\n        http.open('POST', self.apiUrl + '/sessions/partialupdate');\n        http.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');\n        http.setRequestHeader('Api-Token', self.sdkKey);\n        try {\n          http.setRequestHeader('Gleap-Id', self.session.gleapId);\n          http.setRequestHeader('Gleap-Hash', self.session.gleapHash);\n        } catch (exp) {}\n\n        http.onerror = () => {\n          reject();\n        };\n        http.onreadystatechange = function (e) {\n          if (http.readyState === 4) {\n            if (http.status === 200 || http.status === 201) {\n              try {\n                const sessionData = JSON.parse(http.responseText);\n                self.validateSession(sessionData);\n                resolve(sessionData);\n              } catch (exp) {\n                reject(exp);\n              }\n            } else {\n              reject();\n            }\n          }\n        };\n\n        http.send(\n          JSON.stringify({\n            data: {\n              ...userData,\n              lang: GleapTranslationManager.getInstance().getActiveLanguage(),\n              deviceType: getDeviceType(),\n              platform: 'web',\n            },\n            type: 'js',\n            sdkVersion: SDK_VERSION,\n            ws: true,\n          })\n        );\n      });\n    });\n  };\n\n  identifySession = (userId, userData, userHash) => {\n    const sessionNeedsUpdate = this.checkIfSessionNeedsUpdate(userId, userData);\n    if (!sessionNeedsUpdate) {\n      return;\n    }\n\n    const self = this;\n    return new Promise((resolve, reject) => {\n      // Wait for gleap session to be ready.\n      this.setOnSessionReady(function () {\n        if (!self.session.gleapId || !self.session.gleapHash) {\n          return reject('Session not ready yet.');\n        }\n\n        const http = new XMLHttpRequest();\n        http.open('POST', self.apiUrl + '/sessions/identify');\n        http.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');\n        http.setRequestHeader('Api-Token', self.sdkKey);\n        try {\n          http.setRequestHeader('Gleap-Id', self.session.gleapId);\n          http.setRequestHeader('Gleap-Hash', self.session.gleapHash);\n        } catch (exp) {}\n\n        http.onerror = () => {\n          reject();\n        };\n        http.onreadystatechange = function (e) {\n          if (http.readyState === 4) {\n            if (http.status === 200 || http.status === 201) {\n              try {\n                const sessionData = JSON.parse(http.responseText);\n                self.validateSession(sessionData);\n                resolve(sessionData);\n              } catch (exp) {\n                reject(exp);\n              }\n            } else {\n              reject();\n            }\n          }\n        };\n\n        var dataToSend = {\n          ...userData,\n        };\n\n        if (userData.customData) {\n          delete dataToSend['customData'];\n          dataToSend = {\n            ...dataToSend,\n            ...userData.customData,\n          };\n        }\n\n        http.send(\n          JSON.stringify({\n            ...dataToSend,\n            userId,\n            userHash,\n            lang: GleapTranslationManager.getInstance().getActiveLanguage(),\n            deviceType: getDeviceType(),\n            platform: 'web',\n          })\n        );\n      });\n    });\n  };\n\n  startProductTourConfig = (tourId) => {\n    const self = this;\n    return new Promise((resolve, reject) => {\n      this.setOnSessionReady(function () {\n        if (!self.session.gleapId || !self.session.gleapHash) {\n          return reject('Session not ready yet.');\n        }\n\n        const http = new XMLHttpRequest();\n        http.open('POST', self.apiUrl + '/outbound/producttours');\n        http.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');\n        http.setRequestHeader('Api-Token', self.sdkKey);\n        try {\n          http.setRequestHeader('Gleap-Id', self.session.gleapId);\n          http.setRequestHeader('Gleap-Hash', self.session.gleapHash);\n        } catch (exp) {}\n\n        http.onerror = () => {\n          reject();\n        };\n        http.onreadystatechange = function (e) {\n          if (http.readyState === 4) {\n            if (http.status === 200 || http.status === 201) {\n              try {\n                const tourData = JSON.parse(http.responseText);\n                if (tourData && tourData.config) {\n                  resolve(tourData.config);\n                }\n              } catch (exp) {\n                reject(exp);\n              }\n            } else {\n              reject();\n            }\n          }\n        };\n        http.send(\n          JSON.stringify({\n            outboundId: tourId,\n          })\n        );\n      });\n    });\n  };\n\n  validateProductTour = (tourId) => {\n    const self = this;\n    return new Promise((resolve, reject) => {\n      this.setOnSessionReady(function () {\n        if (!self.session.gleapId || !self.session.gleapHash) {\n          return reject('Session not ready yet.');\n        }\n\n        const http = new XMLHttpRequest();\n        http.open('POST', self.apiUrl + '/outbound/producttourvalidation');\n        http.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');\n        http.setRequestHeader('Api-Token', self.sdkKey);\n        try {\n          http.setRequestHeader('Gleap-Id', self.session.gleapId);\n          http.setRequestHeader('Gleap-Hash', self.session.gleapHash);\n        } catch (exp) {}\n\n        http.onerror = () => {\n          reject();\n        };\n        http.onreadystatechange = function (e) {\n          if (http.readyState === 4) {\n            if (http.status === 200 || http.status === 201) {\n              try {\n                const tourData = JSON.parse(http.responseText);\n                if (tourData && tourData.status === 'live' && tourData.passedPageFilter) {\n                  resolve(tourData.config);\n                } else {\n                  reject();\n                }\n              } catch (exp) {\n                reject(exp);\n              }\n            } else {\n              reject();\n            }\n          }\n        };\n        http.send(\n          JSON.stringify({\n            outboundId: tourId,\n            currentUrl: window?.location?.href,\n          })\n        );\n      });\n    });\n  };\n}\n","import Gleap, {\n  GleapFrameManager,\n  GleapMetaDataManager,\n  GleapAiChatbarManager,\n  GleapNotificationManager,\n  GleapSession,\n  GleapAdminManager,\n  GleapEventManager,\n} from './Gleap';\nimport { gleapDataParser } from './GleapHelper';\n\nexport default class GleapStreamedEvent {\n  eventArray = [];\n  streamedEventArray = [];\n  eventMaxLength = 500;\n  errorCount = 0;\n  streamingEvents = false;\n  lastUrl = undefined;\n  mainLoopTimeout = null;\n  socket = null;\n  connectedWebSocketGleapId = null;\n  connectionTimeout = null;\n  pingWS = null;\n  handleOpenBound = null;\n  handleErrorBound = null;\n  handleMessageBound = null;\n  handleCloseBound = null;\n\n  // GleapStreamedEvent singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapStreamedEvent();\n      return this.instance;\n    } else {\n      return this.instance;\n    }\n  }\n\n  constructor() {\n    this.handleOpenBound = this.handleOpen.bind(this);\n    this.handleErrorBound = this.handleError.bind(this);\n    this.handleMessageBound = this.handleMessage.bind(this);\n    this.handleCloseBound = this.handleClose.bind(this);\n  }\n\n  cleanupWebSocket() {\n    if (this.connectionTimeout) {\n      clearTimeout(this.connectionTimeout);\n      this.connectionTimeout = null;\n    }\n\n    if (this.pingWS) {\n      clearInterval(this.pingWS);\n    }\n\n    if (this.socket) {\n      this.socket.removeEventListener('open', this.handleOpenBound);\n      this.socket.removeEventListener('error', this.handleErrorBound);\n      this.socket.removeEventListener('message', this.handleMessageBound);\n      this.socket.removeEventListener('close', this.handleCloseBound);\n      this.socket.close();\n      this.socket = null;\n    }\n  }\n\n  initWebSocket() {\n    this.cleanupWebSocket();\n\n    this.connectedWebSocketGleapId = GleapSession.getInstance().session.gleapId;\n\n    if (!GleapSession.getInstance().session || !GleapSession.getInstance().sdkKey) {\n      return;\n    }\n\n    this.socket = new WebSocket(\n      `${GleapSession.getInstance().wsApiUrl}?gleapId=${\n        GleapSession.getInstance().session.gleapId\n      }&gleapHash=${GleapSession.getInstance().session.gleapHash}&apiKey=${\n        GleapSession.getInstance().sdkKey\n      }&sdkVersion=${SDK_VERSION}`\n    );\n    this.socket.addEventListener('open', this.handleOpenBound);\n    this.socket.addEventListener('message', this.handleMessageBound);\n    this.socket.addEventListener('error', this.handleErrorBound);\n    this.socket.addEventListener('close', this.handleCloseBound);\n  }\n\n  handleOpen(event) {\n    this.pingWS = setInterval(() => {\n      if (this.socket.readyState === this.socket.OPEN) {\n        this.socket.send('PING');\n        this.socket.send(0x9);\n      }\n    }, 10000);\n\n    if (this.connectionTimeout) {\n      clearTimeout(this.connectionTimeout);\n      this.connectionTimeout = null;\n    }\n  }\n\n  handleMessage(event) {\n    this.processMessage(JSON.parse(event.data));\n  }\n\n  handleError(error) {}\n\n  handleClose(event) {\n    setTimeout(() => {\n      this.initWebSocket();\n    }, 5000);\n  }\n\n  processMessage(message) {\n    try {\n      if (GleapAdminManager.getInstance().initialized) {\n        return;\n      }\n\n      if (message.name === 'update') {\n        const { a, u, ai } = message.data;\n\n        const isOpened = GleapFrameManager.getInstance().isOpened();\n\n        // Apply the chatbar config BEFORE performing actions, so a notification\n        // delivered in the same update is routed with up-to-date availability.\n        // Otherwise the first post-(re)connect chatbar pill leaks to the widget\n        // because config.enabled isn't set yet when showNotification runs.\n        if (ai) {\n          GleapAiChatbarManager.getInstance().setConfig({\n            enabled: ai.e ?? false,\n            placeholder: ai.p,\n            quickActions: ai.a,\n            style: ai.s,\n            workflowId: ai.w ?? null,\n          });\n        }\n\n        if (a) {\n          const listOfActionsWhereIgnoreOpened = ['banner', 'modal'];\n          const filteredActions = a.filter(\n            (action) => !isOpened || listOfActionsWhereIgnoreOpened.includes(action?.actionType?.toLowerCase())\n          );\n\n          Gleap.getInstance().performActions(filteredActions);\n        }\n\n        if (u != null) {\n          GleapNotificationManager.getInstance().setNotificationCount(u);\n        }\n      }\n\n      if (message.name === 'checklist' && message?.data && window) {\n        const checklistData = message.data;\n        const completedSteps = checklistData.completedSteps ?? [];\n        const completedStepsBefore = checklistData.completedStepsBefore ?? [];\n        if (completedSteps.length > completedStepsBefore.length) {\n          for (let i = 0; i < completedSteps.length; i++) {\n            const step = checklistData?.steps?.find((step) => step.id === completedSteps[i]);\n            if (!step) {\n              continue;\n            }\n            const stepIndex = i;\n            if (!completedStepsBefore.includes(step)) {\n              GleapEventManager.notifyEvent('checklist-step-completed', {\n                checklistId: checklistData.id,\n                outboundId: checklistData.outboundId,\n                stepId: step.id,\n                stepIndex: stepIndex,\n                step: step,\n                completedSteps: checklistData.completedSteps,\n                status: checklistData.status,\n                data: checklistData,\n              });\n            }\n          }\n        }\n        if (checklistData.status === 'done') {\n          GleapEventManager.notifyEvent('checklist-completed', {\n            checklistId: checklistData.id,\n            outboundId: checklistData.outboundId,\n            completedSteps: checklistData.completedSteps,\n            status: checklistData.status,\n            data: checklistData,\n          });\n        }\n        if (typeof window.dispatchEvent === 'function') {\n          window.dispatchEvent(new CustomEvent('checkListUpdate', { detail: message.data }));\n        }\n      }\n    } catch (exp) {}\n  }\n\n  getEventArray() {\n    return this.eventArray;\n  }\n\n  stop() {\n    this.cleanupMainLoop();\n  }\n\n  resetErrorCountLoop() {\n    setInterval(() => {\n      this.errorCount = 0;\n    }, 60000);\n  }\n\n  cleanupMainLoop() {\n    if (this.mainLoopTimeout) {\n      clearInterval(this.mainLoopTimeout);\n      this.mainLoopTimeout = null;\n    }\n  }\n\n  restart() {\n    // Only reconnect websockets when needed.\n    if (this.connectedWebSocketGleapId !== GleapSession.getInstance().session.gleapId) {\n      this.initWebSocket();\n    }\n\n    this.cleanupMainLoop();\n    this.trackInitialEvents();\n    this.runEventStreamLoop();\n  }\n\n  start() {\n    this.startPageListener();\n    this.resetErrorCountLoop();\n  }\n\n  trackInitialEvents() {\n    GleapStreamedEvent.getInstance().logEvent('sessionStarted');\n    GleapStreamedEvent.getInstance().logCurrentPage();\n  }\n\n  logCurrentPage() {\n    if (Gleap.getInstance().disablePageTracking) {\n      return;\n    }\n\n    const currentUrl = window.location.href;\n    if (currentUrl && currentUrl !== this.lastUrl) {\n      this.lastUrl = currentUrl;\n      this.logEvent('pageView', {\n        page: currentUrl,\n      });\n    }\n  }\n\n  startPageListener() {\n    const self = this;\n    setInterval(function () {\n      self.logCurrentPage();\n    }, 1000);\n  }\n\n  logEvent(name, data) {\n    var log = {\n      name,\n      date: new Date(),\n    };\n    if (data) {\n      log.data = gleapDataParser(data);\n    }\n    this.eventArray.push(log);\n    this.streamedEventArray.push(log);\n\n    // Check max size of event log\n    if (this.eventArray.length > this.eventMaxLength) {\n      this.eventArray.shift();\n    }\n\n    // Check max size of streamed event log\n    if (this.streamedEventArray.length > this.eventMaxLength) {\n      this.streamedEventArray.shift();\n    }\n  }\n\n  runEventStreamLoop = () => {\n    const self = this;\n    this.streamEvents();\n\n    this.mainLoopTimeout = setTimeout(function () {\n      self.runEventStreamLoop();\n    }, 2500);\n  };\n\n  streamEvents = () => {\n    if (!GleapSession.getInstance().ready || this.streamingEvents || this.errorCount > 2) {\n      return;\n    }\n\n    // Nothing to stream.\n    if (this.streamedEventArray.length === 0) {\n      return;\n    }\n\n    // Sockets not connected.\n    if (!this.socket || this.socket.readyState !== this.socket.OPEN) {\n      return;\n    }\n\n    const self = this;\n    this.streamingEvents = true;\n\n    const http = new XMLHttpRequest();\n    http.open('POST', GleapSession.getInstance().apiUrl + '/sessions/events');\n    http.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');\n    GleapSession.getInstance().injectSession(http);\n    http.onerror = () => {\n      self.errorCount++;\n      self.streamingEvents = false;\n    };\n    http.onreadystatechange = function (e) {\n      if (http.readyState === 4) {\n        if (http.status === 200 || http.status === 201) {\n          self.errorCount = 0;\n        } else {\n          self.errorCount++;\n        }\n\n        self.streamingEvents = false;\n      }\n    };\n\n    const sessionDuration = GleapMetaDataManager.getInstance().getSessionDuration();\n    http.send(\n      JSON.stringify({\n        time: sessionDuration,\n        events: this.streamedEventArray,\n        opened: GleapFrameManager.getInstance().isOpened(),\n        type: 'js',\n        sdkVersion: SDK_VERSION,\n        ws: true,\n      })\n    );\n\n    this.streamedEventArray = [];\n  };\n}\n","import { loadFromGleapCache, saveToGleapCache, clearGleapCache } from './GleapHelper';\nimport Gleap, {\n  GleapFrameManager,\n  GleapFeedbackButtonManager,\n  GleapTranslationManager,\n  GleapNetworkIntercepter,\n  GleapSession,\n  GleapReplayRecorder,\n  GleapNotificationManager,\n  GleapAiChatbarManager,\n} from './Gleap';\n\nconst parseIntWithDefault = (val, def) => {\n  const parsed = parseInt(val);\n  if (isNaN(parsed)) {\n    return def;\n  }\n  return parsed;\n};\n\nexport default class GleapConfigManager {\n  flowConfig = null;\n  projectActions = null;\n  onConfigLoadedListener = [];\n  onConfigLoaded = (onConfigLoaded) => {\n    if (this.flowConfig !== null) {\n      onConfigLoaded();\n    } else {\n      this.onConfigLoadedListener.push(onConfigLoaded);\n    }\n  };\n\n  // GleapConfigManager singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapConfigManager();\n    }\n    return this.instance;\n  }\n\n  /**\n   * Returns the loaded flow config.\n   * @returns\n   */\n  getFlowConfig() {\n    return this.flowConfig;\n  }\n\n  /**\n   * Load config.\n   * @returns {string}\n   */\n  start = () => {\n    const session = GleapSession.getInstance();\n    const cachedConfig = loadFromGleapCache(\n      `config-${session.sdkKey}-${GleapTranslationManager.getInstance().getActiveLanguage()}`\n    );\n    if (cachedConfig) {\n      this.applyConfig(cachedConfig);\n      this.loadConfigFromServer().catch(function (e) {});\n      return Promise.resolve();\n    }\n\n    return this.loadConfigFromServer();\n  };\n\n  loadConfigFromServer = () => {\n    const self = this;\n    return new Promise(function (resolve, reject) {\n      const session = GleapSession.getInstance();\n      const http = new XMLHttpRequest();\n      const lang = GleapTranslationManager.getInstance().getActiveLanguage();\n      http.open('GET', session.apiUrl + '/config/' + session.sdkKey + '?lang=' + lang);\n      http.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');\n      session.injectSession(http);\n      http.onerror = function () {\n        reject();\n      };\n      http.onreadystatechange = function (e) {\n        if (http.readyState === 4) {\n          if (http.status === 403) {\n            clearGleapCache(`config-${session.sdkKey}-${lang}`);\n            Gleap.destroy();\n          }\n          if (http.status === 200 || http.status === 201) {\n            try {\n              const config = JSON.parse(http.responseText);\n              try {\n                saveToGleapCache(`config-${session.sdkKey}-${lang}`, config);\n              } catch (exp) {}\n              self.applyConfig(config);\n              return resolve();\n            } catch (e) {}\n          }\n          reject();\n        }\n      };\n      http.send();\n    });\n  };\n\n  applyStylesFromConfig() {\n    const flowConfig = this.flowConfig;\n\n    Gleap.setStyles(\n      flowConfig.color ? flowConfig.color : '#485BFF',\n      flowConfig.headerColor ? flowConfig.headerColor : '#485BFF',\n      flowConfig.buttonColor ? flowConfig.buttonColor : '#485BFF',\n      flowConfig.backgroundColor ? flowConfig.backgroundColor : '#FFFFFF',\n      parseIntWithDefault(flowConfig.borderRadius, 20),\n      parseIntWithDefault(flowConfig.buttonX, 20),\n      parseIntWithDefault(flowConfig.buttonY, 20),\n      flowConfig.feedbackButtonPosition\n    );\n  }\n\n  notifyConfigLoaded() {\n    if (this.onConfigLoadedListener.length > 0) {\n      for (var i = 0; i < this.onConfigLoadedListener.length; i++) {\n        this.onConfigLoadedListener[i]();\n      }\n    }\n    this.onConfigLoadedListener = [];\n  }\n\n  /**\n   * Applies the Gleap config.\n   * @param {*} config\n   */\n  applyConfig(config) {\n    try {\n      const flowConfig = config.flowConfig;\n      this.flowConfig = flowConfig;\n\n      // Update styles.\n      this.applyStylesFromConfig();\n\n      // Send config update.\n      GleapFrameManager.getInstance().sendConfigUpdate();\n      GleapFeedbackButtonManager.getInstance().updateFeedbackButtonState();\n      GleapNotificationManager.getInstance().updateContainerStyle();\n\n      if (flowConfig.enableWebReplays) {\n        // startIfNotRunning (not start) so re-applying the config - the cached\n        // config first, then the server refresh - doesn't wipe the rolling\n        // buffer of a recorder that was already started eagerly at init.\n        GleapReplayRecorder.getInstance().startIfNotRunning();\n      } else {\n        GleapReplayRecorder.getInstance().stop();\n      }\n\n      if (flowConfig.enableNetworkLogs) {\n        GleapNetworkIntercepter.getInstance().start();\n      }\n\n      GleapNetworkIntercepter.getInstance().setLoadAllResources(flowConfig.sendNetworkResources ? true : false);\n\n      if (flowConfig.networkLogPropsToIgnore) {\n        GleapNetworkIntercepter.getInstance().setFilters(flowConfig.networkLogPropsToIgnore);\n      }\n\n      if (flowConfig.networkLogBlacklist) {\n        GleapNetworkIntercepter.getInstance().setBlacklist(flowConfig.networkLogBlacklist);\n      }\n\n      GleapTranslationManager.getInstance().updateRTLSupport();\n\n      Gleap.enableShortcuts(flowConfig.enableShortcuts ? true : false);\n\n      if (config.aiBar) {\n        GleapAiChatbarManager.getInstance().setConfig(config.aiBar);\n      }\n\n      this.notifyConfigLoaded();\n    } catch (e) {}\n  }\n}\n","import { isMobile, resizeImage } from './GleapHelper';\nimport { isBlacklisted } from './ResourceExclusionList';\n\nexport const startScreenCapture = (isLiveSite) => {\n  return prepareScreenshotData(isLiveSite);\n};\n\nconst documentToHTML = (clone) => {\n  var html = '';\n  var node = window.document.doctype;\n  if (node) {\n    html =\n      '<!DOCTYPE ' +\n      node.name +\n      (node.publicId ? ' PUBLIC \"' + node.publicId + '\"' : '') +\n      (!node.publicId && node.systemId ? ' SYSTEM' : '') +\n      (node.systemId ? ' \"' + node.systemId + '\"' : '') +\n      '>';\n  }\n\n  if (clone && clone.childNodes && clone.childNodes.length > 0) {\n    for (var i = 0; i < clone.childNodes.length; i++) {\n      if (clone.childNodes[i]) {\n        html += clone.childNodes[i].outerHTML;\n      }\n    }\n  }\n\n  return html;\n};\n\nconst replaceAsync = (str, regex, asyncFn) => {\n  return new Promise((resolve, reject) => {\n    const promises = [];\n    str.replace(regex, (match, ...args) => {\n      const promise = asyncFn(match, ...args);\n      promises.push(promise);\n    });\n    Promise.all(promises)\n      .then((data) => {\n        resolve(str.replace(regex, () => data.shift()));\n      })\n      .catch(() => {\n        reject();\n      });\n  });\n};\n\nconst loadCSSUrlResources = (data, basePath, remote) => {\n  return replaceAsync(\n    data,\n    /url\\((.*?)\\)/g,\n    (matchedData) =>\n      new Promise((resolve, reject) => {\n        if (!matchedData) {\n          return resolve(matchedData);\n        }\n\n        var matchedUrl = matchedData\n          .substr(4, matchedData.length - 5)\n          .replaceAll(\"'\", '')\n          .replaceAll('\"', '');\n\n        // Remote file or data\n        if (matchedUrl.indexOf('http') === 0 || matchedUrl.indexOf('//') === 0 || matchedUrl.indexOf('data') === 0) {\n          return resolve(matchedData);\n        }\n\n        try {\n          var resourcePath = matchedUrl;\n          if (basePath) {\n            resourcePath = new URL(matchedUrl, basePath + '/').href;\n          }\n\n          // Try to fetch external resource.\n          if (!remote) {\n            return fetchCSSResource(resourcePath).then((resourceData) => {\n              return resolve('url(' + resourceData + ')');\n            });\n          } else {\n            return resolve('url(' + resourcePath + ')');\n          }\n        } catch (exp) {\n          return resolve(matchedData);\n        }\n      })\n  );\n};\n\nconst fetchCSSResource = (url) => {\n  return new Promise((resolve, reject) => {\n    if (url) {\n      var xhr = new XMLHttpRequest();\n      xhr.onload = function () {\n        var reader = new FileReader();\n        reader.onloadend = function () {\n          resolve(reader.result);\n        };\n        reader.onerror = function () {\n          reject();\n        };\n        reader.readAsDataURL(xhr.response);\n      };\n      xhr.onerror = function (err) {\n        resolve();\n      };\n      xhr.open('GET', url);\n      xhr.responseType = 'blob';\n      xhr.send();\n    } else {\n      resolve();\n    }\n  });\n};\n\nconst progressResource = (data, elem, resolve, reject) => {\n  resizeImage(data, 500, 500)\n    .then((data) => {\n      elem.src = data;\n      resolve();\n    })\n    .catch(() => {\n      console.warn('BB: Image resize failed.');\n      resolve();\n    });\n};\n\nconst fetchItemResource = (elem) => {\n  return new Promise((resolve, reject) => {\n    if (elem && elem.src) {\n      if (isBlacklisted(elem.src)) {\n        return resolve();\n      }\n\n      var xhr = new XMLHttpRequest();\n      xhr.onload = function () {\n        var reader = new FileReader();\n        reader.onloadend = function () {\n          progressResource(reader.result, elem, resolve, reject);\n        };\n        reader.onerror = function () {\n          resolve();\n        };\n        reader.readAsDataURL(xhr.response);\n      };\n      xhr.onerror = function (err) {\n        resolve();\n      };\n      var url = elem.src;\n      xhr.open('GET', url);\n      xhr.responseType = 'blob';\n      xhr.send();\n    } else {\n      resolve();\n    }\n  });\n};\n\nconst downloadAllImages = (dom) => {\n  const imgItems = dom.querySelectorAll('img');\n  const imgItemsPromises = [];\n  for (var i = 0; i < imgItems.length; i++) {\n    const item = imgItems[i];\n    imgItemsPromises.push(fetchItemResource(item));\n  }\n\n  return Promise.all(imgItemsPromises);\n};\n\nconst replaceStyleNodes = (clone, styleSheet, cssTextContent, styleId) => {\n  {\n    var cloneTargetNode = null;\n    if (styleSheet.ownerNode) {\n      cloneTargetNode = clone.querySelector('[bb-styleid=\"' + styleId + '\"]');\n    }\n\n    try {\n      if (cloneTargetNode) {\n        var replacementNode = null;\n        if (cssTextContent != '') {\n          // Create node.\n          const head = clone.querySelector('head');\n          var styleNode = window.document.createElement('style');\n          head.appendChild(styleNode);\n          styleNode.type = 'text/css';\n          if (styleNode.styleSheet) {\n            styleNode.styleSheet.cssText = cssTextContent;\n          } else {\n            styleNode.appendChild(window.document.createTextNode(cssTextContent));\n          }\n          replacementNode = styleNode;\n        } else {\n          var linkNode = window.document.createElement('link');\n          linkNode.rel = 'stylesheet';\n          linkNode.type = styleSheet.type;\n          linkNode.href = styleSheet.href;\n          linkNode.media = styleSheet.media;\n          replacementNode = linkNode;\n        }\n\n        if (replacementNode) {\n          cloneTargetNode.parentNode.insertBefore(replacementNode, cloneTargetNode);\n          cloneTargetNode.remove();\n        }\n      }\n    } catch (exp) {}\n  }\n};\n\nconst sanitizeCSSBraces = (css) => {\n  var result = '';\n  var depth = 0;\n  for (var i = 0; i < css.length; i++) {\n    if (css[i] === '{') {\n      depth++;\n      result += css[i];\n    } else if (css[i] === '}') {\n      if (depth > 0) {\n        depth--;\n        result += css[i];\n      }\n      // Skip stray closing braces at depth 0\n    } else {\n      result += css[i];\n    }\n  }\n  return result;\n};\n\nconst getTextContentFromStyleSheet = (styleSheet) => {\n  var cssRules = null;\n  try {\n    if (styleSheet.cssRules) {\n      cssRules = styleSheet.cssRules;\n    } else if (styleSheet.rules) {\n      cssRules = styleSheet.rules;\n    }\n  } catch (exp) {}\n\n  var cssTextContent = '';\n  if (cssRules) {\n    for (var cssRuleItem in cssRules) {\n      if (cssRules[cssRuleItem].cssText) {\n        cssTextContent += cssRules[cssRuleItem].cssText + '\\n';\n      }\n    }\n  }\n\n  return sanitizeCSSBraces(cssTextContent);\n};\n\nconst downloadAllCSSUrlResources = (clone, remote) => {\n  var promises = [];\n  for (var i = 0; i < document.styleSheets.length; i++) {\n    const styleSheet = document.styleSheets[i];\n\n    // Skip if the stylesheet is meant for print\n    if (styleSheet.media && styleSheet.media.mediaText === 'print') {\n      continue;\n    }\n\n    const cssTextContent = getTextContentFromStyleSheet(styleSheet);\n    if (styleSheet && styleSheet.ownerNode) {\n      if (cssTextContent != '') {\n        // Resolve resources.\n        const baseTags = document.getElementsByTagName('base');\n        var basePathURL = baseTags.length\n          ? baseTags[0].href.substr(location.origin.length, 999)\n          : window.location.href.split(/[?#]/)[0];\n\n        if (styleSheet.href) {\n          basePathURL = styleSheet.href;\n        }\n\n        const basePath = basePathURL.substring(0, basePathURL.lastIndexOf('/'));\n\n        promises.push(\n          loadCSSUrlResources(cssTextContent, basePath, remote).then((replacedStyle) => {\n            return {\n              styletext: replacedStyle,\n              stylesheet: styleSheet,\n              styleId: styleSheet.ownerNode.getAttribute('bb-styleid'),\n            };\n          })\n        );\n      } else {\n        promises.push(\n          Promise.resolve({\n            styletext: cssTextContent,\n            stylesheet: styleSheet,\n            styleId: styleSheet.ownerNode.getAttribute('bb-styleid'),\n          })\n        );\n      }\n    }\n  }\n\n  return Promise.all(promises).then((results) => {\n    if (results) {\n      for (var i = 0; i < results.length; i++) {\n        replaceStyleNodes(clone, results[i].stylesheet, results[i].styletext, results[i].styleId);\n      }\n    }\n    return true;\n  });\n};\n\nconst prepareRemoteData = (clone, remote) => {\n  return new Promise((resolve, reject) => {\n    if (remote) {\n      // Always download CSS.\n      return downloadAllCSSUrlResources(clone, remote)\n        .then(() => {\n          resolve();\n        })\n        .catch(() => {\n          resolve();\n        });\n    } else {\n      return downloadAllImages(clone)\n        .then(() => {\n          return downloadAllCSSUrlResources(clone, remote).then(() => {\n            resolve();\n          });\n        })\n        .catch(() => {\n          console.warn('Gleap: Failed with resolving local resources. Please contact the Gleap support team.');\n          resolve();\n        });\n    }\n  });\n};\n\nconst handleAdoptedStyleSheets = (doc, clone, shadowNodeId) => {\n  if (typeof doc.adoptedStyleSheets !== 'undefined') {\n    for (let i = 0; i < doc.adoptedStyleSheets.length; i++) {\n      const styleSheet = doc.adoptedStyleSheets[i];\n      const cssTextContent = getTextContentFromStyleSheet(styleSheet);\n\n      var shadowStyleNode = window.document.createElement('style');\n      shadowStyleNode.type = 'text/css';\n      if (shadowStyleNode.styleSheet) {\n        shadowStyleNode.styleSheet.cssText = cssTextContent;\n      } else {\n        shadowStyleNode.appendChild(window.document.createTextNode(cssTextContent));\n      }\n\n      if (shadowNodeId) {\n        shadowStyleNode.setAttribute('bb-shadow-child', shadowNodeId);\n      }\n\n      clone.insertBefore(shadowStyleNode, clone.firstElementChild);\n    }\n  }\n};\n\nconst extractFinalCSSState = (element) => {\n  if (element && typeof element.getAnimations === 'function') {\n    const animations = element.getAnimations();\n    const finalCSSState = {};\n\n    animations.forEach((animation) => {\n      const keyframes = animation.effect?.getKeyframes() || [];\n      const finalKeyframe = keyframes[keyframes.length - 1] || {};\n\n      // Extract only the keys (CSS properties) from the final keyframe\n      Object.keys(finalKeyframe).forEach((property) => {\n        if (property !== 'offset') {\n          // Store the computed style for each animated property\n          finalCSSState[property] = getComputedStyle(element)[property];\n        }\n      });\n    });\n\n    if (Object.keys(finalCSSState).length === 0) {\n      return null;\n    }\n\n    return JSON.stringify(finalCSSState);\n  }\n\n  return null;\n};\n\nconst deepClone = async (host) => {\n  let shadowNodeId = 1;\n\n  const cloneNode = async (node, parent, shadowRoot) => {\n    const walkTree = async (nextn, nextp, innerShadowRoot) => {\n      while (nextn) {\n        try {\n          await cloneNode(nextn, nextp, innerShadowRoot);\n        } catch (exp) { }\n\n        // Fix missing element nodes.\n        if (\n          nextn.nextElementSibling &&\n          (nextn.nextElementSibling.nextSibling === nextn.nextSibling || nextn.nextSibling === null)\n        ) {\n          nextn = nextn.nextElementSibling;\n        } else {\n          nextn = nextn.nextSibling;\n        }\n      }\n    };\n\n    const clone = node.cloneNode();\n\n    const webAnimations = extractFinalCSSState(node);\n    if (webAnimations != null) {\n      clone.setAttribute('bb-web-animations', webAnimations);\n    }\n\n    if (typeof clone.setAttribute !== 'undefined') {\n      if (shadowRoot) {\n        clone.setAttribute('bb-shadow-child', shadowRoot);\n      }\n\n      if (node instanceof HTMLCanvasElement) {\n        try {\n          const boundingRect = node.getBoundingClientRect();\n          const resizedImage = await resizeImage(node.toDataURL(), 1400, 1400);\n\n          clone.setAttribute('bb-canvas-data', resizedImage);\n          clone.setAttribute('bb-canvas-height', boundingRect.height);\n          clone.setAttribute('bb-canvas-width', boundingRect.width);\n        } catch (exp) {\n          console.warn('Gleap: Failed to clone canvas data.', exp);\n        }\n      }\n    }\n\n    if (node.nodeType == Node.ELEMENT_NODE) {\n      const tagName = node.tagName ? node.tagName.toUpperCase() : node.tagName;\n      if (tagName == 'IFRAME' || tagName == 'VIDEO' || tagName == 'EMBED' || tagName == 'IMG' || tagName == 'SVG') {\n        const boundingRect = node.getBoundingClientRect();\n        clone.setAttribute('bb-element', true);\n        clone.setAttribute('bb-height', boundingRect.height);\n        clone.setAttribute('bb-width', boundingRect.width);\n      }\n\n      if (node.scrollTop > 0 || node.scrollLeft > 0) {\n        clone.setAttribute('bb-scrollpos', true);\n        clone.setAttribute('bb-scrolltop', node.scrollTop);\n        clone.setAttribute('bb-scrollleft', node.scrollLeft);\n      }\n\n      if (tagName === 'SELECT' || tagName === 'TEXTAREA' || tagName === 'INPUT') {\n        var val = node.value;\n        if (node.getAttribute('gleap-ignore') === 'value' || node.classList.contains('rr-mask')) {\n          val = new Array(val.length + 1).join('*');\n        }\n\n        clone.setAttribute('bb-data-value', val);\n        if ((node.type === 'checkbox' || node.type === 'radio') && node.checked) {\n          clone.setAttribute('bb-data-checked', true);\n        }\n      }\n    }\n\n    parent.appendChild(clone);\n\n    if (node.shadowRoot) {\n      var rootShadowNodeId = shadowNodeId;\n      shadowNodeId++;\n      await walkTree(node.shadowRoot.firstChild, clone, rootShadowNodeId);\n      handleAdoptedStyleSheets(node.shadowRoot, clone, rootShadowNodeId);\n\n      if (typeof clone.setAttribute !== 'undefined') {\n        clone.setAttribute('bb-shadow-parent', rootShadowNodeId);\n      }\n    }\n\n    await walkTree(node.firstChild, clone);\n  };\n\n  const fragment = document.createDocumentFragment();\n  await cloneNode(host, fragment);\n\n  // Work on adopted stylesheets.\n  var clonedHead = fragment.querySelector('head');\n  if (!clonedHead) {\n    clonedHead = fragment;\n  }\n  handleAdoptedStyleSheets(window.document, clonedHead);\n\n  return fragment;\n};\n\nconst prepareScreenshotData = (remote) => {\n  return new Promise(async (resolve, reject) => {\n    try {\n    const styleTags = window.document.querySelectorAll('style, link');\n    for (var i = 0; i < styleTags.length; ++i) {\n      styleTags[i].setAttribute('bb-styleid', i);\n    }\n\n    const clone = await deepClone(window.document.documentElement);\n\n    // Fix for web imports (depracted).\n    const linkImportElems = clone.querySelectorAll('link[rel=import]');\n    for (var i = 0; i < linkImportElems.length; ++i) {\n      const referenceNode = linkImportElems[i];\n      if (referenceNode && referenceNode.childNodes && referenceNode.childNodes.length > 0) {\n        const childNodes = referenceNode.childNodes;\n        while (childNodes.length > 0) {\n          referenceNode.parentNode.insertBefore(childNodes[0], referenceNode);\n        }\n        referenceNode.remove();\n      }\n    }\n\n    // Remove all scripts & style\n    const scriptElems = clone.querySelectorAll('script, noscript');\n    for (var i = 0; i < scriptElems.length; ++i) {\n      scriptElems[i].remove();\n    }\n\n    // Cleanup base path\n    var existingBasePath = '';\n    const baseElems = clone.querySelectorAll('base');\n    for (var i = 0; i < baseElems.length; ++i) {\n      if (baseElems[i].href) {\n        existingBasePath = baseElems[i].href;\n      }\n      baseElems[i].remove();\n    }\n\n    // Adjust the base node\n    const baseUrl = window.location.href.substring(0, window.location.href.lastIndexOf('/'));\n    var newBaseUrl = baseUrl + '/';\n    if (existingBasePath) {\n      if (existingBasePath.startsWith('http')) {\n        // Absolute path.\n        newBaseUrl = existingBasePath;\n      } else {\n        // Relative path.\n        newBaseUrl = baseUrl + existingBasePath;\n        if (!newBaseUrl.endsWith('/')) {\n          newBaseUrl += '/';\n        }\n      }\n    }\n\n    const baseNode = window.document.createElement('base');\n    baseNode.href = newBaseUrl;\n    const head = clone.querySelector('head');\n    head.insertBefore(baseNode, head.firstChild);\n\n    // Do further cleanup.\n    const dialogElems = clone.querySelectorAll('.bb-feedback-dialog-container, .bb-capture-editor-borderlayer');\n    for (var i = 0; i < dialogElems.length; ++i) {\n      dialogElems[i].remove();\n    }\n\n    // Calculate heights\n    const bbElems = clone.querySelectorAll('[bb-element=true]');\n    for (var i = 0; i < bbElems.length; ++i) {\n      if (bbElems[i]) {\n        bbElems[i].style.height = bbElems[i].getAttribute('bb-height') + 'px';\n      }\n    }\n\n    prepareRemoteData(clone, remote).then(() => {\n      const html = documentToHTML(clone);\n\n      resolve({\n        html: html,\n        baseUrl: baseUrl,\n        width: window.innerWidth,\n        height: window.innerHeight,\n        isMobile: isMobile(),\n      });\n    });\n    } catch (exp) {\n      console.warn('Gleap: Failed to capture screenshot', exp);\n      resolve(null);\n    }\n  });\n};\n","export const isBlacklisted = function (url) {\n  const blacklist = [\n    '//fonts.googleapis.com',\n    '//cdn.jsdelivr.net',\n    '//cdnjs.cloudflare.com',\n    '//ajax.googleapis.com',\n    '//use.typekit.net',\n    '.amazonaws.com',\n    '//jssdk.gleap.io',\n    '.gstatic.com',\n  ];\n\n  if (!url) {\n    return false;\n  }\n\n  for (var i = 0; i < blacklist.length; i++) {\n    if (url.indexOf(blacklist[i]) !== -1) {\n      return true;\n    }\n  }\n  return false;\n};\n","import GleapSession from './GleapSession';\n\nexport class GleapScreenRecorder {\n  // Constants\n  static MAX_RECORD_TIME = 120; // 2 minutes\n  static MAX_WIDTH = 3072;\n  static MAX_HEIGHT = 1728;\n  static IDEAL_FRAME_RATE = 10;\n  static MAX_FRAME_RATE = 24;\n  static CHUNK_INTERVAL = 200; // milliseconds\n  static TIMER_UPDATE_INTERVAL = 1000; // milliseconds\n  static RERENDER_DELAY = 100; // milliseconds\n\n  // MIME types in order of preference\n  static MIME_TYPES = [\n    'video/webm;codecs=vp9,opus',\n    'video/webm;codecs=vp8,opus',\n    'video/webm;codecs=vp9',\n    'video/webm;codecs=vp8',\n    'video/webm',\n    'video/mp4',\n  ];\n\n  // CSS selectors\n  static SELECTORS = {\n    PREVIEW_VIDEO: '.bb-capture-preview video',\n    TIMER_LABEL: '.bb-capture-toolbar-item-timer',\n  };\n\n  // Instance properties\n  rerender;\n  stream;\n  mediaRecorder;\n  audioMuted = false;\n  audioAvailable = true;\n  available = true;\n  isRecording = false;\n  file = null;\n  maxRecordTime = GleapScreenRecorder.MAX_RECORD_TIME;\n  recordTime = 0;\n  recordingTimer = null;\n  permissionErrorText = '';\n\n  // Internals for composed capture\n  _displayVideoTrack = null;\n  _displayStream = null;\n  _micStream = null;\n\n  constructor(rerender, permissionErrorText) {\n    this.rerender = rerender;\n    this.permissionErrorText = permissionErrorText;\n    if (!navigator.mediaDevices || !navigator.mediaDevices.getDisplayMedia) {\n      this.available = false;\n    }\n\n    setTimeout(() => {\n      this.rerender();\n    }, GleapScreenRecorder.RERENDER_DELAY);\n  }\n\n  getSupportedMimeType() {\n    // Prefer explicit audio+video codecs to ensure audio gets muxed.\n    for (const type of GleapScreenRecorder.MIME_TYPES) {\n      if (window.MediaRecorder && MediaRecorder.isTypeSupported(type)) {\n        return type;\n      }\n    }\n\n    return 'video/webm';\n  }\n\n  formatTime(s) {\n    return (s - (s %= 60)) / 60 + (9 < s ? ':' : ':0') + s;\n  }\n\n  stopStreamTracks(stream) {\n    if (!stream) return;\n    try {\n      stream.getTracks().forEach((track) => track.stop());\n    } catch (_) {}\n  }\n\n  createMediaStream(tracks) {\n    const validTracks = tracks.filter((track) => track !== null);\n    return new MediaStream(validTracks);\n  }\n\n  getFirstVideoTrack(stream) {\n    if (!stream) return null;\n    const videoTracks = stream.getVideoTracks();\n    return videoTracks.length > 0 ? videoTracks[0] : null;\n  }\n\n  getFirstAudioTrack(stream) {\n    if (!stream) return null;\n    const audioTracks = stream.getAudioTracks();\n    return audioTracks.length > 0 ? audioTracks[0] : null;\n  }\n\n  async startScreenRecording() {\n    if (!navigator.mediaDevices || !navigator.mediaDevices.getDisplayMedia || this.isRecording) {\n      this.available = false;\n      this.rerender();\n      return;\n    }\n\n    try {\n      const displayStream = await navigator.mediaDevices.getDisplayMedia({\n        video: {\n          width: {\n            ideal: Math.min(window.screen.width, GleapScreenRecorder.MAX_WIDTH),\n          },\n          height: {\n            ideal: Math.min(window.screen.height, GleapScreenRecorder.MAX_HEIGHT),\n          },\n          frameRate: {\n            ideal: GleapScreenRecorder.IDEAL_FRAME_RATE,\n            max: GleapScreenRecorder.MAX_FRAME_RATE,\n          },\n          displaySurface: 'monitor',\n        },\n        audio: false,\n        selfBrowserSurface: 'include',\n      });\n\n      // Keep references to both the original stream and video track\n      this._displayStream = displayStream;\n      this._displayVideoTrack = this.getFirstVideoTrack(displayStream);\n\n      // If user wants audio and permissions allow it, get mic, else continue with video-only\n      if (!this.audioMuted) {\n        await this.startAudioRecording();\n      } else {\n        this.audioAvailable = false;\n        const composed = this.createMediaStream([this._displayVideoTrack]);\n        this.stream = composed;\n        this.handleRecord({ stream: composed });\n      }\n\n      this.rerender();\n    } catch (error) {\n      window.alert(this.permissionErrorText);\n      this.rerender();\n    }\n  }\n\n  stopScreenRecording() {\n    if (!this.mediaRecorder || !this.stream || !this.isRecording) {\n      return;\n    }\n\n    if (this.recordingTimer) {\n      clearInterval(this.recordingTimer);\n      this.recordingTimer = null;\n    }\n\n    try {\n      this.mediaRecorder.stop();\n    } catch (_) {}\n\n    // Stop composed stream tracks\n    this.stopStreamTracks(this.stream);\n\n    // Stop original display stream tracks (this is what Chrome uses for the recording indicator)\n    if (this._displayStream) {\n      this.stopStreamTracks(this._displayStream);\n      this._displayStream = null;\n    }\n\n    // Also stop original mic stream tracks if present\n    if (this._micStream) {\n      this.stopStreamTracks(this._micStream);\n      this._micStream = null;\n    }\n\n    this._displayVideoTrack = null;\n\n    this.rerender();\n  }\n\n  async startAudioRecording() {\n    if (!this._displayVideoTrack) {\n      return;\n    }\n\n    try {\n      const voiceStream = await navigator.mediaDevices.getUserMedia({\n        audio: {\n          echoCancellation: true,\n          noiseSuppression: true,\n          autoGainControl: true,\n        },\n        video: false,\n      });\n\n      this._micStream = voiceStream;\n      const micTrack = this.getFirstAudioTrack(voiceStream);\n\n      this.audioMuted = false;\n      this.audioAvailable = !!micTrack;\n\n      // Compose a NEW stream with exactly one video track + (optional) one mic track\n      const composed = this.createMediaStream([this._displayVideoTrack, micTrack]);\n\n      this.stream = composed;\n      this.handleRecord({ stream: composed });\n      this.rerender();\n    } catch (error) {\n      this.audioAvailable = false;\n\n      // Fallback to video-only if mic fails\n      const composed = this.createMediaStream([this._displayVideoTrack]);\n\n      this.stream = composed;\n      this.handleRecord({ stream: composed });\n      this.rerender();\n    }\n  }\n\n  toggleAudio() {\n    this.audioMuted = !this.audioMuted;\n    this.rerender();\n\n    if (!this.stream) {\n      return;\n    }\n\n    const audioTracks = this.stream.getAudioTracks();\n    for (let i = 0; i < audioTracks.length; i++) {\n      const audioTrack = audioTracks[i];\n      audioTrack.enabled = !this.audioMuted;\n    }\n  }\n\n  static async uploadScreenRecording(screenRecordingData) {\n    if (screenRecordingData == null) {\n      return null;\n    }\n\n    return new Promise((resolve, reject) => {\n      const xhr = new XMLHttpRequest();\n      xhr.open('POST', GleapSession.getInstance().apiUrl + '/uploads/sdk');\n      GleapSession.getInstance().injectSession(xhr);\n\n      const formData = new FormData();\n      formData.append('file', screenRecordingData);\n\n      xhr.onerror = function () {\n        reject(new Error('Network error during file upload'));\n      };\n      xhr.onreadystatechange = function () {\n        if (xhr.readyState == 4) {\n          if (xhr.status == 200) {\n            resolve(JSON.parse(xhr.response).fileUrl);\n          } else {\n            reject(new Error(`Upload failed with status ${xhr.status}`));\n          }\n        }\n      };\n      xhr.send(formData);\n    });\n  }\n\n  clearPreview() {\n    const videoEl = document.querySelector(GleapScreenRecorder.SELECTORS.PREVIEW_VIDEO);\n    if (videoEl) {\n      videoEl.src = null;\n    }\n    this.file = null;\n    this.rerender();\n  }\n\n  handleRecord({ stream }) {\n    const self = this;\n\n    const recordedChunks = [];\n    this.mediaRecorder = new MediaRecorder(stream, {\n      mimeType: this.getSupportedMimeType(),\n    });\n    this.isRecording = true;\n    this.recordTime = 0;\n\n    // Set timer (guard if label isn't present)\n    const timerLabel = document.querySelector(GleapScreenRecorder.SELECTORS.TIMER_LABEL);\n    if (this.recordingTimer) {\n      clearInterval(this.recordingTimer);\n      this.recordingTimer = null;\n    }\n    this.recordingTimer = setInterval(() => {\n      self.recordTime++;\n      const remainingTime = self.maxRecordTime - self.recordTime;\n      if (timerLabel) {\n        if (remainingTime > 0) {\n          timerLabel.innerHTML = self.formatTime(remainingTime);\n        } else {\n          timerLabel.innerHTML = '2:00';\n          self.stopScreenRecording();\n        }\n      } else if (remainingTime <= 0) {\n        self.stopScreenRecording();\n      }\n    }, GleapScreenRecorder.TIMER_UPDATE_INTERVAL);\n\n    this.mediaRecorder.ondataavailable = function (e) {\n      if (e.data && e.data.size > 0) {\n        recordedChunks.push(e.data);\n      }\n    };\n\n    const videoTrack = this.getFirstVideoTrack(stream);\n    if (videoTrack) {\n      videoTrack.onended = function () {\n        self.prepareRecording(recordedChunks);\n      };\n    }\n\n    this.mediaRecorder.onstop = function () {\n      self.prepareRecording(recordedChunks);\n    };\n\n    // Start recording with configured chunk interval\n    this.mediaRecorder.start(GleapScreenRecorder.CHUNK_INTERVAL);\n\n    self.rerender();\n  }\n\n  prepareRecording(recordedChunks) {\n    const mimeType = this.getSupportedMimeType();\n    const completeBlob = new Blob(recordedChunks, { type: mimeType });\n\n    const extension = mimeType.includes('mp4') ? 'mp4' : 'webm';\n    this.file = new File([completeBlob], `screen-recording.${extension}`, {\n      type: mimeType,\n    });\n\n    const previewVideoElement = document.querySelector(GleapScreenRecorder.SELECTORS.PREVIEW_VIDEO);\n    if (previewVideoElement) {\n      previewVideoElement.src = URL.createObjectURL(completeBlob);\n      this.audioAvailable = this.stream ? this.stream.getAudioTracks().length > 0 : this.audioAvailable;\n      this.isRecording = false;\n      this.rerender();\n    }\n  }\n}\n","import { startScreenCapture } from './ScreenCapture';\nimport { GleapScreenRecorder } from './GleapScreenRecorder';\nimport Gleap, {\n  GleapConsoleLogManager,\n  GleapStreamedEvent,\n  GleapSession,\n  GleapCustomDataManager,\n  GleapMetaDataManager,\n  GleapNetworkIntercepter,\n  GleapTagManager,\n} from './Gleap';\n\nexport default class GleapFeedback {\n  excludeData = {};\n  type = 'BUG';\n  priority = 'LOW';\n  customData = {};\n  ticketAttributes = {};\n  metaData = {};\n  consoleLog = [];\n  networkLogs = [];\n  customEventLog = [];\n  formData = {};\n  isSilent = false;\n  outboundId = undefined;\n  screenshotData = undefined;\n  webReplay = undefined;\n  screenRecordingUrl = undefined;\n  spamToken = undefined;\n\n  constructor(type, priority, formData, isSilent, excludeData, outboundId, spamToken) {\n    this.type = type;\n    this.priority = priority;\n    this.formData = formData;\n    this.isSilent = isSilent;\n    this.excludeData = excludeData;\n    this.outboundId = outboundId;\n    this.spamToken = spamToken;\n  }\n\n  takeSnapshot() {\n    const gleapInstance = Gleap.getInstance();\n    this.customData = GleapCustomDataManager.getInstance().getCustomData();\n    this.metaData = GleapMetaDataManager.getInstance().getMetaData();\n    this.consoleLog = GleapConsoleLogManager.getInstance().getLogs();\n    this.networkLogs = GleapNetworkIntercepter.getInstance().getRequests();\n    this.customEventLog = GleapStreamedEvent.getInstance().getEventArray();\n    this.ticketAttributes = GleapCustomDataManager.getInstance().getTicketAttributes();\n\n    var dataPromises = [];\n\n    // Assign replays\n    var webReplay = gleapInstance.getGlobalDataItem('webReplay');\n    if (webReplay !== null) {\n      this.webReplay = webReplay;\n    }\n\n    // Prepare screen recording\n    var screenRecordingData = gleapInstance.getGlobalDataItem('screenRecordingData');\n    if (screenRecordingData != null) {\n      var recordingUrlPromise = GleapScreenRecorder.uploadScreenRecording(screenRecordingData).then((recordingUrl) => {\n        if (recordingUrl) {\n          this.screenRecordingUrl = recordingUrl;\n        }\n      });\n      dataPromises.push(recordingUrlPromise);\n    }\n\n    // Prepare screenshot\n    if (!(this.excludeData && this.excludeData.screenshot)) {\n      var screenshotDataPromise = startScreenCapture(gleapInstance.isLiveMode()).then((screenshotData) => {\n        if (screenshotData) {\n          const snapshotPosition = gleapInstance.getGlobalDataItem('snapshotPosition');\n          screenshotData['x'] = snapshotPosition.x;\n          screenshotData['y'] = snapshotPosition.y;\n          this.screenshotData = screenshotData;\n        }\n      });\n      dataPromises.push(screenshotDataPromise);\n    }\n\n    return Promise.all(dataPromises);\n  }\n\n  getData() {\n    var feedbackData = {\n      type: this.type,\n      priority: this.priority,\n      customData: this.customData,\n      metaData: this.metaData,\n      consoleLog: this.consoleLog,\n      networkLogs: this.networkLogs,\n      customEventLog: this.customEventLog,\n      // Merge ticket attributes and form data.\n      formData: {\n        ...this.ticketAttributes,\n        ...this.formData,\n      },\n      isSilent: this.isSilent,\n      outbound: this.outboundId,\n      screenshotData: this.screenshotData,\n      webReplay: this.webReplay,\n      screenRecordingUrl: this.screenRecordingUrl,\n      spamToken: this.spamToken,\n    };\n\n    const tags = GleapTagManager.getInstance().getTags();\n    if (tags && tags.length > 0) {\n      feedbackData.tags = tags;\n    }\n\n    if (this.excludeData) {\n      const keysToExclude = Object.keys(this.excludeData);\n      for (let i = 0; i < keysToExclude.length; i++) {\n        const keyToExclude = keysToExclude[i];\n        if (this.excludeData[keyToExclude] === true) {\n          if (feedbackData[keyToExclude]) {\n            delete feedbackData[keyToExclude];\n          }\n\n          if (keyToExclude === 'screenshot') {\n            delete feedbackData.screenshotData;\n          }\n\n          if (keyToExclude === 'replays') {\n            delete feedbackData.webReplay;\n          }\n        }\n      }\n    }\n\n    return feedbackData;\n  }\n\n  getTicketData() {\n    return new Promise((resolve, reject) => {\n      this.takeSnapshot()\n        .then(() => {\n          const dataToSend = this.getData();\n          resolve(dataToSend);\n        })\n        .catch((exp) => {\n          console.log('Failed to take snapshot', exp);\n          reject();\n        });\n    });\n  }\n\n  sendFeedback() {\n    return new Promise((resolve, reject) => {\n      this.takeSnapshot()\n        .then(() => {\n          const dataToSend = this.getData();\n\n          const http = new XMLHttpRequest();\n          http.open('POST', GleapSession.getInstance().apiUrl + '/bugs/v2');\n          http.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');\n          GleapSession.getInstance().injectSession(http);\n          http.onerror = (error) => {\n            reject();\n          };\n          http.onreadystatechange = function (e) {\n            if (http.readyState === 4) {\n              if (http.status === 200 || http.status === 201) {\n                try {\n                  const feedback = JSON.parse(http.responseText);\n                  resolve(feedback);\n                } catch (exp) {\n                  reject();\n                }\n              } else {\n                reject();\n              }\n            }\n          };\n          http.send(JSON.stringify(dataToSend));\n        })\n        .catch((exp) => {\n          console.log('Failed to take snapshot', exp);\n          reject();\n        });\n    });\n  }\n}\n","import Gleap from './Gleap';\n\nexport default class GleapEventManager {\n  eventListeners = {};\n\n  // GleapEventManager singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapEventManager();\n    }\n    return this.instance;\n  }\n\n  /**\n   * Notify all registrants for event.\n   */\n  static notifyEvent(event, data = {}) {\n    if (event === 'flow-started') {\n      const gleapInstance = Gleap.getInstance();\n      gleapInstance.setGlobalDataItem('webReplay', null);\n      gleapInstance.setGlobalDataItem('screenRecordingData', null);\n      gleapInstance.takeCurrentReplay();\n    }\n\n    const eventListeners = this.getInstance().eventListeners[event];\n    if (eventListeners) {\n      for (var i = 0; i < eventListeners.length; i++) {\n        const eventListener = eventListeners[i];\n        if (eventListener) {\n          eventListener(data);\n        }\n      }\n    }\n  }\n\n  /**\n   * Register events for Gleap.\n   * @param {*} eventName\n   * @param {*} callback\n   */\n  static on(eventName, callback) {\n    const instance = this.getInstance();\n    if (!instance.eventListeners[eventName]) {\n      instance.eventListeners[eventName] = [];\n    }\n    instance.eventListeners[eventName].push(callback);\n  }\n}\n","import GleapEventManager from './GleapEventManager';\n\n/**\n * Manages agent tool definitions and tool execution callbacks.\n * Shared across chatbar, messenger, and any future agent surface.\n */\nexport default class GleapAgentToolManager {\n  agentTools = [];\n  agentToolCallbacks = [];\n  registeredAgentTools = {};\n  runningToolExecutions = {};\n\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapAgentToolManager();\n    }\n    return this.instance;\n  }\n\n  /**\n   * Set frontend-side tool definitions for AI agents.\n   */\n  setAgentTools(tools) {\n    this.agentTools = tools || [];\n  }\n\n  /**\n   * Get the current tool definitions.\n   */\n  getAgentTools() {\n    return this.agentTools;\n  }\n\n  /**\n   * @deprecated Use registerAgentTool(name, handler) with a dashboard-defined\n   * Frontend tool instead. Register a callback for agent tool executions.\n   */\n  registerAgentToolAction(callback) {\n    if (callback) {\n      this.agentToolCallbacks.push(callback);\n    }\n  }\n\n  /**\n   * Register the handler for a dashboard-defined Frontend tool. The agent\n   * calls it with the configured parameters and waits for the return value.\n   */\n  registerAgentTool(name, handler) {\n    if (name && typeof handler === 'function') {\n      this.registeredAgentTools[name] = handler;\n    }\n  }\n\n  /**\n   * Execute a registered Frontend tool handler. Always resolves with a\n   * result string — missing handlers and thrown errors become error\n   * messages for the AI instead of leaving it waiting.\n   *\n   * Deduped by toolCallId: the widget and the AI chatbar are separate\n   * frames on the same session channel, so both can request the same\n   * execution — the handler must only run once.\n   */\n  executeToolAction({ toolCallId, name, params }) {\n    if (toolCallId && this.runningToolExecutions[toolCallId]) {\n      return this.runningToolExecutions[toolCallId];\n    }\n\n    const execution = this._runToolAction({ toolCallId, name, params });\n    if (toolCallId) {\n      this.runningToolExecutions[toolCallId] = execution;\n    }\n    return execution;\n  }\n\n  async _runToolAction({ toolCallId, name, params }) {\n    const handler = this.registeredAgentTools[name];\n    let result;\n\n    if (!handler) {\n      result = `No handler registered for tool '${name}' in the app. Register one via Gleap.registerAgentTool('${name}', handler).`;\n    } else {\n      try {\n        const handlerResult = await handler(params ?? {});\n        result = typeof handlerResult === 'string' ? handlerResult : JSON.stringify(handlerResult ?? '');\n        if (!result) {\n          result = 'The action completed without returning a result.';\n        }\n      } catch (error) {\n        result = `Tool execution failed: ${error?.message ?? 'unknown error'}`;\n      }\n    }\n\n    GleapEventManager.notifyEvent('agent-tool-executed', {\n      name,\n      params: params ?? {},\n      result,\n      toolCallId,\n    });\n\n    return { toolCallId, name, result };\n  }\n\n  /**\n   * Called when a tool execution event is received from any surface\n   * (chatbar, messenger, etc.). Emits the event and triggers all callbacks.\n   */\n  triggerToolAction(data) {\n    if (!data) return;\n\n    GleapEventManager.notifyEvent('agent-tool-executed', data);\n\n    for (const cb of this.agentToolCallbacks) {\n      try {\n        cb(data);\n      } catch (e) {}\n    }\n  }\n}\n","import Gleap, {\n  GleapAudioManager,\n  GleapBannerManager,\n  GleapConfigManager,\n  GleapConsoleLogManager,\n  GleapCustomActionManager,\n  GleapCustomDataManager,\n  GleapEventManager,\n  GleapFeedback,\n  GleapFeedbackButtonManager,\n  GleapMarkerManager,\n  GleapMetaDataManager,\n  GleapNetworkIntercepter,\n  GleapNotificationManager,\n  GleapSession,\n  GleapStreamedEvent,\n  GleapTagManager,\n  GleapTranslationManager,\n} from './Gleap';\nimport GleapAgentToolManager from './GleapAgentToolManager';\nimport { bootstrapGleapFrame, runFunctionWhenDomIsReady } from './GleapHelper';\nimport { widgetMaxHeight } from './UI';\n\nexport default class GleapFrameManager {\n  frameUrl = 'https://messenger-app.gleap.io';\n  gleapFrameContainer = null;\n  gleapFrame = null;\n  comReady = false;\n  injectedFrame = false;\n  widgetOpened = false;\n  listeners = [];\n  appMode = 'widget';\n  markerManager = undefined;\n  escListener = undefined;\n  frameHeight = 0;\n  sendingFeedback = false;\n  queue = [];\n  urlHandler = function (url, newTab) {\n    if (url && url.length > 0) {\n      if (newTab) {\n        const newWindow = window.open(url, '_blank');\n        if (newWindow) {\n          newWindow.focus();\n        }\n      } else {\n        window.location.href = url;\n      }\n    }\n  };\n\n  // GleapFrameManager singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapFrameManager();\n    }\n    return this.instance;\n  }\n\n  constructor() {\n    this.startCommunication();\n    if (typeof window !== 'undefined') {\n      function appHeight() {\n        try {\n          const doc = document.documentElement;\n          doc.style.setProperty('--glvh', window.innerHeight * 0.01 + 'px');\n        } catch (e) {}\n      }\n\n      try {\n        window.addEventListener('resize', appHeight);\n        appHeight();\n      } catch (e) {}\n    }\n  }\n\n  setUrlHandler(handler) {\n    this.urlHandler = handler;\n  }\n\n  isSurvey() {\n    return this.appMode === 'survey' || this.appMode === 'survey_full' || this.appMode === 'survey_web';\n  }\n\n  setAppMode(appMode) {\n    this.appMode = appMode;\n    this.updateFrameStyle();\n\n    const innerContainer = document.querySelector('.gleap-frame-container-inner');\n    if ((this.appMode === 'widget' || this.appMode === 'survey_full' || this.appMode === 'survey_web') && innerContainer) {\n      innerContainer.style.maxHeight = `${widgetMaxHeight}px`;\n    }\n  }\n\n  registerEscListener() {\n    if (this.escListener) {\n      return;\n    }\n\n    this.escListener = (evt) => {\n      evt = evt || window.event;\n      if (evt.key === 'Escape') {\n        // If an image lightbox is open, close it first instead of hiding the widget.\n        // Only on a subsequent Escape press (no lightbox left) the widget closes.\n        const imageViews = document.querySelectorAll('.gleap-image-view');\n        if (imageViews.length > 0) {\n          imageViews[imageViews.length - 1].remove();\n          return;\n        }\n        this.hideWidget();\n      }\n    };\n    document.addEventListener('keydown', this.escListener);\n  }\n\n  unregisterEscListener() {\n    if (this.escListener) {\n      document.removeEventListener('keydown', this.escListener);\n      this.escListener = null;\n    }\n  }\n\n  destroy() {\n    if (this.gleapFrame) {\n      this.gleapFrame.remove();\n    }\n    if (this.gleapFrameContainer) {\n      this.gleapFrameContainer.remove();\n    }\n    this.injectedFrame = false;\n    this.widgetOpened = false;\n    this.markerManager = undefined;\n    this.gleapFrameContainer = null;\n    this.gleapFrame = null;\n  }\n\n  isOpened() {\n    return this.widgetOpened || this.markerManager != null;\n  }\n\n  autoWhiteListCookieManager = () => {\n    if (window && window.cmp_block_ignoredomains) {\n      window.cmp_block_ignoredomains.concat(['messenger-app.gleap.io']);\n    }\n  };\n\n  injectFrame = () => {\n    if (this.injectedFrame) {\n      return;\n    }\n    this.injectedFrame = true;\n\n    this.autoWhiteListCookieManager();\n\n    // Inject the frame manager after it has been loaded.\n    runFunctionWhenDomIsReady(() => {\n      GleapConfigManager.getInstance().onConfigLoaded(() => {\n        // Apply CSS.\n        GleapConfigManager.getInstance().applyStylesFromConfig();\n\n        // Inject widget HTML.\n        // The iframe is created WITHOUT a src attribute so it becomes an about:blank document\n        // that inherits the parent page's origin. This avoids Safari ITP throttling iframes\n        // to classified tracker domains. The actual messenger app is then bootstrapped into the\n        // iframe via doc.write (see bootstrapGleapFrame in GleapHelper.js). If bootstrapping\n        // fails (e.g. CORS not available on the frameUrl), the helper falls back to direct\n        // src loading, preserving the original behavior.\n        var elem = document.createElement('div');\n        elem.className = 'gleap-frame-container gleap-frame-container--hidden rr-block';\n        elem.innerHTML = `<div class=\"gleap-frame-container-inner\"><iframe class=\"gleap-frame\" scrolling=\"yes\" allow=\"autoplay; encrypted-media; fullscreen; microphone *; display-capture *; camera *;\" frameborder=\"0\"></iframe></div>`;\n        document.body.appendChild(elem);\n\n        this.gleapFrameContainer = elem;\n        this.gleapFrame = document.querySelector('.gleap-frame');\n\n        // Bootstrap the iframe content from the Gleap origin via about:blank + doc.write.\n        bootstrapGleapFrame(this.gleapFrame, this.frameUrl);\n\n        this.updateFrameStyle();\n\n        // Show loading preview for widget app mode.\n        if (this.appMode === 'widget') {\n          this.showFrameContainer(true);\n        }\n      });\n    });\n  };\n\n  showImage = (url) => {\n    runFunctionWhenDomIsReady(() => {\n      var elem = document.createElement('div');\n      elem.className = 'gleap-image-view';\n      // Make the overlay focusable so we can pull keyboard focus out of the\n      // messenger iframe. Without this, Escape is handled inside the iframe and\n      // closes the whole widget instead of just the image lightbox.\n      elem.setAttribute('tabindex', '-1');\n      elem.innerHTML = `<div class=\"gleap-image-view-close\">\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path d=\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm97.9-320l-17 17-47 47 47 47 17 17L320 353.9l-17-17-47-47-47 47-17 17L158.1 320l17-17 47-47-47-47-17-17L192 158.1l17 17 47 47 47-47 17-17L353.9 192z\"/></svg>\n      </div><img class=\"gleap-image-view-image\" src=\"${url}\" />`;\n      document.body.appendChild(elem);\n\n      const closeElement = () => {\n        document.removeEventListener('keydown', keyListener, true);\n        elem.remove();\n      };\n\n      // Close only the image on Escape and stop the event so neither the\n      // widget's own Escape handler nor the iframe's handler closes the widget.\n      // The next Escape press (no lightbox open) then closes the widget.\n      const keyListener = (e) => {\n        if (e.key === 'Escape') {\n          e.preventDefault();\n          e.stopPropagation();\n          closeElement();\n        }\n      };\n      document.addEventListener('keydown', keyListener, true);\n\n      const close = elem.querySelector('.gleap-image-view-close');\n      close.addEventListener('click', () => {\n        closeElement();\n      });\n\n      elem.addEventListener('click', (e) => {\n        if (e.target === elem) {\n          closeElement();\n        }\n      });\n\n      // Move keyboard focus to the overlay (out of the messenger iframe) so the\n      // Escape key is captured here and closes the image, not the widget.\n      try {\n        elem.focus({ preventScroll: true });\n      } catch (e) {\n        elem.focus();\n      }\n    });\n  };\n\n  updateFrameStyle = () => {\n    if (!this.gleapFrameContainer) {\n      return;\n    }\n\n    const surveyStyle = 'gleap-frame-container--survey';\n    const extendedStyle = 'gleap-frame-container--extended';\n    const surveyFullStyle = 'gleap-frame-container--survey-full';\n    const classicStyle = 'gleap-frame-container--classic';\n    const classicStyleLeft = 'gleap-frame-container--classic-left';\n    const modernStyleLeft = 'gleap-frame-container--modern-left';\n    const noButtonStyleLeft = 'gleap-frame-container--no-button';\n    const allStyles = [\n      classicStyle,\n      classicStyleLeft,\n      extendedStyle,\n      modernStyleLeft,\n      noButtonStyleLeft,\n      surveyStyle,\n      surveyFullStyle,\n    ];\n    for (let i = 0; i < allStyles.length; i++) {\n      this.gleapFrameContainer.classList.remove(allStyles[i]);\n    }\n\n    var styleToApply = undefined;\n    const flowConfig = GleapConfigManager.getInstance().getFlowConfig();\n    if (\n      flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_CLASSIC ||\n      flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_CLASSIC_BOTTOM\n    ) {\n      styleToApply = classicStyle;\n    }\n    if (flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_CLASSIC_LEFT) {\n      styleToApply = classicStyleLeft;\n    }\n    if (flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_BOTTOM_LEFT) {\n      styleToApply = modernStyleLeft;\n    }\n    if (GleapFeedbackButtonManager.getInstance().buttonHidden === null) {\n      if (flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_NONE) {\n        styleToApply = noButtonStyleLeft;\n      }\n    } else {\n      if (GleapFeedbackButtonManager.getInstance().buttonHidden) {\n        styleToApply = noButtonStyleLeft;\n      }\n    }\n    if (styleToApply) {\n      this.gleapFrameContainer.classList.add(styleToApply);\n    }\n\n    if (this.appMode === 'survey') {\n      this.gleapFrameContainer.classList.add(surveyStyle);\n    }\n    if (this.appMode === 'survey_full' || this.appMode === 'survey_web') {\n      this.gleapFrameContainer.classList.add(surveyFullStyle);\n    }\n    if (this.appMode === 'extended') {\n      this.gleapFrameContainer.classList.add(extendedStyle);\n    }\n\n    this.gleapFrameContainer.setAttribute('dir', GleapTranslationManager.getInstance().isRTLLayout ? 'rtl' : 'ltr');\n  };\n\n  showFrameContainer(showLoader) {\n    if (!this.gleapFrameContainer) {\n      return;\n    }\n\n    const flowConfig = GleapConfigManager.getInstance().getFlowConfig();\n    const loadingClass = 'gleap-frame-container--loading';\n    if (this.gleapFrameContainer?.classList) {\n      this.gleapFrameContainer.classList.remove('gleap-frame-container--hidden');\n      if (showLoader) {\n        this.gleapFrameContainer.classList.add(loadingClass);\n\n        if (flowConfig && flowConfig.disableBGFade) {\n          this.gleapFrameContainer.classList.add('gleap-frame-container--loading-nofade');\n        }\n        if (flowConfig && flowConfig.disableBGGradient) {\n          this.gleapFrameContainer.classList.add('gleap-frame-container--loading-nogradient');\n        }\n      } else {\n        this.gleapFrameContainer.classList.remove(loadingClass);\n      }\n\n      setTimeout(() => {\n        this.gleapFrameContainer?.classList.add('gleap-frame-container--animate');\n      }, 500);\n    }\n\n    this.widgetOpened = true;\n    this.updateUI();\n  }\n\n  runWidgetShouldOpenCallback() {\n    if (!this.gleapFrameContainer) {\n      return;\n    }\n\n    this.workThroughQueue();\n\n    Gleap.getInstance().setGlobalDataItem('snapshotPosition', {\n      x: window.scrollX,\n      y: window.scrollY,\n    });\n\n    this.showFrameContainer(false);\n    this.updateWidgetStatus();\n\n    GleapEventManager.notifyEvent('open');\n    this.registerEscListener();\n  }\n\n  updateUI() {\n    // Clear notifications only when not opening a survey.\n    GleapNotificationManager.getInstance().clearAllNotifications(this.isSurvey());\n\n    GleapFeedbackButtonManager.getInstance().updateNotificationBadge(0);\n    GleapFeedbackButtonManager.getInstance().updateFeedbackButtonState();\n  }\n\n  showWidget() {\n    setTimeout(() => {\n      if (this.gleapFrameContainer) {\n        this.runWidgetShouldOpenCallback();\n      } else {\n        GleapFrameManager.getInstance().injectFrame();\n      }\n      this.updateUI();\n    }, 0);\n  }\n\n  updateWidgetStatus() {\n    this.sendMessage({\n      name: 'widget-status-update',\n      data: {\n        isWidgetOpen: this.widgetOpened,\n      },\n    });\n  }\n\n  hideMarkerManager() {\n    if (this.markerManager) {\n      this.markerManager.clear();\n      this.markerManager = null;\n    }\n  }\n\n  hideWidget(resetRoutes = false) {\n    // Prevent for survey web.\n    if (this.appMode === 'survey_web') {\n      return;\n    }\n\n    this.hideMarkerManager();\n    if (this.gleapFrameContainer) {\n      this.gleapFrameContainer.classList.add('gleap-frame-container--hidden');\n      this.gleapFrameContainer.classList.remove('gleap-frame-container--animate');\n    }\n    if (resetRoutes) {\n      this.sendMessage({\n        name: 'reset-routes',\n        data: {},\n      });\n    }\n    this.widgetOpened = false;\n    this.updateWidgetStatus();\n    GleapFeedbackButtonManager.getInstance().updateFeedbackButtonState();\n    GleapEventManager.notifyEvent('close');\n    GleapNotificationManager.getInstance().reloadNotificationsFromCache();\n\n    this.unregisterEscListener();\n\n    if (typeof window !== 'undefined' && typeof window.focus !== 'undefined') {\n      window.focus();\n    }\n  }\n\n  sendMessage(data, queue = false) {\n    try {\n      this.gleapFrame = document.querySelector('.gleap-frame');\n      if (this.comReady && this.gleapFrame && this.gleapFrame.contentWindow) {\n        this.gleapFrame.contentWindow.postMessage(JSON.stringify(data), '*');\n      } else {\n        if (queue) {\n          this.queue.push(data);\n        }\n      }\n    } catch (e) {}\n  }\n\n  sendSessionUpdate() {\n    this.sendMessage({\n      name: 'session-update',\n      data: {\n        sessionData: GleapSession.getInstance().getSession(),\n        apiUrl: GleapSession.getInstance().apiUrl,\n        sdkKey: GleapSession.getInstance().sdkKey,\n      },\n    });\n  }\n\n  sendConfigUpdate() {\n    if (!this.comReady) {\n      return;\n    }\n\n    this.sendMessage({\n      name: 'config-update',\n      data: {\n        config: GleapConfigManager.getInstance().getFlowConfig(),\n        aiTools: GleapAgentToolManager.getInstance().getAgentTools(),\n        agentTools: GleapAgentToolManager.getInstance().getAgentTools(),\n        overrideLanguage: GleapTranslationManager.getInstance().getOverrideLanguage(),\n      },\n    });\n\n    this.updateFrameStyle();\n  }\n\n  showDrawingScreen(type) {\n    this.hideWidget();\n\n    // Show screen drawing.\n    this.markerManager = new GleapMarkerManager(type);\n    this.markerManager.show((success) => {\n      if (!success) {\n        this.hideMarkerManager();\n      }\n      this.showWidget();\n    });\n  }\n\n  workThroughQueue() {\n    const workQueue = [...this.queue];\n    this.queue = [];\n    for (let i = 0; i < workQueue.length; i++) {\n      this.sendMessage(workQueue[i], true);\n    }\n  }\n\n  startCommunication() {\n    // Listen for messages.\n    this.addMessageListener((data) => {\n      if (data.name === 'ping') {\n        this.comReady = true;\n        this.sendConfigUpdate();\n        this.sendSessionUpdate();\n        this.workThroughQueue();\n        setTimeout(() => {\n          this.runWidgetShouldOpenCallback();\n        }, 300);\n      }\n\n      if (data.name === 'play-ping') {\n        GleapAudioManager.ping();\n      }\n\n      if (data.name === 'open-image') {\n        this.showImage(data.data.url);\n      }\n\n      if (data.name === 'page-changed') {\n        if (data.data && (data.data.name === 'newsdetails' || data.data.name === 'appextended')) {\n          this.setAppMode('extended');\n        } else {\n          if (this.appMode === 'extended') {\n            this.setAppMode('widget');\n          }\n        }\n      }\n\n      if (data.name === 'collect-ticket-data') {\n        this.gleapFrame = document.querySelector('.gleap-frame');\n        this.answerCollectTicketData(this.gleapFrame, data);\n      }\n\n      if (data.name === 'height-update') {\n        this.frameHeight = data.data;\n\n        const innerContainer = document.querySelector('.gleap-frame-container-inner');\n        if (\n          (this.appMode === 'survey' || this.appMode === 'survey_full' || this.appMode === 'survey_web') &&\n          innerContainer\n        ) {\n          innerContainer.style.maxHeight = `${this.frameHeight}px`;\n        }\n      }\n\n      if (data.name === 'notify-event') {\n        GleapEventManager.notifyEvent(data.data.type, data.data.data);\n      }\n\n      if (data.name === 'cleanup-drawings') {\n        this.hideMarkerManager();\n      }\n\n      if (data.name === 'open-url') {\n        const url = data.data;\n        const newTab = data.newTab ? true : false;\n        this.urlHandler(url, newTab);\n      }\n\n      if (data.name === 'start-product-tour') {\n        Gleap.startProductTour(data.data?.tourId, true);\n      }\n\n      if (data.name === 'run-custom-action') {\n        GleapCustomActionManager.triggerCustomAction(data.data, {\n          shareToken: data.shareToken,\n        });\n      }\n\n      if (data.name === 'close-widget') {\n        this.hideWidget();\n      }\n\n      if (data.name === 'video-call-joined') {\n        GleapFeedbackButtonManager.getInstance().showingRedDot = true;\n        GleapFeedbackButtonManager.getInstance().updateRedDot(true);\n      }\n\n      if (data.name === 'video-call-left') {\n        GleapFeedbackButtonManager.getInstance().showingRedDot = false;\n        GleapFeedbackButtonManager.getInstance().updateRedDot(false);\n      }\n\n      if (data.name === 'tool-execution') {\n        GleapEventManager.notifyEvent('tool-execution', data.data);\n        GleapAgentToolManager.getInstance().triggerToolAction(data.data);\n      }\n\n      // Frontend tool execution request: run the registered handler and\n      // return its result to the frame, which delivers it to the agent.\n      if (data.name === 'frontend-tool-execute' && data.data) {\n        GleapAgentToolManager.getInstance()\n          .executeToolAction(data.data)\n          .then((result) => {\n            this.sendMessage({\n              name: 'frontend-tool-result',\n              data: result,\n            });\n          });\n      }\n\n      if (data.name === 'checklist-loaded') {\n        const checklistData = data.data;\n        GleapEventManager.notifyEvent('checklist-loaded', {\n          checklistId: checklistData.id,\n          outboundId: checklistData.outbound?.id,\n          completedSteps: checklistData.completedSteps,\n          status: checklistData.status,\n          data: checklistData,\n        });\n      }\n\n      if (data.name === 'checklist-step-completed') {\n        const { checklistData, step, index } = data.data;\n        GleapEventManager.notifyEvent('checklist-step-completed', {\n          checklistId: checklistData.id,\n          outboundId: checklistData.outbound?.id,\n          stepId: step.id,\n          stepIndex: index,\n          step: step,\n          completedSteps: checklistData.completedSteps,\n          status: checklistData.status,\n          data: checklistData,\n        });\n      }\n\n      if (data.name === 'checklist-completed') {\n        const checklistData = data.data;\n        GleapEventManager.notifyEvent('checklist-completed', {\n          checklistId: checklistData.id,\n          outboundId: checklistData.outbound?.id,\n          completedSteps: checklistData.completedSteps,\n          status: checklistData.status,\n          data: checklistData,\n        });\n      }\n\n      if (data.name === 'send-feedback') {\n        if (this.sendingFeedback) {\n          return;\n        }\n\n        this.sendingFeedback = true;\n\n        const formData = data.data.formData;\n        const action = data.data.action;\n        const outboundId = data.data.outboundId;\n        const spamToken = data.data.spamToken;\n\n        const feedback = new GleapFeedback(\n          action.feedbackType,\n          'MEDIUM',\n          formData,\n          false,\n          action.excludeData,\n          outboundId,\n          spamToken\n        );\n        feedback\n          .sendFeedback()\n          .then((feedbackData) => {\n            setTimeout(() => {\n              this.sendingFeedback = false;\n            }, 1000);\n\n            this.sendMessage({\n              name: 'feedback-sent',\n              data: feedbackData,\n            });\n            GleapEventManager.notifyEvent('feedback-sent', formData);\n\n            if (outboundId && outboundId.length > 0) {\n              GleapEventManager.notifyEvent('outbound-sent', {\n                outboundId: outboundId,\n                outbound: action,\n                formData: formData,\n              });\n\n              try {\n                delete formData.reportedBy;\n              } catch (e) {}\n              Gleap.trackEvent(`outbound-${outboundId}-submitted`, formData);\n            }\n          })\n          .catch((error) => {\n            setTimeout(() => {\n              this.sendingFeedback = false;\n\n              this.sendMessage({\n                name: 'feedback-sending-failed',\n                data: 'Something went wrong, please try again.',\n              });\n              GleapEventManager.notifyEvent('error-while-sending');\n            }, 1000);\n          });\n      }\n\n      if (data.name === 'start-screen-drawing') {\n        this.showDrawingScreen(data.data);\n      }\n    });\n\n    // Add window message listener.\n    // With about:blank bootstrapping, the iframe inherits the parent's origin, so event.origin\n    // is no longer the Gleap frameUrl — it's the customer site's origin. We verify the message\n    // source via event.source (iframe.contentWindow) instead. For backwards compatibility with\n    // the legacy src-loaded iframe (fallback case), we also accept the original frameUrl origin.\n    window.addEventListener('message', (event) => {\n      const bannerManager = GleapBannerManager.getInstance();\n      const bannerFrame = bannerManager.bannerContainer\n        ? bannerManager.bannerContainer.querySelector('.gleap-b-frame')\n        : null;\n\n      const sourceMatchesGleapFrame = this.gleapFrame && event.source === this.gleapFrame.contentWindow;\n      const sourceMatchesBannerFrame = bannerFrame && event.source === bannerFrame.contentWindow;\n      const originMatchesGleapFrame = event.origin === this.frameUrl;\n      const originMatchesBannerFrame = event.origin === bannerManager.bannerUrl;\n\n      if (!sourceMatchesGleapFrame && !sourceMatchesBannerFrame && !originMatchesGleapFrame && !originMatchesBannerFrame) {\n        return;\n      }\n\n      try {\n        const data = JSON.parse(event.data);\n\n        // Outbound-media iframes (banner, modal, chatbar, agent-conversation) share the\n        // outboundmedia.gleap.io origin and each has its own manager. They tag messages with a\n        // `type`; the messenger frame never does. Without this guard a modal/banner CTA (open-url,\n        // start-product-tour, ...) is handled here AND by its own manager → the action fires twice.\n        if (\n          data?.type === 'MODAL' ||\n          data?.type === 'BANNER' ||\n          data?.type === 'CHATBAR' ||\n          data?.type === 'AGENT_CONVERSATION'\n        ) {\n          return;\n        }\n\n        for (var i = 0; i < this.listeners.length; i++) {\n          if (this.listeners[i]) {\n            this.listeners[i](data);\n          }\n        }\n      } catch (exp) {}\n    });\n  }\n\n  addMessageListener(callback) {\n    this.listeners.push(callback);\n  }\n\n  // Collects the ticket metadata (customData, metaData, consoleLog, networkLogs,\n  // customEventLog, formData, tags) and posts the `collect-ticket-data` response to the\n  // given target frame. Extracted so both the widget frame (GleapFrameManager) and the\n  // AI chatbar frame (GleapAiChatbarManager) collect identical metadata. Posts bare\n  // (Messenger-protocol) messages directly to targetFrame.contentWindow.\n  answerCollectTicketData(targetFrame, requestData) {\n    var ticketData = {\n      customData: GleapCustomDataManager.getInstance().getCustomData(),\n      metaData: GleapMetaDataManager.getInstance().getMetaData(),\n      consoleLog: GleapConsoleLogManager.getInstance().getLogs(),\n      networkLogs: GleapNetworkIntercepter.getInstance().getRequests(),\n      customEventLog: GleapStreamedEvent.getInstance().getEventArray(),\n      formData: GleapCustomDataManager.getInstance().getTicketAttributes(),\n    };\n\n    // Add tags\n    const tags = GleapTagManager.getInstance().getTags();\n    if (tags && tags.length > 0) {\n      ticketData.tags = tags;\n    }\n\n    try {\n      if (targetFrame && targetFrame.contentWindow) {\n        targetFrame.contentWindow.postMessage(\n          JSON.stringify({\n            name: 'collect-ticket-data',\n            data: ticketData,\n          }),\n          '*'\n        );\n      }\n    } catch (e) {}\n  }\n}\n","import { isMobile } from './GleapHelper';\n\nexport default class GleapMetaDataManager {\n  sessionStart = new Date();\n  appBuildNumber = '';\n  appVersionCode = '';\n  environment = 'prod';\n\n  // GleapMetaDataManager singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapMetaDataManager();\n    }\n    return this.instance;\n  }\n\n  /**\n   * Sets the app version code.\n   * @param {string} appVersionCode\n   */\n  static setAppVersionCode(appVersionCode) {\n    this.getInstance().appVersionCode = appVersionCode;\n  }\n\n  /**\n   * Sets the app version code.\n   * @param {string} appVersionCode\n   */\n  static setAppBuildNumber(appBuildNumber) {\n    this.getInstance().appBuildNumber = appBuildNumber;\n  }\n\n  getSessionDuration() {\n    const now = new Date();\n    return Math.round((now.getTime() - this.sessionStart.getTime()) / 1000);\n  }\n\n  getMetaData() {\n    var nAgt = navigator.userAgent;\n    var browserName = navigator.appName;\n    var fullVersion = '' + parseFloat(navigator.appVersion);\n    var majorVersion = parseInt(navigator.appVersion, 10);\n    var nameOffset, verOffset, ix;\n\n    // In Opera, the true version is after \"Opera\" or after \"Version\"\n    if ((verOffset = nAgt.indexOf('Opera')) !== -1) {\n      browserName = 'Opera';\n      fullVersion = nAgt.substring(verOffset + 6);\n      if ((verOffset = nAgt.indexOf('Version')) !== -1) fullVersion = nAgt.substring(verOffset + 8);\n    }\n    // In MSIE, the true version is after \"MSIE\" in userAgent\n    else if ((verOffset = nAgt.indexOf('MSIE')) !== -1) {\n      browserName = 'Microsoft Internet Explorer';\n      fullVersion = nAgt.substring(verOffset + 5);\n    }\n    // In Chrome, the true version is after \"Chrome\"\n    else if ((verOffset = nAgt.indexOf('Chrome')) !== -1) {\n      browserName = 'Chrome';\n      fullVersion = nAgt.substring(verOffset + 7);\n    }\n    // In Safari, the true version is after \"Safari\" or after \"Version\"\n    else if ((verOffset = nAgt.indexOf('Safari')) !== -1) {\n      browserName = 'Safari';\n      fullVersion = nAgt.substring(verOffset + 7);\n      if ((verOffset = nAgt.indexOf('Version')) !== -1) fullVersion = nAgt.substring(verOffset + 8);\n    }\n    // In Firefox, the true version is after \"Firefox\"\n    else if ((verOffset = nAgt.indexOf('Firefox')) !== -1) {\n      browserName = 'Firefox';\n      fullVersion = nAgt.substring(verOffset + 8);\n    }\n    // In most other browsers, \"name/version\" is at the end of userAgent\n    else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) {\n      browserName = nAgt.substring(nameOffset, verOffset);\n      fullVersion = nAgt.substring(verOffset + 1);\n      if (browserName.toLowerCase() === browserName.toUpperCase()) {\n        browserName = navigator.appName;\n      }\n    }\n    // trim the fullVersion string at semicolon/space if present\n    if ((ix = fullVersion.indexOf(';')) !== -1) fullVersion = fullVersion.substring(0, ix);\n    if ((ix = fullVersion.indexOf(' ')) !== -1) fullVersion = fullVersion.substring(0, ix);\n\n    majorVersion = parseInt('' + fullVersion, 10);\n    if (isNaN(majorVersion)) {\n      fullVersion = '' + parseFloat(navigator.appVersion);\n      majorVersion = parseInt(navigator.appVersion, 10);\n    }\n\n    var OSName = 'Unknown OS';\n    if (navigator.appVersion.indexOf('Win') !== -1) OSName = 'Windows';\n    if (navigator.appVersion.indexOf('Mac') !== -1) OSName = 'MacOS';\n    if (navigator.appVersion.indexOf('X11') !== -1) OSName = 'UNIX';\n    if (navigator.appVersion.indexOf('Linux') !== -1) OSName = 'Linux';\n    if (navigator.appVersion.indexOf('iPad') !== -1) OSName = 'iPad';\n    if (navigator.appVersion.indexOf('iPhone') !== -1) OSName = 'iPhone';\n    if (navigator.appVersion.indexOf('Android') !== -1) OSName = 'Android';\n\n    return {\n      browserName: browserName + '(' + fullVersion + ')',\n      userAgent: nAgt,\n      browser: browserName,\n      systemName: OSName,\n      buildVersionNumber: this.appBuildNumber,\n      releaseVersionNumber: this.appVersionCode,\n      sessionDuration: this.getSessionDuration(),\n      devicePixelRatio: window.devicePixelRatio,\n      screenWidth: window.screen.width,\n      screenHeight: window.screen.height,\n      innerWidth: window.innerWidth,\n      innerHeight: window.innerHeight,\n      currentUrl: window.location.href,\n      language: navigator.language || navigator.userLanguage,\n      mobile: isMobile(),\n      sdkVersion: SDK_VERSION,\n      sdkType: 'javascript',\n      environment: this.environment,\n    };\n  }\n}\n","import { truncateString } from './GleapHelper';\n\nexport default class GleapConsoleLogManager {\n  logArray = [];\n  disabled = false;\n  originalConsoleLog;\n  logMaxLength = 500;\n\n  // GleapConsoleLogManager singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapConsoleLogManager();\n    }\n    return this.instance;\n  }\n\n  /**\n   * Return the console logs\n   * @returns {any[]} logs\n   */\n  getLogs() {\n    return this.logArray;\n  }\n\n  /**\n   * Revert console log overwrite.\n   */\n  stop() {\n    this.disabled = true;\n    if (this.originalConsoleLog) {\n      window.console = this.originalConsoleLog;\n    }\n  }\n\n  /**\n   * Add message with log level to logs.\n   * @param {*} message\n   * @param {*} logLevel\n   * @returns\n   */\n  addLog(message, logLevel = 'INFO') {\n    if (!message || message.length <= 0) {\n      return;\n    }\n\n    this.logArray.push({\n      log: truncateString(message, 1000),\n      date: new Date(),\n      priority: logLevel,\n    });\n\n    if (this.logArray.length > this.logMaxLength) {\n      this.logArray.shift();\n    }\n  }\n\n  /**\n   * Add entry to logs.\n   * @param {*} args\n   * @param {*} logLevel\n   * @returns\n   */\n  addLogWithArgs(args, logLevel) {\n    if (!args || args.length <= 0) {\n      return;\n    }\n\n    var log = '';\n    try {\n      for (var i = 0; i < args.length; i++) {\n        log += args[i] + ' ';\n      }\n    } catch (exp) {}\n\n    this.addLog(log, logLevel);\n  }\n\n  /**\n   * Start console log overwrite.\n   */\n  start() {\n    if (this.disabled) {\n      return;\n    }\n\n    const self = this;\n    window.console = (function (origConsole) {\n      if (!window.console || !origConsole) {\n        origConsole = {};\n      }\n\n      self.originalConsoleLog = origConsole;\n\n      return {\n        ...origConsole,\n        log: function () {\n          self.addLogWithArgs(arguments, 'INFO');\n          origConsole.log && origConsole.log.apply(origConsole, arguments);\n        },\n        warn: function () {\n          self.addLogWithArgs(arguments, 'WARNING');\n          origConsole.warn && origConsole.warn.apply(origConsole, arguments);\n        },\n        error: function () {\n          self.addLogWithArgs(arguments, 'ERROR');\n          origConsole.error && origConsole.error.apply(origConsole, arguments);\n        },\n        info: function (v) {\n          self.addLogWithArgs(arguments, 'INFO');\n          origConsole.info && origConsole.info.apply(origConsole, arguments);\n        },\n      };\n    })(window.console);\n  }\n}\n","import { GleapConsoleLogManager, GleapFrameManager, handleGleapLink } from './Gleap';\nimport { getDOMElementDescription } from './GleapHelper';\n\nexport default class GleapClickListener {\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapClickListener();\n    }\n    return this.instance;\n  }\n\n  start() {\n    document.addEventListener('click', (e) => {\n      if (!e.target) {\n        return;\n      }\n\n      if (e.target.tagName === 'A' && e.target.protocol === 'gleap:') {\n        e.preventDefault();\n\n        const href = e.target.href;\n        handleGleapLink(href);\n      }\n\n      if (!GleapFrameManager.getInstance().isOpened()) {\n        GleapConsoleLogManager.getInstance().addLog(getDOMElementDescription(e.target), 'CLICK');\n      }\n    });\n  }\n}\n","import { gleapDataParser } from './GleapHelper';\n\nexport default class GleapCustomDataManager {\n  customData = {};\n  ticketAttributes = {};\n\n  // GleapCustomDataManager singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapCustomDataManager();\n    }\n    return this.instance;\n  }\n\n  /**\n   * Returns the custom data object\n   * @returns {*}\n   */\n  getCustomData() {\n    return this.customData;\n  }\n\n  /**\n   * Set custom data that will be attached to the bug-report.\n   * @param {*} data\n   */\n  attachCustomData(data) {\n    this.customData = Object.assign(this.customData, gleapDataParser(data));\n  }\n\n  /**\n   * Add one key value pair to the custom data object\n   * @param {*} key The key of the custom data entry you want to add.\n   * @param {*} value The custom data you want to add.\n   */\n  setCustomData(key, value) {\n    this.customData[key] = value;\n  }\n\n  /**\n   * Remove one key value pair of the custom data object\n   * @param {*} key The key of the custom data entry you want to remove.\n   */\n  removeCustomData(key) {\n    delete this.customData[key];\n  }\n\n  /**\n   * Clear the custom data\n   */\n  clearCustomData() {\n    this.customData = {};\n  }\n\n  /**\n   * This method is used to set ticket attributes programmatically.\n   * @param {*} key The key of the attribute you want to add.\n   * @param {*} value The value to set.\n   */\n  setTicketAttribute(key, value) {\n    this.ticketAttributes[key] = value;\n  }\n\n  /**\n   * This method is used to unset ticket attributes programmatically.\n   * @param {*} key The key of the attribute you want to unset.\n   */\n  unsetTicketAttribute(key) {\n    delete this.ticketAttributes[key];\n  }\n\n  /**\n   * This method is used to clear ticket attributes programmatically.\n   */\n  clearTicketAttributes() {\n    this.ticketAttributes = {};\n  }\n\n  getTicketAttributes() {\n    return this.ticketAttributes;\n  }\n}\n","export default class GleapCustomActionManager {\n  customActionCallbacks = [];\n\n  // GleapCustomActionManager singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapCustomActionManager();\n    }\n    return this.instance;\n  }\n\n  /**\n   * Register custom action\n   */\n  static registerCustomAction(customAction) {\n    const instance = this.getInstance();\n    if (instance.customActionCallbacks) {\n      instance.customActionCallbacks.push(customAction);\n    }\n  }\n\n  /**\n   * Triggers a custom action\n   */\n  static triggerCustomAction(name, data) {\n    const instance = this.getInstance();\n    if (instance.customActionCallbacks) {\n      for (var i = 0; i < instance.customActionCallbacks.length; i++) {\n        var callback = instance.customActionCallbacks[i];\n        if (callback) {\n          callback({\n            name,\n            ...(data ? data : {}),\n          });\n        }\n      }\n    }\n  }\n}\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar _a;\nvar EventType = /* @__PURE__ */ ((EventType2) => {\n  EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n  EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n  EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n  EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n  EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n  EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n  EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n  EventType2[EventType2[\"Asset\"] = 7] = \"Asset\";\n  return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n  IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n  IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n  IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n  IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n  IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n  IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n  IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n  IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n  IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n  IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n  IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n  IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n  IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n  IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n  IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n  IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n  IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n  return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n  MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n  MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n  MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n  MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n  MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n  MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n  MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n  MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n  MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n  MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n  MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n  return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n  PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n  PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n  PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n  return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n  CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n  CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n  CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n  return CanvasContext2;\n})(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n  MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n  MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n  MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n  MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n  MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n  return MediaInteractions2;\n})(MediaInteractions || {});\nvar NodeType = /* @__PURE__ */ ((NodeType2) => {\n  NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n  NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n  NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n  NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n  NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n  NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n  return NodeType2;\n})(NodeType || {});\nconst testableAccessors = {\n  Node: [\n    \"childNodes\",\n    \"parentNode\",\n    \"parentElement\",\n    \"textContent\",\n    \"ownerDocument\"\n  ],\n  ShadowRoot: [\"host\", \"styleSheets\"],\n  Element: [\"shadowRoot\", \"querySelector\", \"querySelectorAll\"],\n  MutationObserver: []\n};\nconst testableMethods = {\n  Node: [\"contains\", \"getRootNode\"],\n  ShadowRoot: [\"getSelection\"],\n  Element: [],\n  MutationObserver: [\"constructor\"]\n};\nconst untaintedBasePrototype = {};\nconst untaintedBaseIframeCleanup = {};\nconst isAngularZonePresent = () => {\n  return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype(key) {\n  if (untaintedBasePrototype[key])\n    return untaintedBasePrototype[key];\n  const defaultObj = globalThis[key];\n  const defaultPrototype = defaultObj.prototype;\n  const accessorNames = key in testableAccessors ? testableAccessors[key] : void 0;\n  const isUntaintedAccessors = Boolean(\n    accessorNames && // @ts-expect-error 2345\n    accessorNames.every(\n      (accessor) => {\n        var _a2, _b;\n        return Boolean(\n          (_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\")\n        );\n      }\n    )\n  );\n  const methodNames = key in testableMethods ? testableMethods[key] : void 0;\n  const isUntaintedMethods = Boolean(\n    methodNames && methodNames.every(\n      // @ts-expect-error 2345\n      (method) => {\n        var _a2;\n        return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n      }\n    )\n  );\n  if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent()) {\n    untaintedBasePrototype[key] = defaultObj.prototype;\n    return defaultObj.prototype;\n  }\n  try {\n    const iframeEl = document.createElement(\"iframe\");\n    iframeEl.style.display = \"none\";\n    document.body.appendChild(iframeEl);\n    const win = iframeEl.contentWindow;\n    if (!win) return defaultObj.prototype;\n    const untaintedObject = win[key].prototype;\n    if (!untaintedObject) {\n      iframeEl.remove();\n      return defaultPrototype;\n    }\n    const ua = navigator.userAgent;\n    if (ua.includes(\"Safari\") && !ua.includes(\"Chrome\")) {\n      iframeEl.classList.add(\"rr-block\");\n      iframeEl.setAttribute(\"__rrwebUntaintedMutationObserver\", \"\");\n      untaintedBaseIframeCleanup[key] = () => iframeEl.remove();\n    } else {\n      iframeEl.remove();\n    }\n    return untaintedBasePrototype[key] = untaintedObject;\n  } catch {\n    return defaultPrototype;\n  }\n}\nconst untaintedAccessorCache = {};\nfunction getUntaintedAccessor(key, instance, accessor) {\n  var _a2;\n  const cacheKey = `${key}.${String(accessor)}`;\n  if (untaintedAccessorCache[cacheKey])\n    return untaintedAccessorCache[cacheKey].call(\n      instance\n    );\n  const untaintedPrototype = getUntaintedPrototype(key);\n  const untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(\n    untaintedPrototype,\n    accessor\n  )) == null ? void 0 : _a2.get;\n  if (!untaintedAccessor) return instance[accessor];\n  untaintedAccessorCache[cacheKey] = untaintedAccessor;\n  return untaintedAccessor.call(instance);\n}\nconst untaintedMethodCache = {};\nfunction getUntaintedMethod(key, instance, method) {\n  const cacheKey = `${key}.${String(method)}`;\n  if (untaintedMethodCache[cacheKey])\n    return untaintedMethodCache[cacheKey].bind(\n      instance\n    );\n  const untaintedPrototype = getUntaintedPrototype(key);\n  const untaintedMethod = untaintedPrototype[method];\n  if (typeof untaintedMethod !== \"function\") return instance[method];\n  untaintedMethodCache[cacheKey] = untaintedMethod;\n  return untaintedMethod.bind(instance);\n}\nfunction ownerDocument(n) {\n  return getUntaintedAccessor(\"Node\", n, \"ownerDocument\");\n}\nfunction childNodes(n) {\n  return getUntaintedAccessor(\"Node\", n, \"childNodes\");\n}\nfunction parentNode(n) {\n  return getUntaintedAccessor(\"Node\", n, \"parentNode\");\n}\nfunction parentElement(n) {\n  return getUntaintedAccessor(\"Node\", n, \"parentElement\");\n}\nfunction textContent(n) {\n  return getUntaintedAccessor(\"Node\", n, \"textContent\");\n}\nfunction contains(n, other) {\n  return getUntaintedMethod(\"Node\", n, \"contains\")(other);\n}\nfunction getRootNode(n) {\n  return getUntaintedMethod(\"Node\", n, \"getRootNode\")();\n}\nfunction host(n) {\n  if (!n || !(\"host\" in n)) return null;\n  return getUntaintedAccessor(\"ShadowRoot\", n, \"host\");\n}\nfunction styleSheets(n) {\n  return n.styleSheets;\n}\nfunction shadowRoot(n) {\n  if (!n || !(\"shadowRoot\" in n)) return null;\n  return getUntaintedAccessor(\"Element\", n, \"shadowRoot\");\n}\nfunction querySelector(n, selectors) {\n  return getUntaintedAccessor(\"Element\", n, \"querySelector\")(selectors);\n}\nfunction querySelectorAll(n, selectors) {\n  return getUntaintedAccessor(\"Element\", n, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor() {\n  return [\n    getUntaintedPrototype(\"MutationObserver\").constructor,\n    untaintedBaseIframeCleanup[\"MutationObserver\"] ?? (() => {\n    })\n  ];\n}\nlet nowTimestamp = Date.now;\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) {\n  nowTimestamp = () => (/* @__PURE__ */ new Date()).getTime();\n}\nfunction patch(source, name, replacement) {\n  try {\n    if (!(name in source)) {\n      return () => {\n      };\n    }\n    const original = source[name];\n    const wrapped = replacement(original);\n    if (typeof wrapped === \"function\") {\n      wrapped.prototype = wrapped.prototype || {};\n      Object.defineProperties(wrapped, {\n        __rrweb_original__: {\n          enumerable: false,\n          value: original\n        }\n      });\n    }\n    source[name] = wrapped;\n    return () => {\n      source[name] = original;\n    };\n  } catch {\n    return () => {\n    };\n  }\n}\nconst index = {\n  ownerDocument,\n  childNodes,\n  parentNode,\n  parentElement,\n  textContent,\n  contains,\n  getRootNode,\n  host,\n  styleSheets,\n  shadowRoot,\n  querySelector,\n  querySelectorAll,\n  nowTimestamp,\n  mutationObserverCtor,\n  patch\n};\nfunction isElement(n) {\n  return n.nodeType === n.ELEMENT_NODE;\n}\nfunction isShadowRoot(n) {\n  const hostEl = (\n    // anchor and textarea elements also have a `host` property\n    // but only shadow roots have a `mode` property\n    n && \"host\" in n && \"mode\" in n && index.host(n) || null\n  );\n  return Boolean(\n    hostEl && \"shadowRoot\" in hostEl && index.shadowRoot(hostEl) === n\n  );\n}\nfunction isNativeShadowDom(shadowRoot2) {\n  return Object.prototype.toString.call(shadowRoot2) === \"[object ShadowRoot]\";\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n  if (cssText.includes(\" background-clip: text;\") && !cssText.includes(\" -webkit-background-clip: text;\")) {\n    cssText = cssText.replace(\n      /\\sbackground-clip:\\s*text;/g,\n      \" -webkit-background-clip: text; background-clip: text;\"\n    );\n  }\n  return cssText;\n}\nfunction escapeImportStatement(rule) {\n  const { cssText } = rule;\n  if (cssText.split('\"').length < 3) return cssText;\n  const statement = [\"@import\", `url(${JSON.stringify(rule.href)})`];\n  if (rule.layerName === \"\") {\n    statement.push(`layer`);\n  } else if (rule.layerName) {\n    statement.push(`layer(${rule.layerName})`);\n  }\n  if (rule.supportsText) {\n    statement.push(`supports(${rule.supportsText})`);\n  }\n  if (rule.media.length) {\n    statement.push(rule.media.mediaText);\n  }\n  return statement.join(\" \") + \";\";\n}\nfunction stringifyStylesheet(s) {\n  try {\n    const rules = s.rules || s.cssRules;\n    if (!rules) {\n      return null;\n    }\n    let sheetHref = s.href;\n    if (!sheetHref && s.ownerNode) {\n      sheetHref = s.ownerNode.baseURI;\n    }\n    const stringifiedRules = Array.from(\n      rules,\n      (rule) => stringifyRule(rule, sheetHref)\n    ).join(\"\");\n    return fixBrowserCompatibilityIssuesInCSS(stringifiedRules);\n  } catch (error) {\n    return null;\n  }\n}\nfunction stringifyRule(rule, sheetHref) {\n  if (isCSSImportRule(rule)) {\n    let importStringified;\n    try {\n      importStringified = // for same-origin stylesheets,\n      // we can access the imported stylesheet rules directly\n      stringifyStylesheet(rule.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement\n      escapeImportStatement(rule);\n    } catch (error) {\n      importStringified = rule.cssText;\n    }\n    if (rule.styleSheet.href) {\n      return absolutifyURLs(importStringified, rule.styleSheet.href);\n    }\n    return importStringified;\n  } else {\n    let ruleStringified = rule.cssText;\n    if (isCSSStyleRule(rule) && rule.selectorText.includes(\":\")) {\n      ruleStringified = fixSafariColons(ruleStringified);\n    }\n    if (sheetHref) {\n      return absolutifyURLs(ruleStringified, sheetHref);\n    }\n    return ruleStringified;\n  }\n}\nfunction fixSafariColons(cssStringified) {\n  const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n  return cssStringified.replace(regex, \"$1\\\\$2\");\n}\nfunction isCSSImportRule(rule) {\n  return \"styleSheet\" in rule;\n}\nfunction isCSSStyleRule(rule) {\n  return \"selectorText\" in rule;\n}\nclass Mirror {\n  constructor() {\n    __publicField(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n    __publicField(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n  }\n  getId(n) {\n    var _a2;\n    if (!n) return -1;\n    const id = (_a2 = this.getMeta(n)) == null ? void 0 : _a2.id;\n    return id ?? -1;\n  }\n  getNode(id) {\n    return this.idNodeMap.get(id) || null;\n  }\n  getIds() {\n    return Array.from(this.idNodeMap.keys());\n  }\n  getMeta(n) {\n    return this.nodeMetaMap.get(n) || null;\n  }\n  // removes the node from idNodeMap\n  // doesn't remove the node from nodeMetaMap\n  removeNodeFromMap(n) {\n    const id = this.getId(n);\n    this.idNodeMap.delete(id);\n    if (n.childNodes) {\n      n.childNodes.forEach(\n        (childNode) => this.removeNodeFromMap(childNode)\n      );\n    }\n  }\n  has(id) {\n    return this.idNodeMap.has(id);\n  }\n  hasNode(node) {\n    return this.nodeMetaMap.has(node);\n  }\n  add(n, meta) {\n    const id = meta.id;\n    this.idNodeMap.set(id, n);\n    this.nodeMetaMap.set(n, meta);\n  }\n  replace(id, n) {\n    const oldNode = this.getNode(id);\n    if (oldNode) {\n      const meta = this.nodeMetaMap.get(oldNode);\n      if (meta) this.nodeMetaMap.set(n, meta);\n    }\n    this.idNodeMap.set(id, n);\n  }\n  reset() {\n    this.idNodeMap = /* @__PURE__ */ new Map();\n    this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n  }\n}\nfunction createMirror() {\n  return new Mirror();\n}\nfunction maskInputValue({\n  element,\n  maskInputOptions,\n  tagName,\n  type,\n  value,\n  maskInputFn\n}) {\n  let text = value || \"\";\n  const actualType = type && toLowerCase(type);\n  if (maskInputOptions[tagName.toLowerCase()] || actualType && maskInputOptions[actualType]) {\n    if (maskInputFn) {\n      text = maskInputFn(text, element);\n    } else {\n      text = \"*\".repeat(text.length);\n    }\n  }\n  return text;\n}\nfunction toLowerCase(str) {\n  return str.toLowerCase();\n}\nconst ORIGINAL_ATTRIBUTE_NAME = \"__rrweb_original__\";\nfunction is2DCanvasBlank(canvas) {\n  const ctx = canvas.getContext(\"2d\");\n  if (!ctx) return true;\n  const chunkSize = 50;\n  for (let x = 0; x < canvas.width; x += chunkSize) {\n    for (let y = 0; y < canvas.height; y += chunkSize) {\n      const getImageData = ctx.getImageData;\n      const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData ? getImageData[ORIGINAL_ATTRIBUTE_NAME] : getImageData;\n      const pixelBuffer = new Uint32Array(\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n        originalGetImageData.call(\n          ctx,\n          x,\n          y,\n          Math.min(chunkSize, canvas.width - x),\n          Math.min(chunkSize, canvas.height - y)\n        ).data.buffer\n      );\n      if (pixelBuffer.some((pixel) => pixel !== 0)) return false;\n    }\n  }\n  return true;\n}\nfunction getInputType(element) {\n  const type = element.type;\n  return element.hasAttribute(\"data-rr-is-password\") ? \"password\" : type ? (\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n    toLowerCase(type)\n  ) : null;\n}\nfunction extractFileExtension(path, baseURL) {\n  let url;\n  try {\n    url = new URL(path, baseURL ?? window.location.href);\n  } catch (err) {\n    return null;\n  }\n  const regex = /\\.([0-9a-z]+)(?:$)/i;\n  const match = url.pathname.match(regex);\n  return (match == null ? void 0 : match[1]) ?? null;\n}\nfunction extractOrigin(url) {\n  let origin = \"\";\n  if (url.indexOf(\"//\") > -1) {\n    origin = url.split(\"/\").slice(0, 3).join(\"/\");\n  } else {\n    origin = url.split(\"/\")[0];\n  }\n  origin = origin.split(\"?\")[0];\n  return origin;\n}\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absolutifyURLs(cssText, href) {\n  return (cssText || \"\").replace(\n    URL_IN_CSS_REF,\n    (origin, quote1, path1, quote2, path2, path3) => {\n      const filePath = path1 || path2 || path3;\n      const maybeQuote = quote1 || quote2 || \"\";\n      if (!filePath) {\n        return origin;\n      }\n      if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n        return `url(${maybeQuote}${filePath}${maybeQuote})`;\n      }\n      if (DATA_URI.test(filePath)) {\n        return `url(${maybeQuote}${filePath}${maybeQuote})`;\n      }\n      if (filePath[0] === \"/\") {\n        return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\n      }\n      const filePathNoHash = filePath.split(\"#\")[0];\n      const maybeHash = filePath.substring(filePathNoHash.length);\n      const stack = href.split(\"#\")[0].split(\"/\");\n      const parts = filePathNoHash.split(\"/\");\n      stack.pop();\n      for (const part of parts) {\n        if (part === \".\") {\n          continue;\n        } else if (part === \"..\") {\n          stack.pop();\n        } else {\n          stack.push(part);\n        }\n      }\n      return `url(${maybeQuote}${stack.join(\"/\")}${maybeHash}${maybeQuote})`;\n    }\n  );\n}\nfunction normalizeCssString(cssText, _testNoPxNorm = false) {\n  if (_testNoPxNorm) {\n    return cssText.replace(/(\\/\\*[^*]*\\*\\/)|[\\s;]/g, \"\");\n  } else {\n    return cssText.replace(/(\\/\\*[^*]*\\*\\/)|[\\s;]/g, \"\").replace(/0px/g, \"0\");\n  }\n}\nfunction splitCssText(cssText, style, _testNoPxNorm = false) {\n  const childNodes2 = Array.from(style.childNodes);\n  const splits = [];\n  let iterCount = 0;\n  if (childNodes2.length > 1 && cssText && typeof cssText === \"string\") {\n    let cssTextNorm = normalizeCssString(cssText, _testNoPxNorm);\n    const normFactor = cssTextNorm.length / cssText.length;\n    for (let i = 1; i < childNodes2.length; i++) {\n      if (childNodes2[i].textContent && typeof childNodes2[i].textContent === \"string\") {\n        const textContentNorm = normalizeCssString(\n          childNodes2[i].textContent,\n          _testNoPxNorm\n        );\n        const jLimit = 100;\n        let j = 3;\n        for (; j < textContentNorm.length; j++) {\n          if (\n            // keep consuming css identifiers (to get a decent chunk more quickly)\n            textContentNorm[j].match(/[a-zA-Z0-9]/) || // substring needs to be unique to this section\n            textContentNorm.indexOf(textContentNorm.substring(0, j), 1) !== -1\n          ) {\n            continue;\n          }\n          break;\n        }\n        for (; j < textContentNorm.length; j++) {\n          let startSubstring = textContentNorm.substring(0, j);\n          let cssNormSplits = cssTextNorm.split(startSubstring);\n          let splitNorm = -1;\n          if (cssNormSplits.length === 2) {\n            splitNorm = cssNormSplits[0].length;\n          } else if (cssNormSplits.length > 2 && cssNormSplits[0] === \"\" && childNodes2[i - 1].textContent !== \"\") {\n            splitNorm = cssTextNorm.indexOf(startSubstring, 1);\n          } else if (cssNormSplits.length === 1) {\n            startSubstring = startSubstring.substring(\n              0,\n              startSubstring.length - 1\n            );\n            cssNormSplits = cssTextNorm.split(startSubstring);\n            if (cssNormSplits.length <= 1) {\n              splits.push(cssText);\n              return splits;\n            }\n            j = jLimit + 1;\n          } else if (j === textContentNorm.length - 1) {\n            splitNorm = cssTextNorm.indexOf(startSubstring);\n          }\n          if (cssNormSplits.length >= 2 && j > jLimit) {\n            const prevTextContent = childNodes2[i - 1].textContent;\n            if (prevTextContent && typeof prevTextContent === \"string\") {\n              const prevMinLength = normalizeCssString(prevTextContent).length;\n              splitNorm = cssTextNorm.indexOf(startSubstring, prevMinLength);\n            }\n            if (splitNorm === -1) {\n              splitNorm = cssNormSplits[0].length;\n            }\n          }\n          if (splitNorm !== -1) {\n            let k = Math.floor(splitNorm / normFactor);\n            for (; k > 0 && k < cssText.length; ) {\n              iterCount += 1;\n              if (iterCount > 50 * childNodes2.length) {\n                splits.push(cssText);\n                return splits;\n              }\n              const normPart = normalizeCssString(\n                cssText.substring(0, k),\n                _testNoPxNorm\n              );\n              if (normPart.length === splitNorm) {\n                splits.push(cssText.substring(0, k));\n                cssText = cssText.substring(k);\n                cssTextNorm = cssTextNorm.substring(splitNorm);\n                break;\n              } else if (normPart.length < splitNorm) {\n                k += Math.max(\n                  1,\n                  Math.floor((splitNorm - normPart.length) / normFactor)\n                );\n              } else {\n                k -= Math.max(\n                  1,\n                  Math.floor((normPart.length - splitNorm) * normFactor)\n                );\n              }\n            }\n            break;\n          }\n        }\n      }\n    }\n  }\n  splits.push(cssText);\n  return splits;\n}\nfunction markCssSplits(cssText, style) {\n  return splitCssText(cssText, style).join(\"/* rr_split */\");\n}\nlet _id = 1;\nconst tagNameRegex = new RegExp(\"[^a-z0-9-_:]\");\nconst IGNORED_NODE = -2;\nfunction genId() {\n  return _id++;\n}\nfunction getValidTagName(element) {\n  if (element instanceof HTMLFormElement) {\n    return \"form\";\n  }\n  const processedTagName = toLowerCase(element.tagName);\n  if (tagNameRegex.test(processedTagName)) {\n    return \"div\";\n  }\n  return processedTagName;\n}\nlet canvasService;\nlet canvasCtx;\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n  if (attributeValue.trim() === \"\") {\n    return attributeValue;\n  }\n  let pos = 0;\n  function collectCharacters(regEx) {\n    let chars2;\n    const match = regEx.exec(attributeValue.substring(pos));\n    if (match) {\n      chars2 = match[0];\n      pos += chars2.length;\n      return chars2;\n    }\n    return \"\";\n  }\n  const output = [];\n  while (true) {\n    collectCharacters(SRCSET_COMMAS_OR_SPACES);\n    if (pos >= attributeValue.length) {\n      break;\n    }\n    let url = collectCharacters(SRCSET_NOT_SPACES);\n    if (url.slice(-1) === \",\") {\n      url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n      output.push(url);\n    } else {\n      let descriptorsStr = \"\";\n      url = absoluteToDoc(doc, url);\n      let inParens = false;\n      while (true) {\n        const c = attributeValue.charAt(pos);\n        if (c === \"\") {\n          output.push((url + descriptorsStr).trim());\n          break;\n        } else if (!inParens) {\n          if (c === \",\") {\n            pos += 1;\n            output.push((url + descriptorsStr).trim());\n            break;\n          } else if (c === \"(\") {\n            inParens = true;\n          }\n        } else {\n          if (c === \")\") {\n            inParens = false;\n          }\n        }\n        descriptorsStr += c;\n        pos += 1;\n      }\n    }\n  }\n  return output.join(\", \");\n}\nconst cachedDocument = /* @__PURE__ */ new WeakMap();\nfunction absoluteToDoc(doc, attributeValue) {\n  if (!attributeValue || attributeValue.trim() === \"\") {\n    return attributeValue;\n  }\n  return getHref(doc, attributeValue);\n}\nfunction isSVGElement(el) {\n  return Boolean(el.tagName === \"svg\" || el.ownerSVGElement);\n}\nfunction getHref(doc, customHref) {\n  let a = cachedDocument.get(doc);\n  if (!a) {\n    a = doc.createElement(\"a\");\n    cachedDocument.set(doc, a);\n  }\n  if (!customHref) {\n    customHref = \"\";\n  } else if (customHref.startsWith(\"blob:\") || customHref.startsWith(\"data:\")) {\n    return customHref;\n  }\n  a.setAttribute(\"href\", customHref);\n  return a.href;\n}\nfunction transformAttribute(doc, tagName, name, value) {\n  if (!value) {\n    return value;\n  }\n  if (name === \"src\" || name === \"href\" && !(tagName === \"use\" && value[0] === \"#\")) {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"xlink:href\" && value[0] !== \"#\") {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"background\" && [\"table\", \"td\", \"th\"].includes(tagName)) {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"srcset\") {\n    return getAbsoluteSrcsetString(doc, value);\n  } else if (name === \"style\") {\n    return absolutifyURLs(value, getHref(doc));\n  } else if (tagName === \"object\" && name === \"data\") {\n    return absoluteToDoc(doc, value);\n  }\n  return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n  return [\"video\", \"audio\"].includes(tagName) && name === \"autoplay\";\n}\nfunction _isBlockedElement(element, blockClass, blockSelector) {\n  try {\n    if (typeof blockClass === \"string\") {\n      if (element.classList.contains(blockClass)) {\n        return true;\n      }\n    } else {\n      for (let eIndex = element.classList.length; eIndex--; ) {\n        const className = element.classList[eIndex];\n        if (blockClass.test(className)) {\n          return true;\n        }\n      }\n    }\n    if (blockSelector) {\n      return element.matches(blockSelector);\n    }\n  } catch (e) {\n  }\n  return false;\n}\nfunction classMatchesRegex(node, regex, checkAncestors) {\n  if (!node) return false;\n  if (node.nodeType !== node.ELEMENT_NODE) {\n    if (!checkAncestors) return false;\n    return classMatchesRegex(index.parentNode(node), regex, checkAncestors);\n  }\n  for (let eIndex = node.classList.length; eIndex--; ) {\n    const className = node.classList[eIndex];\n    if (regex.test(className)) {\n      return true;\n    }\n  }\n  if (!checkAncestors) return false;\n  return classMatchesRegex(index.parentNode(node), regex, checkAncestors);\n}\nfunction needMaskingText(node, maskTextClass, maskTextSelector, checkAncestors) {\n  let el;\n  if (isElement(node)) {\n    el = node;\n    if (!index.childNodes(el).length) {\n      return false;\n    }\n  } else if (index.parentElement(node) === null) {\n    return false;\n  } else {\n    el = index.parentElement(node);\n  }\n  try {\n    if (typeof maskTextClass === \"string\") {\n      if (checkAncestors) {\n        if (el.closest(`.${maskTextClass}`)) return true;\n      } else {\n        if (el.classList.contains(maskTextClass)) return true;\n      }\n    } else {\n      if (classMatchesRegex(el, maskTextClass, checkAncestors)) return true;\n    }\n    if (maskTextSelector) {\n      if (checkAncestors) {\n        if (el.closest(maskTextSelector)) return true;\n      } else {\n        if (el.matches(maskTextSelector)) return true;\n      }\n    }\n  } catch (e) {\n  }\n  return false;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n  const win = iframeEl.contentWindow;\n  if (!win) {\n    return;\n  }\n  let fired = false;\n  let readyState;\n  try {\n    readyState = win.document.readyState;\n  } catch (error) {\n    return;\n  }\n  if (readyState !== \"complete\") {\n    const timer = setTimeout(() => {\n      if (!fired) {\n        listener();\n        fired = true;\n      }\n    }, iframeLoadTimeout);\n    iframeEl.addEventListener(\"load\", () => {\n      clearTimeout(timer);\n      fired = true;\n      listener();\n    });\n    return;\n  }\n  const blankUrl = \"about:blank\";\n  if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === \"\") {\n    setTimeout(listener, 0);\n    return iframeEl.addEventListener(\"load\", listener);\n  }\n  iframeEl.addEventListener(\"load\", listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n  let fired = false;\n  let styleSheetLoaded;\n  try {\n    styleSheetLoaded = link.sheet;\n  } catch (error) {\n    return;\n  }\n  if (styleSheetLoaded) return;\n  const timer = setTimeout(() => {\n    if (!fired) {\n      listener();\n      fired = true;\n    }\n  }, styleSheetLoadTimeout);\n  link.addEventListener(\"load\", () => {\n    clearTimeout(timer);\n    fired = true;\n    listener();\n  });\n}\nfunction serializeNode(n, options) {\n  const {\n    doc,\n    mirror: mirror2,\n    blockClass,\n    blockSelector,\n    needsMask,\n    inlineStylesheet,\n    maskInputOptions = {},\n    maskTextFn,\n    maskInputFn,\n    dataURLOptions = {},\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement = false,\n    cssCaptured = false\n  } = options;\n  const rootId = getRootId(doc, mirror2);\n  switch (n.nodeType) {\n    case n.DOCUMENT_NODE:\n      if (n.compatMode !== \"CSS1Compat\") {\n        return {\n          type: NodeType.Document,\n          childNodes: [],\n          compatMode: n.compatMode\n          // probably \"BackCompat\"\n        };\n      } else {\n        return {\n          type: NodeType.Document,\n          childNodes: []\n        };\n      }\n    case n.DOCUMENT_TYPE_NODE:\n      return {\n        type: NodeType.DocumentType,\n        name: n.name,\n        publicId: n.publicId,\n        systemId: n.systemId,\n        rootId\n      };\n    case n.ELEMENT_NODE:\n      return serializeElementNode(n, {\n        doc,\n        blockClass,\n        blockSelector,\n        inlineStylesheet,\n        maskInputOptions,\n        maskInputFn,\n        dataURLOptions,\n        inlineImages,\n        recordCanvas,\n        keepIframeSrcFn,\n        newlyAddedElement,\n        rootId\n      });\n    case n.TEXT_NODE:\n      return serializeTextNode(n, {\n        doc,\n        needsMask,\n        maskTextFn,\n        rootId,\n        cssCaptured\n      });\n    case n.CDATA_SECTION_NODE:\n      return {\n        type: NodeType.CDATA,\n        textContent: \"\",\n        rootId\n      };\n    case n.COMMENT_NODE:\n      return {\n        type: NodeType.Comment,\n        textContent: index.textContent(n) || \"\",\n        rootId\n      };\n    default:\n      return false;\n  }\n}\nfunction getRootId(doc, mirror2) {\n  if (!mirror2.hasNode(doc)) return void 0;\n  const docId = mirror2.getId(doc);\n  return docId === 1 ? void 0 : docId;\n}\nfunction serializeTextNode(n, options) {\n  const { needsMask, maskTextFn, rootId, cssCaptured } = options;\n  const parent = index.parentNode(n);\n  const parentTagName = parent && parent.tagName;\n  let textContent2 = \"\";\n  const isStyle = parentTagName === \"STYLE\" ? true : void 0;\n  const isScript = parentTagName === \"SCRIPT\" ? true : void 0;\n  if (isScript) {\n    textContent2 = \"SCRIPT_PLACEHOLDER\";\n  } else if (!cssCaptured) {\n    textContent2 = index.textContent(n);\n    if (isStyle && textContent2) {\n      textContent2 = absolutifyURLs(textContent2, getHref(options.doc));\n    }\n  }\n  if (!isStyle && !isScript && textContent2 && needsMask) {\n    textContent2 = maskTextFn ? maskTextFn(textContent2, index.parentElement(n)) : textContent2.replace(/[\\S]/g, \"*\");\n  }\n  return {\n    type: NodeType.Text,\n    textContent: textContent2 || \"\",\n    rootId\n  };\n}\nfunction serializeElementNode(n, options) {\n  const {\n    doc,\n    blockClass,\n    blockSelector,\n    inlineStylesheet,\n    maskInputOptions = {},\n    maskInputFn,\n    dataURLOptions = {},\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement = false,\n    rootId\n  } = options;\n  const needBlock = _isBlockedElement(n, blockClass, blockSelector);\n  const tagName = getValidTagName(n);\n  let attributes = {};\n  const len = n.attributes.length;\n  for (let i = 0; i < len; i++) {\n    const attr = n.attributes[i];\n    if (!ignoreAttribute(tagName, attr.name, attr.value)) {\n      attributes[attr.name] = transformAttribute(\n        doc,\n        tagName,\n        toLowerCase(attr.name),\n        attr.value\n      );\n    }\n  }\n  if (tagName === \"link\" && inlineStylesheet) {\n    const stylesheet = Array.from(doc.styleSheets).find((s) => {\n      return s.href === n.href;\n    });\n    let cssText = null;\n    if (stylesheet) {\n      cssText = stringifyStylesheet(stylesheet);\n    }\n    if (cssText) {\n      delete attributes.rel;\n      delete attributes.href;\n      attributes._cssText = cssText;\n    }\n  }\n  if (tagName === \"style\" && n.sheet) {\n    let cssText = stringifyStylesheet(\n      n.sheet\n    );\n    if (cssText) {\n      if (n.childNodes.length > 1) {\n        cssText = markCssSplits(cssText, n);\n      }\n      attributes._cssText = cssText;\n    }\n  }\n  if ([\"input\", \"textarea\", \"select\"].includes(tagName)) {\n    const value = n.value;\n    const checked = n.checked;\n    if (attributes.type !== \"radio\" && attributes.type !== \"checkbox\" && attributes.type !== \"submit\" && attributes.type !== \"button\" && value) {\n      attributes.value = maskInputValue({\n        element: n,\n        type: getInputType(n),\n        tagName,\n        value,\n        maskInputOptions,\n        maskInputFn\n      });\n    } else if (checked) {\n      attributes.checked = checked;\n    }\n  }\n  if (tagName === \"option\") {\n    if (n.selected && !maskInputOptions[\"select\"]) {\n      attributes.selected = true;\n    } else {\n      delete attributes.selected;\n    }\n  }\n  if (tagName === \"dialog\" && n.open) {\n    attributes.rr_open_mode = n.matches(\"dialog:modal\") ? \"modal\" : \"non-modal\";\n  }\n  if (tagName === \"canvas\" && recordCanvas) {\n    if (n.__context === \"2d\") {\n      if (!is2DCanvasBlank(n)) {\n        attributes.rr_dataURL = n.toDataURL(\n          dataURLOptions.type,\n          dataURLOptions.quality\n        );\n      }\n    } else if (!(\"__context\" in n)) {\n      const canvasDataURL = n.toDataURL(\n        dataURLOptions.type,\n        dataURLOptions.quality\n      );\n      const blankCanvas = doc.createElement(\"canvas\");\n      blankCanvas.width = n.width;\n      blankCanvas.height = n.height;\n      const blankCanvasDataURL = blankCanvas.toDataURL(\n        dataURLOptions.type,\n        dataURLOptions.quality\n      );\n      if (canvasDataURL !== blankCanvasDataURL) {\n        attributes.rr_dataURL = canvasDataURL;\n      }\n    }\n  }\n  if (tagName === \"img\" && inlineImages) {\n    if (!canvasService) {\n      canvasService = doc.createElement(\"canvas\");\n      canvasCtx = canvasService.getContext(\"2d\");\n    }\n    const image = n;\n    const imageSrc = image.currentSrc || image.getAttribute(\"src\") || \"<unknown-src>\";\n    const priorCrossOrigin = image.crossOrigin;\n    const recordInlineImage = () => {\n      image.removeEventListener(\"load\", recordInlineImage);\n      try {\n        canvasService.width = image.naturalWidth;\n        canvasService.height = image.naturalHeight;\n        canvasCtx.drawImage(image, 0, 0);\n        attributes.rr_dataURL = canvasService.toDataURL(\n          dataURLOptions.type,\n          dataURLOptions.quality\n        );\n      } catch (err) {\n        if (image.crossOrigin !== \"anonymous\") {\n          image.crossOrigin = \"anonymous\";\n          if (image.complete && image.naturalWidth !== 0)\n            recordInlineImage();\n          else image.addEventListener(\"load\", recordInlineImage);\n          return;\n        } else {\n          console.warn(\n            `Cannot inline img src=${imageSrc}! Error: ${err}`\n          );\n        }\n      }\n      if (image.crossOrigin === \"anonymous\") {\n        priorCrossOrigin ? attributes.crossOrigin = priorCrossOrigin : image.removeAttribute(\"crossorigin\");\n      }\n    };\n    if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n    else image.addEventListener(\"load\", recordInlineImage);\n  }\n  if ([\"audio\", \"video\"].includes(tagName)) {\n    const mediaAttributes = attributes;\n    mediaAttributes.rr_mediaState = n.paused ? \"paused\" : \"played\";\n    mediaAttributes.rr_mediaCurrentTime = n.currentTime;\n    mediaAttributes.rr_mediaPlaybackRate = n.playbackRate;\n    mediaAttributes.rr_mediaMuted = n.muted;\n    mediaAttributes.rr_mediaLoop = n.loop;\n    mediaAttributes.rr_mediaVolume = n.volume;\n  }\n  if (!newlyAddedElement) {\n    if (n.scrollLeft) {\n      attributes.rr_scrollLeft = n.scrollLeft;\n    }\n    if (n.scrollTop) {\n      attributes.rr_scrollTop = n.scrollTop;\n    }\n  }\n  if (needBlock) {\n    const { width, height } = n.getBoundingClientRect();\n    attributes = {\n      class: attributes.class,\n      rr_width: `${width}px`,\n      rr_height: `${height}px`\n    };\n  }\n  if (tagName === \"iframe\" && !keepIframeSrcFn(attributes.src)) {\n    if (!n.contentDocument) {\n      attributes.rr_src = attributes.src;\n    }\n    delete attributes.src;\n  }\n  let isCustomElement;\n  try {\n    if (customElements.get(tagName)) isCustomElement = true;\n  } catch (e) {\n  }\n  return {\n    type: NodeType.Element,\n    tagName,\n    attributes,\n    childNodes: [],\n    isSVG: isSVGElement(n) || void 0,\n    needBlock,\n    rootId,\n    isCustom: isCustomElement\n  };\n}\nfunction lowerIfExists(maybeAttr) {\n  if (maybeAttr === void 0 || maybeAttr === null) {\n    return \"\";\n  } else {\n    return maybeAttr.toLowerCase();\n  }\n}\nfunction slimDOMDefaults(_slimDOMOptions) {\n  if (_slimDOMOptions === true || _slimDOMOptions === \"all\") {\n    return {\n      script: true,\n      comment: true,\n      headFavicon: true,\n      headWhitespace: true,\n      headMetaSocial: true,\n      headMetaRobots: true,\n      headMetaHttpEquiv: true,\n      headMetaVerification: true,\n      // the following are off for slimDOMOptions === true,\n      // as they destroy some (hidden) info:\n      headMetaAuthorship: _slimDOMOptions === \"all\",\n      headMetaDescKeywords: _slimDOMOptions === \"all\",\n      headTitleMutations: _slimDOMOptions === \"all\"\n    };\n  } else if (_slimDOMOptions) {\n    return _slimDOMOptions;\n  }\n  return {};\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n  if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\n    return true;\n  } else if (sn.type === NodeType.Element) {\n    if (slimDOMOptions.script && // script tag\n    (sn.tagName === \"script\" || // (module)preload link\n    sn.tagName === \"link\" && (sn.attributes.rel === \"preload\" && sn.attributes.as === \"script\" || sn.attributes.rel === \"modulepreload\") || // prefetch link\n    sn.tagName === \"link\" && sn.attributes.rel === \"prefetch\" && typeof sn.attributes.href === \"string\" && extractFileExtension(sn.attributes.href) === \"js\")) {\n      return true;\n    } else if (slimDOMOptions.headFavicon && (sn.tagName === \"link\" && sn.attributes.rel === \"shortcut icon\" || sn.tagName === \"meta\" && (lowerIfExists(sn.attributes.name).match(\n      /^msapplication-tile(image|color)$/\n    ) || lowerIfExists(sn.attributes.name) === \"application-name\" || lowerIfExists(sn.attributes.rel) === \"icon\" || lowerIfExists(sn.attributes.rel) === \"apple-touch-icon\" || lowerIfExists(sn.attributes.rel) === \"shortcut icon\"))) {\n      return true;\n    } else if (sn.tagName === \"meta\") {\n      if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n        return true;\n      } else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)\n      lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === \"pinterest\")) {\n        return true;\n      } else if (slimDOMOptions.headMetaRobots && (lowerIfExists(sn.attributes.name) === \"robots\" || lowerIfExists(sn.attributes.name) === \"googlebot\" || lowerIfExists(sn.attributes.name) === \"bingbot\")) {\n        return true;\n      } else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes[\"http-equiv\"] !== void 0) {\n        return true;\n      } else if (slimDOMOptions.headMetaAuthorship && (lowerIfExists(sn.attributes.name) === \"author\" || lowerIfExists(sn.attributes.name) === \"generator\" || lowerIfExists(sn.attributes.name) === \"framework\" || lowerIfExists(sn.attributes.name) === \"publisher\" || lowerIfExists(sn.attributes.name) === \"progid\" || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) {\n        return true;\n      } else if (slimDOMOptions.headMetaVerification && (lowerIfExists(sn.attributes.name) === \"google-site-verification\" || lowerIfExists(sn.attributes.name) === \"yandex-verification\" || lowerIfExists(sn.attributes.name) === \"csrf-token\" || lowerIfExists(sn.attributes.name) === \"p:domain_verify\" || lowerIfExists(sn.attributes.name) === \"verify-v1\" || lowerIfExists(sn.attributes.name) === \"verification\" || lowerIfExists(sn.attributes.name) === \"shopify-checkout-api-token\")) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\nfunction serializeNodeWithId(n, options) {\n  const {\n    doc,\n    mirror: mirror2,\n    blockClass,\n    blockSelector,\n    maskTextClass,\n    maskTextSelector,\n    skipChild = false,\n    inlineStylesheet = true,\n    maskInputOptions = {},\n    maskTextFn,\n    maskInputFn,\n    slimDOMOptions,\n    dataURLOptions = {},\n    inlineImages = false,\n    recordCanvas = false,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout = 5e3,\n    onStylesheetLoad,\n    stylesheetLoadTimeout = 5e3,\n    keepIframeSrcFn = () => false,\n    newlyAddedElement = false,\n    cssCaptured = false\n  } = options;\n  let { needsMask } = options;\n  let { preserveWhiteSpace = true } = options;\n  if (!needsMask) {\n    const checkAncestors = needsMask === void 0;\n    needsMask = needMaskingText(\n      n,\n      maskTextClass,\n      maskTextSelector,\n      checkAncestors\n    );\n  }\n  const _serializedNode = serializeNode(n, {\n    doc,\n    mirror: mirror2,\n    blockClass,\n    blockSelector,\n    needsMask,\n    inlineStylesheet,\n    maskInputOptions,\n    maskTextFn,\n    maskInputFn,\n    dataURLOptions,\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement,\n    cssCaptured\n  });\n  if (!_serializedNode) {\n    console.warn(n, \"not serialized\");\n    return null;\n  }\n  let id;\n  if (mirror2.hasNode(n)) {\n    id = mirror2.getId(n);\n  } else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === NodeType.Text && !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, \"\").length) {\n    id = IGNORED_NODE;\n  } else {\n    id = genId();\n  }\n  const serializedNode = Object.assign(_serializedNode, { id });\n  mirror2.add(n, serializedNode);\n  if (id === IGNORED_NODE) {\n    return null;\n  }\n  if (onSerialize) {\n    onSerialize(n);\n  }\n  let recordChild = !skipChild;\n  if (serializedNode.type === NodeType.Element) {\n    recordChild = recordChild && !serializedNode.needBlock;\n    delete serializedNode.needBlock;\n    const shadowRootEl = index.shadowRoot(n);\n    if (shadowRootEl && isNativeShadowDom(shadowRootEl))\n      serializedNode.isShadowHost = true;\n  }\n  if ((serializedNode.type === NodeType.Document || serializedNode.type === NodeType.Element) && recordChild) {\n    if (slimDOMOptions.headWhitespace && serializedNode.type === NodeType.Element && serializedNode.tagName === \"head\") {\n      preserveWhiteSpace = false;\n    }\n    const bypassOptions = {\n      doc,\n      mirror: mirror2,\n      blockClass,\n      blockSelector,\n      needsMask,\n      maskTextClass,\n      maskTextSelector,\n      skipChild,\n      inlineStylesheet,\n      maskInputOptions,\n      maskTextFn,\n      maskInputFn,\n      slimDOMOptions,\n      dataURLOptions,\n      inlineImages,\n      recordCanvas,\n      preserveWhiteSpace,\n      onSerialize,\n      onIframeLoad,\n      iframeLoadTimeout,\n      onStylesheetLoad,\n      stylesheetLoadTimeout,\n      keepIframeSrcFn,\n      cssCaptured: false\n    };\n    if (serializedNode.type === NodeType.Element && serializedNode.tagName === \"textarea\" && serializedNode.attributes.value !== void 0) ;\n    else {\n      if (serializedNode.type === NodeType.Element && serializedNode.attributes._cssText !== void 0 && typeof serializedNode.attributes._cssText === \"string\") {\n        bypassOptions.cssCaptured = true;\n      }\n      for (const childN of Array.from(index.childNodes(n))) {\n        const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n        if (serializedChildNode) {\n          serializedNode.childNodes.push(serializedChildNode);\n        }\n      }\n    }\n    let shadowRootEl = null;\n    if (isElement(n) && (shadowRootEl = index.shadowRoot(n))) {\n      for (const childN of Array.from(index.childNodes(shadowRootEl))) {\n        const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n        if (serializedChildNode) {\n          isNativeShadowDom(shadowRootEl) && (serializedChildNode.isShadow = true);\n          serializedNode.childNodes.push(serializedChildNode);\n        }\n      }\n    }\n  }\n  const parent = index.parentNode(n);\n  if (parent && isShadowRoot(parent) && isNativeShadowDom(parent)) {\n    serializedNode.isShadow = true;\n  }\n  if (serializedNode.type === NodeType.Element && serializedNode.tagName === \"iframe\") {\n    onceIframeLoaded(\n      n,\n      () => {\n        const iframeDoc = n.contentDocument;\n        if (iframeDoc && onIframeLoad) {\n          const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n            doc: iframeDoc,\n            mirror: mirror2,\n            blockClass,\n            blockSelector,\n            needsMask,\n            maskTextClass,\n            maskTextSelector,\n            skipChild: false,\n            inlineStylesheet,\n            maskInputOptions,\n            maskTextFn,\n            maskInputFn,\n            slimDOMOptions,\n            dataURLOptions,\n            inlineImages,\n            recordCanvas,\n            preserveWhiteSpace,\n            onSerialize,\n            onIframeLoad,\n            iframeLoadTimeout,\n            onStylesheetLoad,\n            stylesheetLoadTimeout,\n            keepIframeSrcFn\n          });\n          if (serializedIframeNode) {\n            onIframeLoad(\n              n,\n              serializedIframeNode\n            );\n          }\n        }\n      },\n      iframeLoadTimeout\n    );\n  }\n  if (serializedNode.type === NodeType.Element && serializedNode.tagName === \"link\" && typeof serializedNode.attributes.rel === \"string\" && (serializedNode.attributes.rel === \"stylesheet\" || serializedNode.attributes.rel === \"preload\" && typeof serializedNode.attributes.href === \"string\" && extractFileExtension(serializedNode.attributes.href) === \"css\")) {\n    onceStylesheetLoaded(\n      n,\n      () => {\n        if (onStylesheetLoad) {\n          const serializedLinkNode = serializeNodeWithId(n, {\n            doc,\n            mirror: mirror2,\n            blockClass,\n            blockSelector,\n            needsMask,\n            maskTextClass,\n            maskTextSelector,\n            skipChild: false,\n            inlineStylesheet,\n            maskInputOptions,\n            maskTextFn,\n            maskInputFn,\n            slimDOMOptions,\n            dataURLOptions,\n            inlineImages,\n            recordCanvas,\n            preserveWhiteSpace,\n            onSerialize,\n            onIframeLoad,\n            iframeLoadTimeout,\n            onStylesheetLoad,\n            stylesheetLoadTimeout,\n            keepIframeSrcFn\n          });\n          if (serializedLinkNode) {\n            onStylesheetLoad(\n              n,\n              serializedLinkNode\n            );\n          }\n        }\n      },\n      stylesheetLoadTimeout\n    );\n  }\n  return serializedNode;\n}\nfunction snapshot(n, options) {\n  const {\n    mirror: mirror2 = new Mirror(),\n    blockClass = \"rr-block\",\n    blockSelector = null,\n    maskTextClass = \"rr-mask\",\n    maskTextSelector = null,\n    inlineStylesheet = true,\n    inlineImages = false,\n    recordCanvas = false,\n    maskAllInputs = false,\n    maskTextFn,\n    maskInputFn,\n    slimDOM = false,\n    dataURLOptions,\n    preserveWhiteSpace,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout,\n    onStylesheetLoad,\n    stylesheetLoadTimeout,\n    keepIframeSrcFn = () => false\n  } = options;\n  const maskInputOptions = maskAllInputs === true ? {\n    color: true,\n    date: true,\n    \"datetime-local\": true,\n    email: true,\n    month: true,\n    number: true,\n    range: true,\n    search: true,\n    tel: true,\n    text: true,\n    time: true,\n    url: true,\n    week: true,\n    textarea: true,\n    select: true,\n    password: true\n  } : maskAllInputs === false ? {\n    password: true\n  } : maskAllInputs;\n  const slimDOMOptions = slimDOMDefaults(slimDOM);\n  return serializeNodeWithId(n, {\n    doc: n,\n    mirror: mirror2,\n    blockClass,\n    blockSelector,\n    maskTextClass,\n    maskTextSelector,\n    skipChild: false,\n    inlineStylesheet,\n    maskInputOptions,\n    maskTextFn,\n    maskInputFn,\n    slimDOMOptions,\n    dataURLOptions,\n    inlineImages,\n    recordCanvas,\n    preserveWhiteSpace,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout,\n    onStylesheetLoad,\n    stylesheetLoadTimeout,\n    keepIframeSrcFn,\n    newlyAddedElement: false\n  });\n}\nclass BaseRRNode {\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n  constructor(..._args) {\n    __publicField(this, \"parentElement\", null);\n    __publicField(this, \"parentNode\", null);\n    __publicField(this, \"ownerDocument\");\n    __publicField(this, \"firstChild\", null);\n    __publicField(this, \"lastChild\", null);\n    __publicField(this, \"previousSibling\", null);\n    __publicField(this, \"nextSibling\", null);\n    __publicField(this, \"ELEMENT_NODE\", 1);\n    __publicField(this, \"TEXT_NODE\", 3);\n    // corresponding nodeType value of standard HTML Node\n    __publicField(this, \"nodeType\");\n    __publicField(this, \"nodeName\");\n    __publicField(this, \"RRNodeType\");\n  }\n  get childNodes() {\n    const childNodes2 = [];\n    let childIterator = this.firstChild;\n    while (childIterator) {\n      childNodes2.push(childIterator);\n      childIterator = childIterator.nextSibling;\n    }\n    return childNodes2;\n  }\n  contains(node) {\n    if (!(node instanceof BaseRRNode)) return false;\n    else if (node.ownerDocument !== this.ownerDocument) return false;\n    else if (node === this) return true;\n    while (node.parentNode) {\n      if (node.parentNode === this) return true;\n      node = node.parentNode;\n    }\n    return false;\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  appendChild(_newChild) {\n    throw new Error(\n      `RRDomException: Failed to execute 'appendChild' on 'RRNode': This RRNode type does not support this method.`\n    );\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  insertBefore(_newChild, _refChild) {\n    throw new Error(\n      `RRDomException: Failed to execute 'insertBefore' on 'RRNode': This RRNode type does not support this method.`\n    );\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  removeChild(_node) {\n    throw new Error(\n      `RRDomException: Failed to execute 'removeChild' on 'RRNode': This RRNode type does not support this method.`\n    );\n  }\n  toString() {\n    return \"RRNode\";\n  }\n}\nfunction on(type, fn, target = document) {\n  const options = { capture: true, passive: true };\n  target.addEventListener(type, fn, options);\n  return () => target.removeEventListener(type, fn, options);\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = \"Please stop import mirror directly. Instead of that,\\r\\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\\r\\nor you can use record.mirror to access the mirror instance during recording.\";\nlet _mirror = {\n  map: {},\n  getId() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return -1;\n  },\n  getNode() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return null;\n  },\n  removeNodeFromMap() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n  },\n  has() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return false;\n  },\n  reset() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n  }\n};\nif (typeof window !== \"undefined\" && window.Proxy && window.Reflect) {\n  _mirror = new Proxy(_mirror, {\n    get(target, prop, receiver) {\n      if (prop === \"map\") {\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction throttle(func, wait, options = {}) {\n  let timeout = null;\n  let previous = 0;\n  return function(...args) {\n    const now = Date.now();\n    if (!previous && options.leading === false) {\n      previous = now;\n    }\n    const remaining = wait - (now - previous);\n    const context = this;\n    if (remaining <= 0 || remaining > wait) {\n      if (timeout) {\n        clearTimeout(timeout);\n        timeout = null;\n      }\n      previous = now;\n      func.apply(context, args);\n    } else if (!timeout && options.trailing !== false) {\n      timeout = setTimeout(() => {\n        previous = options.leading === false ? 0 : Date.now();\n        timeout = null;\n        func.apply(context, args);\n      }, remaining);\n    }\n  };\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n  const original = win.Object.getOwnPropertyDescriptor(target, key);\n  win.Object.defineProperty(\n    target,\n    key,\n    isRevoked ? d : {\n      set(value) {\n        setTimeout(() => {\n          d.set.call(this, value);\n        }, 0);\n        if (original && original.set) {\n          original.set.call(this, value);\n        }\n      }\n    }\n  );\n  return () => hookSetter(target, key, original || {}, true);\n}\nfunction getWindowScroll(win) {\n  var _a2, _b, _c, _d;\n  const doc = win.document;\n  return {\n    left: doc.scrollingElement ? doc.scrollingElement.scrollLeft : win.pageXOffset !== void 0 ? win.pageXOffset : doc.documentElement.scrollLeft || (doc == null ? void 0 : doc.body) && ((_a2 = index.parentElement(doc.body)) == null ? void 0 : _a2.scrollLeft) || ((_b = doc == null ? void 0 : doc.body) == null ? void 0 : _b.scrollLeft) || 0,\n    top: doc.scrollingElement ? doc.scrollingElement.scrollTop : win.pageYOffset !== void 0 ? win.pageYOffset : (doc == null ? void 0 : doc.documentElement.scrollTop) || (doc == null ? void 0 : doc.body) && ((_c = index.parentElement(doc.body)) == null ? void 0 : _c.scrollTop) || ((_d = doc == null ? void 0 : doc.body) == null ? void 0 : _d.scrollTop) || 0\n  };\n}\nfunction getWindowHeight() {\n  return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;\n}\nfunction getWindowWidth() {\n  return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;\n}\nfunction closestElementOfNode(node) {\n  if (!node) {\n    return null;\n  }\n  const el = node.nodeType === node.ELEMENT_NODE ? node : index.parentElement(node);\n  return el;\n}\nfunction isBlocked(node, blockClass, blockSelector, checkAncestors) {\n  if (!node) {\n    return false;\n  }\n  const el = closestElementOfNode(node);\n  if (!el) {\n    return false;\n  }\n  try {\n    if (typeof blockClass === \"string\") {\n      if (el.classList.contains(blockClass)) return true;\n      if (checkAncestors && el.closest(\".\" + blockClass) !== null) return true;\n    } else {\n      if (classMatchesRegex(el, blockClass, checkAncestors)) return true;\n    }\n  } catch (e) {\n  }\n  if (blockSelector) {\n    if (el.matches(blockSelector)) return true;\n    if (checkAncestors && el.closest(blockSelector) !== null) return true;\n  }\n  return false;\n}\nfunction isSerialized(n, mirror2) {\n  return mirror2.getId(n) !== -1;\n}\nfunction isIgnored(n, mirror2, slimDOMOptions) {\n  if (n.tagName === \"TITLE\" && slimDOMOptions.headTitleMutations) {\n    return true;\n  }\n  return mirror2.getId(n) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror2) {\n  if (isShadowRoot(target)) {\n    return false;\n  }\n  const id = mirror2.getId(target);\n  if (!mirror2.has(id)) {\n    return true;\n  }\n  const parent = index.parentNode(target);\n  if (parent && parent.nodeType === target.DOCUMENT_NODE) {\n    return false;\n  }\n  if (!parent) {\n    return true;\n  }\n  return isAncestorRemoved(parent, mirror2);\n}\nfunction legacy_isTouchEvent(event) {\n  return Boolean(event.changedTouches);\n}\nfunction polyfill(win = window) {\n  if (\"NodeList\" in win && !win.NodeList.prototype.forEach) {\n    win.NodeList.prototype.forEach = Array.prototype.forEach;\n  }\n  if (\"DOMTokenList\" in win && !win.DOMTokenList.prototype.forEach) {\n    win.DOMTokenList.prototype.forEach = Array.prototype.forEach;\n  }\n}\nfunction isSerializedIframe(n, mirror2) {\n  return Boolean(n.nodeName === \"IFRAME\" && mirror2.getMeta(n));\n}\nfunction isSerializedStylesheet(n, mirror2) {\n  return Boolean(\n    n.nodeName === \"LINK\" && n.nodeType === n.ELEMENT_NODE && n.getAttribute && n.getAttribute(\"rel\") === \"stylesheet\" && mirror2.getMeta(n)\n  );\n}\nfunction hasShadowRoot(n) {\n  if (!n) return false;\n  if (n instanceof BaseRRNode && \"shadowRoot\" in n) {\n    return Boolean(n.shadowRoot);\n  }\n  return Boolean(index.shadowRoot(n));\n}\nclass StyleSheetMirror {\n  constructor() {\n    __publicField(this, \"id\", 1);\n    __publicField(this, \"styleIDMap\", /* @__PURE__ */ new WeakMap());\n    __publicField(this, \"idStyleMap\", /* @__PURE__ */ new Map());\n  }\n  getId(stylesheet) {\n    return this.styleIDMap.get(stylesheet) ?? -1;\n  }\n  has(stylesheet) {\n    return this.styleIDMap.has(stylesheet);\n  }\n  /**\n   * @returns If the stylesheet is in the mirror, returns the id of the stylesheet. If not, return the new assigned id.\n   */\n  add(stylesheet, id) {\n    if (this.has(stylesheet)) return this.getId(stylesheet);\n    let newId;\n    if (id === void 0) {\n      newId = this.id++;\n    } else newId = id;\n    this.styleIDMap.set(stylesheet, newId);\n    this.idStyleMap.set(newId, stylesheet);\n    return newId;\n  }\n  getStyle(id) {\n    return this.idStyleMap.get(id) || null;\n  }\n  reset() {\n    this.styleIDMap = /* @__PURE__ */ new WeakMap();\n    this.idStyleMap = /* @__PURE__ */ new Map();\n    this.id = 1;\n  }\n  generateId() {\n    return this.id++;\n  }\n}\nfunction getShadowHost(n) {\n  var _a2;\n  let shadowHost = null;\n  if (\"getRootNode\" in n && ((_a2 = index.getRootNode(n)) == null ? void 0 : _a2.nodeType) === Node.DOCUMENT_FRAGMENT_NODE && index.host(index.getRootNode(n)))\n    shadowHost = index.host(index.getRootNode(n));\n  return shadowHost;\n}\nfunction getRootShadowHost(n) {\n  let rootShadowHost = n;\n  let shadowHost;\n  while (shadowHost = getShadowHost(rootShadowHost))\n    rootShadowHost = shadowHost;\n  return rootShadowHost;\n}\nfunction shadowHostInDom(n) {\n  const doc = index.ownerDocument(n);\n  if (!doc) return false;\n  const shadowHost = getRootShadowHost(n);\n  return index.contains(doc, shadowHost);\n}\nfunction inDom(n) {\n  const doc = index.ownerDocument(n);\n  if (!doc) return false;\n  return index.contains(doc, n) || shadowHostInDom(n);\n}\nfunction isNodeInLinkedList(n) {\n  return \"__ln\" in n;\n}\nclass DoubleLinkedList {\n  constructor() {\n    __publicField(this, \"length\", 0);\n    __publicField(this, \"head\", null);\n    __publicField(this, \"tail\", null);\n  }\n  get(position) {\n    if (position >= this.length) {\n      throw new Error(\"Position outside of list range\");\n    }\n    let current = this.head;\n    for (let index2 = 0; index2 < position; index2++) {\n      current = (current == null ? void 0 : current.next) || null;\n    }\n    return current;\n  }\n  addNode(n) {\n    const node = {\n      value: n,\n      previous: null,\n      next: null\n    };\n    n.__ln = node;\n    if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\n      const current = n.previousSibling.__ln.next;\n      node.next = current;\n      node.previous = n.previousSibling.__ln;\n      n.previousSibling.__ln.next = node;\n      if (current) {\n        current.previous = node;\n      }\n    } else if (n.nextSibling && isNodeInLinkedList(n.nextSibling) && n.nextSibling.__ln.previous) {\n      const current = n.nextSibling.__ln.previous;\n      node.previous = current;\n      node.next = n.nextSibling.__ln;\n      n.nextSibling.__ln.previous = node;\n      if (current) {\n        current.next = node;\n      }\n    } else {\n      if (this.head) {\n        this.head.previous = node;\n      }\n      node.next = this.head;\n      this.head = node;\n    }\n    if (node.next === null) {\n      this.tail = node;\n    }\n    this.length++;\n  }\n  removeNode(n) {\n    const current = n.__ln;\n    if (!this.head) {\n      return;\n    }\n    if (!current.previous) {\n      this.head = current.next;\n      if (this.head) {\n        this.head.previous = null;\n      } else {\n        this.tail = null;\n      }\n    } else {\n      current.previous.next = current.next;\n      if (current.next) {\n        current.next.previous = current.previous;\n      } else {\n        this.tail = current.previous;\n      }\n    }\n    if (n.__ln) {\n      delete n.__ln;\n    }\n    this.length--;\n  }\n}\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\nclass MutationBuffer {\n  constructor() {\n    __publicField(this, \"frozen\", false);\n    __publicField(this, \"locked\", false);\n    __publicField(this, \"texts\", []);\n    __publicField(this, \"attributes\", []);\n    __publicField(this, \"attributeMap\", /* @__PURE__ */ new WeakMap());\n    __publicField(this, \"removes\", []);\n    __publicField(this, \"mapRemoves\", []);\n    __publicField(this, \"movedMap\", {});\n    /**\n     * the browser MutationObserver emits multiple mutations after\n     * a delay for performance reasons, making tracing added nodes hard\n     * in our `processMutations` callback function.\n     * For example, if we append an element el_1 into body, and then append\n     * another element el_2 into el_1, these two mutations may be passed to the\n     * callback function together when the two operations were done.\n     * Generally we need to trace child nodes of newly added nodes, but in this\n     * case if we count el_2 as el_1's child node in the first mutation record,\n     * then we will count el_2 again in the second mutation record which was\n     * duplicated.\n     * To avoid of duplicate counting added nodes, we use a Set to store\n     * added nodes and its child nodes during iterate mutation records. Then\n     * collect added nodes from the Set which have no duplicate copy. But\n     * this also causes newly added nodes will not be serialized with id ASAP,\n     * which means all the id related calculation should be lazy too.\n     */\n    __publicField(this, \"addedSet\", /* @__PURE__ */ new Set());\n    __publicField(this, \"movedSet\", /* @__PURE__ */ new Set());\n    __publicField(this, \"droppedSet\", /* @__PURE__ */ new Set());\n    __publicField(this, \"removesSubTreeCache\", /* @__PURE__ */ new Set());\n    __publicField(this, \"mutationCb\");\n    __publicField(this, \"blockClass\");\n    __publicField(this, \"blockSelector\");\n    __publicField(this, \"maskTextClass\");\n    __publicField(this, \"maskTextSelector\");\n    __publicField(this, \"inlineStylesheet\");\n    __publicField(this, \"maskInputOptions\");\n    __publicField(this, \"maskTextFn\");\n    __publicField(this, \"maskInputFn\");\n    __publicField(this, \"keepIframeSrcFn\");\n    __publicField(this, \"recordCanvas\");\n    __publicField(this, \"inlineImages\");\n    __publicField(this, \"slimDOMOptions\");\n    __publicField(this, \"dataURLOptions\");\n    __publicField(this, \"doc\");\n    __publicField(this, \"mirror\");\n    __publicField(this, \"iframeManager\");\n    __publicField(this, \"stylesheetManager\");\n    __publicField(this, \"shadowDomManager\");\n    __publicField(this, \"canvasManager\");\n    __publicField(this, \"processedNodeManager\");\n    __publicField(this, \"unattachedDoc\");\n    __publicField(this, \"processMutations\", (mutations) => {\n      mutations.forEach(this.processMutation);\n      this.emit();\n    });\n    __publicField(this, \"emit\", () => {\n      if (this.frozen || this.locked) {\n        return;\n      }\n      const adds = [];\n      const addedIds = /* @__PURE__ */ new Set();\n      const addList = new DoubleLinkedList();\n      const getNextId = (n) => {\n        let ns = n;\n        let nextId = IGNORED_NODE;\n        while (nextId === IGNORED_NODE) {\n          ns = ns && ns.nextSibling;\n          nextId = ns && this.mirror.getId(ns);\n        }\n        return nextId;\n      };\n      const pushAdd = (n) => {\n        const parent = index.parentNode(n);\n        if (!parent || !inDom(n)) {\n          return;\n        }\n        let cssCaptured = false;\n        if (n.nodeType === Node.TEXT_NODE) {\n          const parentTag = parent.tagName;\n          if (parentTag === \"TEXTAREA\") {\n            return;\n          } else if (parentTag === \"STYLE\" && this.addedSet.has(parent)) {\n            cssCaptured = true;\n          }\n        }\n        const parentId = isShadowRoot(parent) ? this.mirror.getId(getShadowHost(n)) : this.mirror.getId(parent);\n        const nextId = getNextId(n);\n        if (parentId === -1 || nextId === -1) {\n          return addList.addNode(n);\n        }\n        const sn = serializeNodeWithId(n, {\n          doc: this.doc,\n          mirror: this.mirror,\n          blockClass: this.blockClass,\n          blockSelector: this.blockSelector,\n          maskTextClass: this.maskTextClass,\n          maskTextSelector: this.maskTextSelector,\n          skipChild: true,\n          newlyAddedElement: true,\n          inlineStylesheet: this.inlineStylesheet,\n          maskInputOptions: this.maskInputOptions,\n          maskTextFn: this.maskTextFn,\n          maskInputFn: this.maskInputFn,\n          slimDOMOptions: this.slimDOMOptions,\n          dataURLOptions: this.dataURLOptions,\n          recordCanvas: this.recordCanvas,\n          inlineImages: this.inlineImages,\n          onSerialize: (currentN) => {\n            if (isSerializedIframe(currentN, this.mirror)) {\n              this.iframeManager.addIframe(currentN);\n            }\n            if (isSerializedStylesheet(currentN, this.mirror)) {\n              this.stylesheetManager.trackLinkElement(\n                currentN\n              );\n            }\n            if (hasShadowRoot(n)) {\n              this.shadowDomManager.addShadowRoot(index.shadowRoot(n), this.doc);\n            }\n          },\n          onIframeLoad: (iframe, childSn) => {\n            this.iframeManager.attachIframe(iframe, childSn);\n            this.shadowDomManager.observeAttachShadow(iframe);\n          },\n          onStylesheetLoad: (link, childSn) => {\n            this.stylesheetManager.attachLinkElement(link, childSn);\n          },\n          cssCaptured\n        });\n        if (sn) {\n          adds.push({\n            parentId,\n            nextId,\n            node: sn\n          });\n          addedIds.add(sn.id);\n        }\n      };\n      while (this.mapRemoves.length) {\n        this.mirror.removeNodeFromMap(this.mapRemoves.shift());\n      }\n      for (const n of this.movedSet) {\n        if (isParentRemoved(this.removesSubTreeCache, n, this.mirror) && !this.movedSet.has(index.parentNode(n))) {\n          continue;\n        }\n        pushAdd(n);\n      }\n      for (const n of this.addedSet) {\n        if (!isAncestorInSet(this.droppedSet, n) && !isParentRemoved(this.removesSubTreeCache, n, this.mirror)) {\n          pushAdd(n);\n        } else if (isAncestorInSet(this.movedSet, n)) {\n          pushAdd(n);\n        } else {\n          this.droppedSet.add(n);\n        }\n      }\n      let candidate = null;\n      while (addList.length) {\n        let node = null;\n        if (candidate) {\n          const parentId = this.mirror.getId(index.parentNode(candidate.value));\n          const nextId = getNextId(candidate.value);\n          if (parentId !== -1 && nextId !== -1) {\n            node = candidate;\n          }\n        }\n        if (!node) {\n          let tailNode = addList.tail;\n          while (tailNode) {\n            const _node = tailNode;\n            tailNode = tailNode.previous;\n            if (_node) {\n              const parentId = this.mirror.getId(index.parentNode(_node.value));\n              const nextId = getNextId(_node.value);\n              if (nextId === -1) continue;\n              else if (parentId !== -1) {\n                node = _node;\n                break;\n              } else {\n                const unhandledNode = _node.value;\n                const parent = index.parentNode(unhandledNode);\n                if (parent && parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n                  const shadowHost = index.host(parent);\n                  const parentId2 = this.mirror.getId(shadowHost);\n                  if (parentId2 !== -1) {\n                    node = _node;\n                    break;\n                  }\n                }\n              }\n            }\n          }\n        }\n        if (!node) {\n          while (addList.head) {\n            addList.removeNode(addList.head.value);\n          }\n          break;\n        }\n        candidate = node.previous;\n        addList.removeNode(node.value);\n        pushAdd(node.value);\n      }\n      const payload = {\n        texts: this.texts.map((text) => {\n          const n = text.node;\n          const parent = index.parentNode(n);\n          if (parent && parent.tagName === \"TEXTAREA\") {\n            this.genTextAreaValueMutation(parent);\n          }\n          return {\n            id: this.mirror.getId(n),\n            value: text.value\n          };\n        }).filter((text) => !addedIds.has(text.id)).filter((text) => this.mirror.has(text.id)),\n        attributes: this.attributes.map((attribute) => {\n          const { attributes } = attribute;\n          if (typeof attributes.style === \"string\") {\n            const diffAsStr = JSON.stringify(attribute.styleDiff);\n            const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n            if (diffAsStr.length < attributes.style.length) {\n              if ((diffAsStr + unchangedAsStr).split(\"var(\").length === attributes.style.split(\"var(\").length) {\n                attributes.style = attribute.styleDiff;\n              }\n            }\n          }\n          return {\n            id: this.mirror.getId(attribute.node),\n            attributes\n          };\n        }).filter((attribute) => !addedIds.has(attribute.id)).filter((attribute) => this.mirror.has(attribute.id)),\n        removes: this.removes,\n        adds\n      };\n      if (!payload.texts.length && !payload.attributes.length && !payload.removes.length && !payload.adds.length) {\n        return;\n      }\n      this.texts = [];\n      this.attributes = [];\n      this.attributeMap = /* @__PURE__ */ new WeakMap();\n      this.removes = [];\n      this.addedSet = /* @__PURE__ */ new Set();\n      this.movedSet = /* @__PURE__ */ new Set();\n      this.droppedSet = /* @__PURE__ */ new Set();\n      this.removesSubTreeCache = /* @__PURE__ */ new Set();\n      this.movedMap = {};\n      this.mutationCb(payload);\n    });\n    __publicField(this, \"genTextAreaValueMutation\", (textarea) => {\n      let item = this.attributeMap.get(textarea);\n      if (!item) {\n        item = {\n          node: textarea,\n          attributes: {},\n          styleDiff: {},\n          _unchangedStyles: {}\n        };\n        this.attributes.push(item);\n        this.attributeMap.set(textarea, item);\n      }\n      const value = Array.from(\n        index.childNodes(textarea),\n        (cn) => index.textContent(cn) || \"\"\n      ).join(\"\");\n      item.attributes.value = maskInputValue({\n        element: textarea,\n        maskInputOptions: this.maskInputOptions,\n        tagName: textarea.tagName,\n        type: getInputType(textarea),\n        value,\n        maskInputFn: this.maskInputFn\n      });\n    });\n    __publicField(this, \"processMutation\", (m) => {\n      if (isIgnored(m.target, this.mirror, this.slimDOMOptions)) {\n        return;\n      }\n      switch (m.type) {\n        case \"characterData\": {\n          const value = index.textContent(m.target);\n          if (!isBlocked(m.target, this.blockClass, this.blockSelector, false) && value !== m.oldValue) {\n            this.texts.push({\n              value: needMaskingText(\n                m.target,\n                this.maskTextClass,\n                this.maskTextSelector,\n                true\n                // checkAncestors\n              ) && value ? this.maskTextFn ? this.maskTextFn(value, closestElementOfNode(m.target)) : value.replace(/[\\S]/g, \"*\") : value,\n              node: m.target\n            });\n          }\n          break;\n        }\n        case \"attributes\": {\n          const target = m.target;\n          let attributeName = m.attributeName;\n          let value = m.target.getAttribute(attributeName);\n          if (attributeName === \"value\") {\n            const type = getInputType(target);\n            value = maskInputValue({\n              element: target,\n              maskInputOptions: this.maskInputOptions,\n              tagName: target.tagName,\n              type,\n              value,\n              maskInputFn: this.maskInputFn\n            });\n          }\n          if (isBlocked(m.target, this.blockClass, this.blockSelector, false) || value === m.oldValue) {\n            return;\n          }\n          let item = this.attributeMap.get(m.target);\n          if (target.tagName === \"IFRAME\" && attributeName === \"src\" && !this.keepIframeSrcFn(value)) {\n            if (!target.contentDocument) {\n              attributeName = \"rr_src\";\n            } else {\n              return;\n            }\n          }\n          if (!item) {\n            item = {\n              node: m.target,\n              attributes: {},\n              styleDiff: {},\n              _unchangedStyles: {}\n            };\n            this.attributes.push(item);\n            this.attributeMap.set(m.target, item);\n          }\n          if (attributeName === \"type\" && target.tagName === \"INPUT\" && (m.oldValue || \"\").toLowerCase() === \"password\") {\n            target.setAttribute(\"data-rr-is-password\", \"true\");\n          }\n          if (!ignoreAttribute(target.tagName, attributeName)) {\n            item.attributes[attributeName] = transformAttribute(\n              this.doc,\n              toLowerCase(target.tagName),\n              toLowerCase(attributeName),\n              value\n            );\n            if (attributeName === \"style\") {\n              if (!this.unattachedDoc) {\n                try {\n                  this.unattachedDoc = document.implementation.createHTMLDocument();\n                } catch (e) {\n                  this.unattachedDoc = this.doc;\n                }\n              }\n              const old = this.unattachedDoc.createElement(\"span\");\n              if (m.oldValue) {\n                old.setAttribute(\"style\", m.oldValue);\n              }\n              for (const pname of Array.from(target.style)) {\n                const newValue = target.style.getPropertyValue(pname);\n                const newPriority = target.style.getPropertyPriority(pname);\n                if (newValue !== old.style.getPropertyValue(pname) || newPriority !== old.style.getPropertyPriority(pname)) {\n                  if (newPriority === \"\") {\n                    item.styleDiff[pname] = newValue;\n                  } else {\n                    item.styleDiff[pname] = [newValue, newPriority];\n                  }\n                } else {\n                  item._unchangedStyles[pname] = [newValue, newPriority];\n                }\n              }\n              for (const pname of Array.from(old.style)) {\n                if (target.style.getPropertyValue(pname) === \"\") {\n                  item.styleDiff[pname] = false;\n                }\n              }\n            } else if (attributeName === \"open\" && target.tagName === \"DIALOG\") {\n              if (target.matches(\"dialog:modal\")) {\n                item.attributes[\"rr_open_mode\"] = \"modal\";\n              } else {\n                item.attributes[\"rr_open_mode\"] = \"non-modal\";\n              }\n            }\n          }\n          break;\n        }\n        case \"childList\": {\n          if (isBlocked(m.target, this.blockClass, this.blockSelector, true))\n            return;\n          if (m.target.tagName === \"TEXTAREA\") {\n            this.genTextAreaValueMutation(m.target);\n            return;\n          }\n          m.addedNodes.forEach((n) => this.genAdds(n, m.target));\n          m.removedNodes.forEach((n) => {\n            const nodeId = this.mirror.getId(n);\n            const parentId = isShadowRoot(m.target) ? this.mirror.getId(index.host(m.target)) : this.mirror.getId(m.target);\n            if (isBlocked(m.target, this.blockClass, this.blockSelector, false) || isIgnored(n, this.mirror, this.slimDOMOptions) || !isSerialized(n, this.mirror)) {\n              return;\n            }\n            if (this.addedSet.has(n)) {\n              deepDelete(this.addedSet, n);\n              this.droppedSet.add(n);\n            } else if (this.addedSet.has(m.target) && nodeId === -1) ;\n            else if (isAncestorRemoved(m.target, this.mirror)) ;\n            else if (this.movedSet.has(n) && this.movedMap[moveKey(nodeId, parentId)]) {\n              deepDelete(this.movedSet, n);\n            } else {\n              this.removes.push({\n                parentId,\n                id: nodeId,\n                isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target) ? true : void 0\n              });\n              processRemoves(n, this.removesSubTreeCache);\n            }\n            this.mapRemoves.push(n);\n          });\n          break;\n        }\n      }\n    });\n    /**\n     * Make sure you check if `n`'s parent is blocked before calling this function\n     * */\n    __publicField(this, \"genAdds\", (n, target) => {\n      if (this.processedNodeManager.inOtherBuffer(n, this)) return;\n      if (this.addedSet.has(n) || this.movedSet.has(n)) return;\n      if (this.mirror.hasNode(n)) {\n        if (isIgnored(n, this.mirror, this.slimDOMOptions)) {\n          return;\n        }\n        this.movedSet.add(n);\n        let targetId = null;\n        if (target && this.mirror.hasNode(target)) {\n          targetId = this.mirror.getId(target);\n        }\n        if (targetId && targetId !== -1) {\n          this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\n        }\n      } else {\n        this.addedSet.add(n);\n        this.droppedSet.delete(n);\n      }\n      if (!isBlocked(n, this.blockClass, this.blockSelector, false)) {\n        index.childNodes(n).forEach((childN) => this.genAdds(childN));\n        if (hasShadowRoot(n)) {\n          index.childNodes(index.shadowRoot(n)).forEach((childN) => {\n            this.processedNodeManager.add(childN, this);\n            this.genAdds(childN, n);\n          });\n        }\n      }\n    });\n  }\n  init(options) {\n    [\n      \"mutationCb\",\n      \"blockClass\",\n      \"blockSelector\",\n      \"maskTextClass\",\n      \"maskTextSelector\",\n      \"inlineStylesheet\",\n      \"maskInputOptions\",\n      \"maskTextFn\",\n      \"maskInputFn\",\n      \"keepIframeSrcFn\",\n      \"recordCanvas\",\n      \"inlineImages\",\n      \"slimDOMOptions\",\n      \"dataURLOptions\",\n      \"doc\",\n      \"mirror\",\n      \"iframeManager\",\n      \"stylesheetManager\",\n      \"shadowDomManager\",\n      \"canvasManager\",\n      \"processedNodeManager\"\n    ].forEach((key) => {\n      this[key] = options[key];\n    });\n  }\n  freeze() {\n    this.frozen = true;\n    this.canvasManager.freeze();\n  }\n  unfreeze() {\n    this.frozen = false;\n    this.canvasManager.unfreeze();\n    this.emit();\n  }\n  isFrozen() {\n    return this.frozen;\n  }\n  lock() {\n    this.locked = true;\n    this.canvasManager.lock();\n  }\n  unlock() {\n    this.locked = false;\n    this.canvasManager.unlock();\n    this.emit();\n  }\n  reset() {\n    this.shadowDomManager.reset();\n    this.canvasManager.reset();\n  }\n}\nfunction deepDelete(addsSet, n) {\n  addsSet.delete(n);\n  index.childNodes(n).forEach((childN) => deepDelete(addsSet, childN));\n}\nfunction processRemoves(n, cache) {\n  const queue = [n];\n  while (queue.length) {\n    const next = queue.pop();\n    if (cache.has(next)) continue;\n    cache.add(next);\n    index.childNodes(next).forEach((n2) => queue.push(n2));\n  }\n  return;\n}\nfunction isParentRemoved(removes, n, mirror2) {\n  if (removes.size === 0) return false;\n  return _isParentRemoved(removes, n);\n}\nfunction _isParentRemoved(removes, n, _mirror2) {\n  const node = index.parentNode(n);\n  if (!node) return false;\n  return removes.has(node);\n}\nfunction isAncestorInSet(set, n) {\n  if (set.size === 0) return false;\n  return _isAncestorInSet(set, n);\n}\nfunction _isAncestorInSet(set, n) {\n  const parent = index.parentNode(n);\n  if (!parent) {\n    return false;\n  }\n  if (set.has(parent)) {\n    return true;\n  }\n  return _isAncestorInSet(set, parent);\n}\nlet errorHandler;\nfunction registerErrorHandler(handler) {\n  errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n  errorHandler = void 0;\n}\nconst callbackWrapper = (cb) => {\n  if (!errorHandler) {\n    return cb;\n  }\n  const rrwebWrapped = (...rest) => {\n    try {\n      return cb(...rest);\n    } catch (error) {\n      if (errorHandler && errorHandler(error) === true) {\n        return;\n      }\n      throw error;\n    }\n  };\n  return rrwebWrapped;\n};\nconst mutationBuffers = [];\nfunction getEventTarget(event) {\n  try {\n    if (\"composedPath\" in event) {\n      const path = event.composedPath();\n      if (path.length) {\n        return path[0];\n      }\n    } else if (\"path\" in event && event.path.length) {\n      return event.path[0];\n    }\n  } catch {\n  }\n  return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n  const mutationBuffer = new MutationBuffer();\n  mutationBuffers.push(mutationBuffer);\n  mutationBuffer.init(options);\n  const [ObserverCtor, iframeCleanup] = mutationObserverCtor();\n  const observer = new ObserverCtor(\n    callbackWrapper(mutationBuffer.processMutations.bind(mutationBuffer))\n  );\n  observer.observe(rootEl, {\n    attributes: true,\n    attributeOldValue: true,\n    characterData: true,\n    characterDataOldValue: true,\n    childList: true,\n    subtree: true\n  });\n  return [observer, iframeCleanup];\n}\nfunction initMoveObserver({\n  mousemoveCb,\n  sampling,\n  doc,\n  mirror: mirror2\n}) {\n  if (sampling.mousemove === false) {\n    return () => {\n    };\n  }\n  const threshold = typeof sampling.mousemove === \"number\" ? sampling.mousemove : 50;\n  const callbackThreshold = typeof sampling.mousemoveCallback === \"number\" ? sampling.mousemoveCallback : 500;\n  let positions = [];\n  let timeBaseline;\n  const wrappedCb = throttle(\n    callbackWrapper(\n      (source) => {\n        const totalOffset = Date.now() - timeBaseline;\n        mousemoveCb(\n          positions.map((p) => {\n            p.timeOffset -= totalOffset;\n            return p;\n          }),\n          source\n        );\n        positions = [];\n        timeBaseline = null;\n      }\n    ),\n    callbackThreshold\n  );\n  const updatePosition = callbackWrapper(\n    throttle(\n      callbackWrapper((evt) => {\n        const target = getEventTarget(evt);\n        const { clientX, clientY } = legacy_isTouchEvent(evt) ? evt.changedTouches[0] : evt;\n        if (!timeBaseline) {\n          timeBaseline = nowTimestamp();\n        }\n        positions.push({\n          x: clientX,\n          y: clientY,\n          id: mirror2.getId(target),\n          timeOffset: nowTimestamp() - timeBaseline\n        });\n        wrappedCb(\n          typeof DragEvent !== \"undefined\" && evt instanceof DragEvent ? IncrementalSource.Drag : evt instanceof MouseEvent ? IncrementalSource.MouseMove : IncrementalSource.TouchMove\n        );\n      }),\n      threshold,\n      {\n        trailing: false\n      }\n    )\n  );\n  const handlers = [\n    on(\"mousemove\", updatePosition, doc),\n    on(\"touchmove\", updatePosition, doc),\n    on(\"drag\", updatePosition, doc)\n  ];\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction initMouseInteractionObserver({\n  mouseInteractionCb,\n  doc,\n  mirror: mirror2,\n  blockClass,\n  blockSelector,\n  sampling\n}) {\n  if (sampling.mouseInteraction === false) {\n    return () => {\n    };\n  }\n  const disableMap = sampling.mouseInteraction === true || sampling.mouseInteraction === void 0 ? {} : sampling.mouseInteraction;\n  const handlers = [];\n  let currentPointerType = null;\n  const getHandler = (eventKey) => {\n    return (event) => {\n      const target = getEventTarget(event);\n      if (isBlocked(target, blockClass, blockSelector, true)) {\n        return;\n      }\n      let pointerType = null;\n      let thisEventKey = eventKey;\n      if (\"pointerType\" in event) {\n        switch (event.pointerType) {\n          case \"mouse\":\n            pointerType = PointerTypes.Mouse;\n            break;\n          case \"touch\":\n            pointerType = PointerTypes.Touch;\n            break;\n          case \"pen\":\n            pointerType = PointerTypes.Pen;\n            break;\n        }\n        if (pointerType === PointerTypes.Touch) {\n          if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n            thisEventKey = \"TouchStart\";\n          } else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n            thisEventKey = \"TouchEnd\";\n          }\n        } else if (pointerType === PointerTypes.Pen) ;\n      } else if (legacy_isTouchEvent(event)) {\n        pointerType = PointerTypes.Touch;\n      }\n      if (pointerType !== null) {\n        currentPointerType = pointerType;\n        if (thisEventKey.startsWith(\"Touch\") && pointerType === PointerTypes.Touch || thisEventKey.startsWith(\"Mouse\") && pointerType === PointerTypes.Mouse) {\n          pointerType = null;\n        }\n      } else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n        pointerType = currentPointerType;\n        currentPointerType = null;\n      }\n      const e = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n      if (!e) {\n        return;\n      }\n      const id = mirror2.getId(target);\n      const { clientX, clientY } = e;\n      callbackWrapper(mouseInteractionCb)({\n        type: MouseInteractions[thisEventKey],\n        id,\n        x: clientX,\n        y: clientY,\n        ...pointerType !== null && { pointerType }\n      });\n    };\n  };\n  Object.keys(MouseInteractions).filter(\n    (key) => Number.isNaN(Number(key)) && !key.endsWith(\"_Departed\") && disableMap[key] !== false\n  ).forEach((eventKey) => {\n    let eventName = toLowerCase(eventKey);\n    const handler = getHandler(eventKey);\n    if (window.PointerEvent) {\n      switch (MouseInteractions[eventKey]) {\n        case MouseInteractions.MouseDown:\n        case MouseInteractions.MouseUp:\n          eventName = eventName.replace(\n            \"mouse\",\n            \"pointer\"\n          );\n          break;\n        case MouseInteractions.TouchStart:\n        case MouseInteractions.TouchEnd:\n          return;\n      }\n    }\n    handlers.push(on(eventName, handler, doc));\n  });\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction initScrollObserver({\n  scrollCb,\n  doc,\n  mirror: mirror2,\n  blockClass,\n  blockSelector,\n  sampling\n}) {\n  const updatePosition = callbackWrapper(\n    throttle(\n      callbackWrapper((evt) => {\n        const target = getEventTarget(evt);\n        if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n          return;\n        }\n        const id = mirror2.getId(target);\n        if (target === doc && doc.defaultView) {\n          const scrollLeftTop = getWindowScroll(doc.defaultView);\n          scrollCb({\n            id,\n            x: scrollLeftTop.left,\n            y: scrollLeftTop.top\n          });\n        } else {\n          scrollCb({\n            id,\n            x: target.scrollLeft,\n            y: target.scrollTop\n          });\n        }\n      }),\n      sampling.scroll || 100\n    )\n  );\n  return on(\"scroll\", updatePosition, doc);\n}\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\n  let lastH = -1;\n  let lastW = -1;\n  const updateDimension = callbackWrapper(\n    throttle(\n      callbackWrapper(() => {\n        const height = getWindowHeight();\n        const width = getWindowWidth();\n        if (lastH !== height || lastW !== width) {\n          viewportResizeCb({\n            width: Number(width),\n            height: Number(height)\n          });\n          lastH = height;\n          lastW = width;\n        }\n      }),\n      200\n    )\n  );\n  return on(\"resize\", updateDimension, win);\n}\nconst INPUT_TAGS = [\"INPUT\", \"TEXTAREA\", \"SELECT\"];\nconst lastInputValueMap = /* @__PURE__ */ new WeakMap();\nfunction initInputObserver({\n  inputCb,\n  doc,\n  mirror: mirror2,\n  blockClass,\n  blockSelector,\n  ignoreClass,\n  ignoreSelector,\n  maskInputOptions,\n  maskInputFn,\n  sampling,\n  userTriggeredOnInput\n}) {\n  function eventHandler(event) {\n    let target = getEventTarget(event);\n    const userTriggered = event.isTrusted;\n    const tagName = target && target.tagName;\n    if (target && tagName === \"OPTION\") {\n      target = index.parentElement(target);\n    }\n    if (!target || !tagName || INPUT_TAGS.indexOf(tagName) < 0 || isBlocked(target, blockClass, blockSelector, true)) {\n      return;\n    }\n    if (target.classList.contains(ignoreClass) || ignoreSelector && target.matches(ignoreSelector)) {\n      return;\n    }\n    let text = target.value;\n    let isChecked = false;\n    const type = getInputType(target) || \"\";\n    if (type === \"radio\" || type === \"checkbox\") {\n      isChecked = target.checked;\n    } else if (maskInputOptions[tagName.toLowerCase()] || maskInputOptions[type]) {\n      text = maskInputValue({\n        element: target,\n        maskInputOptions,\n        tagName,\n        type,\n        value: text,\n        maskInputFn\n      });\n    }\n    cbWithDedup(\n      target,\n      userTriggeredOnInput ? { text, isChecked, userTriggered } : { text, isChecked }\n    );\n    const name = target.name;\n    if (type === \"radio\" && name && isChecked) {\n      doc.querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`).forEach((el) => {\n        if (el !== target) {\n          const text2 = el.value;\n          cbWithDedup(\n            el,\n            userTriggeredOnInput ? { text: text2, isChecked: !isChecked, userTriggered: false } : { text: text2, isChecked: !isChecked }\n          );\n        }\n      });\n    }\n  }\n  function cbWithDedup(target, v) {\n    const lastInputValue = lastInputValueMap.get(target);\n    if (!lastInputValue || lastInputValue.text !== v.text || lastInputValue.isChecked !== v.isChecked) {\n      lastInputValueMap.set(target, v);\n      const id = mirror2.getId(target);\n      callbackWrapper(inputCb)({\n        ...v,\n        id\n      });\n    }\n  }\n  const events = sampling.input === \"last\" ? [\"change\"] : [\"input\", \"change\"];\n  const handlers = events.map(\n    (eventName) => on(eventName, callbackWrapper(eventHandler), doc)\n  );\n  const currentWindow = doc.defaultView;\n  if (!currentWindow) {\n    return () => {\n      handlers.forEach((h) => h());\n    };\n  }\n  const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(\n    currentWindow.HTMLInputElement.prototype,\n    \"value\"\n  );\n  const hookProperties = [\n    [currentWindow.HTMLInputElement.prototype, \"value\"],\n    [currentWindow.HTMLInputElement.prototype, \"checked\"],\n    [currentWindow.HTMLSelectElement.prototype, \"value\"],\n    [currentWindow.HTMLTextAreaElement.prototype, \"value\"],\n    // Some UI library use selectedIndex to set select value\n    [currentWindow.HTMLSelectElement.prototype, \"selectedIndex\"],\n    [currentWindow.HTMLOptionElement.prototype, \"selected\"]\n  ];\n  if (propertyDescriptor && propertyDescriptor.set) {\n    handlers.push(\n      ...hookProperties.map(\n        (p) => hookSetter(\n          p[0],\n          p[1],\n          {\n            set() {\n              callbackWrapper(eventHandler)({\n                target: this,\n                isTrusted: false\n                // userTriggered to false as this could well be programmatic\n              });\n            }\n          },\n          false,\n          currentWindow\n        )\n      )\n    );\n  }\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction getNestedCSSRulePositions(rule) {\n  const positions = [];\n  function recurse(childRule, pos) {\n    if (hasNestedCSSRule(\"CSSGroupingRule\") && childRule.parentRule instanceof CSSGroupingRule || hasNestedCSSRule(\"CSSMediaRule\") && childRule.parentRule instanceof CSSMediaRule || hasNestedCSSRule(\"CSSSupportsRule\") && childRule.parentRule instanceof CSSSupportsRule || hasNestedCSSRule(\"CSSConditionRule\") && childRule.parentRule instanceof CSSConditionRule) {\n      const rules = Array.from(\n        childRule.parentRule.cssRules\n      );\n      const index2 = rules.indexOf(childRule);\n      pos.unshift(index2);\n      return recurse(childRule.parentRule, pos);\n    } else if (childRule.parentStyleSheet) {\n      const rules = Array.from(childRule.parentStyleSheet.cssRules);\n      const index2 = rules.indexOf(childRule);\n      pos.unshift(index2);\n    }\n    return pos;\n  }\n  return recurse(rule, positions);\n}\nfunction getIdAndStyleId(sheet, mirror2, styleMirror) {\n  let id, styleId;\n  if (!sheet) return {};\n  if (sheet.ownerNode) id = mirror2.getId(sheet.ownerNode);\n  else styleId = styleMirror.getId(sheet);\n  return {\n    styleId,\n    id\n  };\n}\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror: mirror2, stylesheetManager }, { win }) {\n  if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n    return () => {\n    };\n  }\n  const insertRule = win.CSSStyleSheet.prototype.insertRule;\n  win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n    apply: callbackWrapper(\n      (target, thisArg, argumentsList) => {\n        const [rule, index2] = argumentsList;\n        const { id, styleId } = getIdAndStyleId(\n          thisArg,\n          mirror2,\n          stylesheetManager.styleMirror\n        );\n        if (id && id !== -1 || styleId && styleId !== -1) {\n          styleSheetRuleCb({\n            id,\n            styleId,\n            adds: [{ rule, index: index2 }]\n          });\n        }\n        return target.apply(thisArg, argumentsList);\n      }\n    )\n  });\n  win.CSSStyleSheet.prototype.addRule = function(selector, styleBlock, index2 = this.cssRules.length) {\n    const rule = `${selector} { ${styleBlock} }`;\n    return win.CSSStyleSheet.prototype.insertRule.apply(this, [rule, index2]);\n  };\n  const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n  win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n    apply: callbackWrapper(\n      (target, thisArg, argumentsList) => {\n        const [index2] = argumentsList;\n        const { id, styleId } = getIdAndStyleId(\n          thisArg,\n          mirror2,\n          stylesheetManager.styleMirror\n        );\n        if (id && id !== -1 || styleId && styleId !== -1) {\n          styleSheetRuleCb({\n            id,\n            styleId,\n            removes: [{ index: index2 }]\n          });\n        }\n        return target.apply(thisArg, argumentsList);\n      }\n    )\n  });\n  win.CSSStyleSheet.prototype.removeRule = function(index2) {\n    return win.CSSStyleSheet.prototype.deleteRule.apply(this, [index2]);\n  };\n  let replace;\n  if (win.CSSStyleSheet.prototype.replace) {\n    replace = win.CSSStyleSheet.prototype.replace;\n    win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n      apply: callbackWrapper(\n        (target, thisArg, argumentsList) => {\n          const [text] = argumentsList;\n          const { id, styleId } = getIdAndStyleId(\n            thisArg,\n            mirror2,\n            stylesheetManager.styleMirror\n          );\n          if (id && id !== -1 || styleId && styleId !== -1) {\n            styleSheetRuleCb({\n              id,\n              styleId,\n              replace: text\n            });\n          }\n          return target.apply(thisArg, argumentsList);\n        }\n      )\n    });\n  }\n  let replaceSync;\n  if (win.CSSStyleSheet.prototype.replaceSync) {\n    replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n    win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n      apply: callbackWrapper(\n        (target, thisArg, argumentsList) => {\n          const [text] = argumentsList;\n          const { id, styleId } = getIdAndStyleId(\n            thisArg,\n            mirror2,\n            stylesheetManager.styleMirror\n          );\n          if (id && id !== -1 || styleId && styleId !== -1) {\n            styleSheetRuleCb({\n              id,\n              styleId,\n              replaceSync: text\n            });\n          }\n          return target.apply(thisArg, argumentsList);\n        }\n      )\n    });\n  }\n  const supportedNestedCSSRuleTypes = {};\n  if (canMonkeyPatchNestedCSSRule(\"CSSGroupingRule\")) {\n    supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n  } else {\n    if (canMonkeyPatchNestedCSSRule(\"CSSMediaRule\")) {\n      supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n    }\n    if (canMonkeyPatchNestedCSSRule(\"CSSConditionRule\")) {\n      supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n    }\n    if (canMonkeyPatchNestedCSSRule(\"CSSSupportsRule\")) {\n      supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n    }\n  }\n  const unmodifiedFunctions = {};\n  Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n    unmodifiedFunctions[typeKey] = {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      insertRule: type.prototype.insertRule,\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      deleteRule: type.prototype.deleteRule\n    };\n    type.prototype.insertRule = new Proxy(\n      unmodifiedFunctions[typeKey].insertRule,\n      {\n        apply: callbackWrapper(\n          (target, thisArg, argumentsList) => {\n            const [rule, index2] = argumentsList;\n            const { id, styleId } = getIdAndStyleId(\n              thisArg.parentStyleSheet,\n              mirror2,\n              stylesheetManager.styleMirror\n            );\n            if (id && id !== -1 || styleId && styleId !== -1) {\n              styleSheetRuleCb({\n                id,\n                styleId,\n                adds: [\n                  {\n                    rule,\n                    index: [\n                      ...getNestedCSSRulePositions(thisArg),\n                      index2 || 0\n                      // defaults to 0\n                    ]\n                  }\n                ]\n              });\n            }\n            return target.apply(thisArg, argumentsList);\n          }\n        )\n      }\n    );\n    type.prototype.deleteRule = new Proxy(\n      unmodifiedFunctions[typeKey].deleteRule,\n      {\n        apply: callbackWrapper(\n          (target, thisArg, argumentsList) => {\n            const [index2] = argumentsList;\n            const { id, styleId } = getIdAndStyleId(\n              thisArg.parentStyleSheet,\n              mirror2,\n              stylesheetManager.styleMirror\n            );\n            if (id && id !== -1 || styleId && styleId !== -1) {\n              styleSheetRuleCb({\n                id,\n                styleId,\n                removes: [\n                  { index: [...getNestedCSSRulePositions(thisArg), index2] }\n                ]\n              });\n            }\n            return target.apply(thisArg, argumentsList);\n          }\n        )\n      }\n    );\n  });\n  return callbackWrapper(() => {\n    win.CSSStyleSheet.prototype.insertRule = insertRule;\n    win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n    replace && (win.CSSStyleSheet.prototype.replace = replace);\n    replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n    Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n      type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n      type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n    });\n  });\n}\nfunction initAdoptedStyleSheetObserver({\n  mirror: mirror2,\n  stylesheetManager\n}, host2) {\n  var _a2, _b, _c;\n  let hostId = null;\n  if (host2.nodeName === \"#document\") hostId = mirror2.getId(host2);\n  else hostId = mirror2.getId(index.host(host2));\n  const patchTarget = host2.nodeName === \"#document\" ? (_a2 = host2.defaultView) == null ? void 0 : _a2.Document : (_c = (_b = host2.ownerDocument) == null ? void 0 : _b.defaultView) == null ? void 0 : _c.ShadowRoot;\n  const originalPropertyDescriptor = (patchTarget == null ? void 0 : patchTarget.prototype) ? Object.getOwnPropertyDescriptor(\n    patchTarget == null ? void 0 : patchTarget.prototype,\n    \"adoptedStyleSheets\"\n  ) : void 0;\n  if (hostId === null || hostId === -1 || !patchTarget || !originalPropertyDescriptor)\n    return () => {\n    };\n  Object.defineProperty(host2, \"adoptedStyleSheets\", {\n    configurable: originalPropertyDescriptor.configurable,\n    enumerable: originalPropertyDescriptor.enumerable,\n    get() {\n      var _a3;\n      return (_a3 = originalPropertyDescriptor.get) == null ? void 0 : _a3.call(this);\n    },\n    set(sheets) {\n      var _a3;\n      const result = (_a3 = originalPropertyDescriptor.set) == null ? void 0 : _a3.call(this, sheets);\n      if (hostId !== null && hostId !== -1) {\n        try {\n          stylesheetManager.adoptStyleSheets(sheets, hostId);\n        } catch (e) {\n        }\n      }\n      return result;\n    }\n  });\n  return callbackWrapper(() => {\n    Object.defineProperty(host2, \"adoptedStyleSheets\", {\n      configurable: originalPropertyDescriptor.configurable,\n      enumerable: originalPropertyDescriptor.enumerable,\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      get: originalPropertyDescriptor.get,\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      set: originalPropertyDescriptor.set\n    });\n  });\n}\nfunction initStyleDeclarationObserver({\n  styleDeclarationCb,\n  mirror: mirror2,\n  ignoreCSSAttributes,\n  stylesheetManager\n}, { win }) {\n  const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n  win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n    apply: callbackWrapper(\n      (target, thisArg, argumentsList) => {\n        var _a2;\n        const [property, value, priority] = argumentsList;\n        if (ignoreCSSAttributes.has(property)) {\n          return setProperty.apply(thisArg, [property, value, priority]);\n        }\n        const { id, styleId } = getIdAndStyleId(\n          (_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet,\n          mirror2,\n          stylesheetManager.styleMirror\n        );\n        if (id && id !== -1 || styleId && styleId !== -1) {\n          styleDeclarationCb({\n            id,\n            styleId,\n            set: {\n              property,\n              value,\n              priority\n            },\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            index: getNestedCSSRulePositions(thisArg.parentRule)\n          });\n        }\n        return target.apply(thisArg, argumentsList);\n      }\n    )\n  });\n  const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n  win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n    apply: callbackWrapper(\n      (target, thisArg, argumentsList) => {\n        var _a2;\n        const [property] = argumentsList;\n        if (ignoreCSSAttributes.has(property)) {\n          return removeProperty.apply(thisArg, [property]);\n        }\n        const { id, styleId } = getIdAndStyleId(\n          (_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet,\n          mirror2,\n          stylesheetManager.styleMirror\n        );\n        if (id && id !== -1 || styleId && styleId !== -1) {\n          styleDeclarationCb({\n            id,\n            styleId,\n            remove: {\n              property\n            },\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            index: getNestedCSSRulePositions(thisArg.parentRule)\n          });\n        }\n        return target.apply(thisArg, argumentsList);\n      }\n    )\n  });\n  return callbackWrapper(() => {\n    win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n    win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n  });\n}\nfunction initMediaInteractionObserver({\n  mediaInteractionCb,\n  blockClass,\n  blockSelector,\n  mirror: mirror2,\n  sampling,\n  doc\n}) {\n  const handler = callbackWrapper(\n    (type) => throttle(\n      callbackWrapper((event) => {\n        const target = getEventTarget(event);\n        if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n          return;\n        }\n        const { currentTime, volume, muted, playbackRate, loop } = target;\n        mediaInteractionCb({\n          type,\n          id: mirror2.getId(target),\n          currentTime,\n          volume,\n          muted,\n          playbackRate,\n          loop\n        });\n      }),\n      sampling.media || 500\n    )\n  );\n  const handlers = [\n    on(\"play\", handler(MediaInteractions.Play), doc),\n    on(\"pause\", handler(MediaInteractions.Pause), doc),\n    on(\"seeked\", handler(MediaInteractions.Seeked), doc),\n    on(\"volumechange\", handler(MediaInteractions.VolumeChange), doc),\n    on(\"ratechange\", handler(MediaInteractions.RateChange), doc)\n  ];\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction initFontObserver({ fontCb, doc }) {\n  const win = doc.defaultView;\n  if (!win) {\n    return () => {\n    };\n  }\n  const handlers = [];\n  const fontMap = /* @__PURE__ */ new WeakMap();\n  const originalFontFace = win.FontFace;\n  win.FontFace = function FontFace(family, source, descriptors) {\n    const fontFace = new originalFontFace(family, source, descriptors);\n    fontMap.set(fontFace, {\n      family,\n      buffer: typeof source !== \"string\",\n      descriptors,\n      fontSource: typeof source === \"string\" ? source : JSON.stringify(Array.from(new Uint8Array(source)))\n    });\n    return fontFace;\n  };\n  const restoreHandler = patch(\n    doc.fonts,\n    \"add\",\n    function(original) {\n      return function(fontFace) {\n        setTimeout(\n          callbackWrapper(() => {\n            const p = fontMap.get(fontFace);\n            if (p) {\n              fontCb(p);\n              fontMap.delete(fontFace);\n            }\n          }),\n          0\n        );\n        return original.apply(this, [fontFace]);\n      };\n    }\n  );\n  handlers.push(() => {\n    win.FontFace = originalFontFace;\n  });\n  handlers.push(restoreHandler);\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction initSelectionObserver(param) {\n  const { doc, mirror: mirror2, blockClass, blockSelector, selectionCb } = param;\n  let collapsed = true;\n  const updateSelection = callbackWrapper(() => {\n    const selection = doc.getSelection();\n    if (!selection || collapsed && (selection == null ? void 0 : selection.isCollapsed)) return;\n    collapsed = selection.isCollapsed || false;\n    const ranges = [];\n    const count = selection.rangeCount || 0;\n    for (let i = 0; i < count; i++) {\n      const range = selection.getRangeAt(i);\n      const { startContainer, startOffset, endContainer, endOffset } = range;\n      const blocked = isBlocked(startContainer, blockClass, blockSelector, true) || isBlocked(endContainer, blockClass, blockSelector, true);\n      if (blocked) continue;\n      ranges.push({\n        start: mirror2.getId(startContainer),\n        startOffset,\n        end: mirror2.getId(endContainer),\n        endOffset\n      });\n    }\n    selectionCb({ ranges });\n  });\n  updateSelection();\n  return on(\"selectionchange\", updateSelection);\n}\nfunction initCustomElementObserver({\n  doc,\n  customElementCb\n}) {\n  const win = doc.defaultView;\n  if (!win || !win.customElements) return () => {\n  };\n  const restoreHandler = patch(\n    win.customElements,\n    \"define\",\n    function(original) {\n      return function(name, constructor, options) {\n        try {\n          customElementCb({\n            define: {\n              name\n            }\n          });\n        } catch (e) {\n          console.warn(`Custom element callback failed for ${name}`);\n        }\n        return original.apply(this, [name, constructor, options]);\n      };\n    }\n  );\n  return restoreHandler;\n}\nfunction mergeHooks(o, hooks) {\n  const {\n    mutationCb,\n    mousemoveCb,\n    mouseInteractionCb,\n    scrollCb,\n    viewportResizeCb,\n    inputCb,\n    mediaInteractionCb,\n    styleSheetRuleCb,\n    styleDeclarationCb,\n    canvasMutationCb,\n    fontCb,\n    selectionCb,\n    customElementCb\n  } = o;\n  o.mutationCb = (...p) => {\n    if (hooks.mutation) {\n      hooks.mutation(...p);\n    }\n    mutationCb(...p);\n  };\n  o.mousemoveCb = (...p) => {\n    if (hooks.mousemove) {\n      hooks.mousemove(...p);\n    }\n    mousemoveCb(...p);\n  };\n  o.mouseInteractionCb = (...p) => {\n    if (hooks.mouseInteraction) {\n      hooks.mouseInteraction(...p);\n    }\n    mouseInteractionCb(...p);\n  };\n  o.scrollCb = (...p) => {\n    if (hooks.scroll) {\n      hooks.scroll(...p);\n    }\n    scrollCb(...p);\n  };\n  o.viewportResizeCb = (...p) => {\n    if (hooks.viewportResize) {\n      hooks.viewportResize(...p);\n    }\n    viewportResizeCb(...p);\n  };\n  o.inputCb = (...p) => {\n    if (hooks.input) {\n      hooks.input(...p);\n    }\n    inputCb(...p);\n  };\n  o.mediaInteractionCb = (...p) => {\n    if (hooks.mediaInteaction) {\n      hooks.mediaInteaction(...p);\n    }\n    mediaInteractionCb(...p);\n  };\n  o.styleSheetRuleCb = (...p) => {\n    if (hooks.styleSheetRule) {\n      hooks.styleSheetRule(...p);\n    }\n    styleSheetRuleCb(...p);\n  };\n  o.styleDeclarationCb = (...p) => {\n    if (hooks.styleDeclaration) {\n      hooks.styleDeclaration(...p);\n    }\n    styleDeclarationCb(...p);\n  };\n  o.canvasMutationCb = (...p) => {\n    if (hooks.canvasMutation) {\n      hooks.canvasMutation(...p);\n    }\n    canvasMutationCb(...p);\n  };\n  o.fontCb = (...p) => {\n    if (hooks.font) {\n      hooks.font(...p);\n    }\n    fontCb(...p);\n  };\n  o.selectionCb = (...p) => {\n    if (hooks.selection) {\n      hooks.selection(...p);\n    }\n    selectionCb(...p);\n  };\n  o.customElementCb = (...c) => {\n    if (hooks.customElement) {\n      hooks.customElement(...c);\n    }\n    customElementCb(...c);\n  };\n}\nfunction initObservers(o, hooks = {}) {\n  const currentWindow = o.doc.defaultView;\n  if (!currentWindow) {\n    return () => {\n    };\n  }\n  mergeHooks(o, hooks);\n  let mutationObserver;\n  let cleanupMutationIframe = () => {\n  };\n  if (o.recordDOM) {\n    [mutationObserver, cleanupMutationIframe] = initMutationObserver(o, o.doc);\n  }\n  const mousemoveHandler = initMoveObserver(o);\n  const mouseInteractionHandler = initMouseInteractionObserver(o);\n  const scrollHandler = initScrollObserver(o);\n  const viewportResizeHandler = initViewportResizeObserver(o, {\n    win: currentWindow\n  });\n  const inputHandler = initInputObserver(o);\n  const mediaInteractionHandler = initMediaInteractionObserver(o);\n  let styleSheetObserver = () => {\n  };\n  let adoptedStyleSheetObserver = () => {\n  };\n  let styleDeclarationObserver = () => {\n  };\n  let fontObserver = () => {\n  };\n  if (o.recordDOM) {\n    styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\n    adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\n    styleDeclarationObserver = initStyleDeclarationObserver(o, {\n      win: currentWindow\n    });\n    if (o.collectFonts) {\n      fontObserver = initFontObserver(o);\n    }\n  }\n  const selectionObserver = initSelectionObserver(o);\n  const customElementObserver = initCustomElementObserver(o);\n  const pluginHandlers = [];\n  for (const plugin of o.plugins) {\n    pluginHandlers.push(\n      plugin.observer(plugin.callback, currentWindow, plugin.options)\n    );\n  }\n  return callbackWrapper(() => {\n    mutationBuffers.forEach((b) => b.reset());\n    mutationObserver == null ? void 0 : mutationObserver.disconnect();\n    cleanupMutationIframe();\n    mousemoveHandler();\n    mouseInteractionHandler();\n    scrollHandler();\n    viewportResizeHandler();\n    inputHandler();\n    mediaInteractionHandler();\n    styleSheetObserver();\n    adoptedStyleSheetObserver();\n    styleDeclarationObserver();\n    fontObserver();\n    selectionObserver();\n    customElementObserver();\n    pluginHandlers.forEach((h) => h());\n  });\n}\nfunction hasNestedCSSRule(prop) {\n  return typeof window[prop] !== \"undefined\";\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n  return Boolean(\n    typeof window[prop] !== \"undefined\" && // Note: Generally, this check _shouldn't_ be necessary\n    // However, in some scenarios (e.g. jsdom) this can sometimes fail, so we check for it here\n    window[prop].prototype && \"insertRule\" in window[prop].prototype && \"deleteRule\" in window[prop].prototype\n  );\n}\nclass CrossOriginIframeMirror {\n  constructor(generateIdFn) {\n    __publicField(this, \"iframeIdToRemoteIdMap\", /* @__PURE__ */ new WeakMap());\n    __publicField(this, \"iframeRemoteIdToIdMap\", /* @__PURE__ */ new WeakMap());\n    this.generateIdFn = generateIdFn;\n  }\n  getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n    const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n    const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n    let id = idToRemoteIdMap.get(remoteId);\n    if (!id) {\n      id = this.generateIdFn();\n      idToRemoteIdMap.set(remoteId, id);\n      remoteIdToIdMap.set(id, remoteId);\n    }\n    return id;\n  }\n  getIds(iframe, remoteId) {\n    const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n    const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n    return remoteId.map(\n      (id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap)\n    );\n  }\n  getRemoteId(iframe, id, map) {\n    const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n    if (typeof id !== \"number\") return id;\n    const remoteId = remoteIdToIdMap.get(id);\n    if (!remoteId) return -1;\n    return remoteId;\n  }\n  getRemoteIds(iframe, ids) {\n    const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n    return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\n  }\n  reset(iframe) {\n    if (!iframe) {\n      this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap();\n      this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap();\n      return;\n    }\n    this.iframeIdToRemoteIdMap.delete(iframe);\n    this.iframeRemoteIdToIdMap.delete(iframe);\n  }\n  getIdToRemoteIdMap(iframe) {\n    let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n    if (!idToRemoteIdMap) {\n      idToRemoteIdMap = /* @__PURE__ */ new Map();\n      this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n    }\n    return idToRemoteIdMap;\n  }\n  getRemoteIdToIdMap(iframe) {\n    let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n    if (!remoteIdToIdMap) {\n      remoteIdToIdMap = /* @__PURE__ */ new Map();\n      this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n    }\n    return remoteIdToIdMap;\n  }\n}\nclass IframeManager {\n  constructor(options) {\n    __publicField(this, \"iframes\", /* @__PURE__ */ new WeakMap());\n    __publicField(this, \"crossOriginIframeMap\", /* @__PURE__ */ new WeakMap());\n    __publicField(this, \"crossOriginIframeMirror\", new CrossOriginIframeMirror(genId));\n    __publicField(this, \"crossOriginIframeStyleMirror\");\n    __publicField(this, \"crossOriginIframeRootIdMap\", /* @__PURE__ */ new WeakMap());\n    __publicField(this, \"mirror\");\n    __publicField(this, \"mutationCb\");\n    __publicField(this, \"wrappedEmit\");\n    __publicField(this, \"loadListener\");\n    __publicField(this, \"stylesheetManager\");\n    __publicField(this, \"recordCrossOriginIframes\");\n    this.mutationCb = options.mutationCb;\n    this.wrappedEmit = options.wrappedEmit;\n    this.stylesheetManager = options.stylesheetManager;\n    this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n    this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(\n      this.stylesheetManager.styleMirror.generateId.bind(\n        this.stylesheetManager.styleMirror\n      )\n    );\n    this.mirror = options.mirror;\n    if (this.recordCrossOriginIframes) {\n      window.addEventListener(\"message\", this.handleMessage.bind(this));\n    }\n  }\n  addIframe(iframeEl) {\n    this.iframes.set(iframeEl, true);\n    if (iframeEl.contentWindow)\n      this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n  }\n  addLoadListener(cb) {\n    this.loadListener = cb;\n  }\n  attachIframe(iframeEl, childSn) {\n    var _a2, _b;\n    this.mutationCb({\n      adds: [\n        {\n          parentId: this.mirror.getId(iframeEl),\n          nextId: null,\n          node: childSn\n        }\n      ],\n      removes: [],\n      texts: [],\n      attributes: [],\n      isAttachIframe: true\n    });\n    if (this.recordCrossOriginIframes)\n      (_a2 = iframeEl.contentWindow) == null ? void 0 : _a2.addEventListener(\n        \"message\",\n        this.handleMessage.bind(this)\n      );\n    (_b = this.loadListener) == null ? void 0 : _b.call(this, iframeEl);\n    if (iframeEl.contentDocument && iframeEl.contentDocument.adoptedStyleSheets && iframeEl.contentDocument.adoptedStyleSheets.length > 0)\n      this.stylesheetManager.adoptStyleSheets(\n        iframeEl.contentDocument.adoptedStyleSheets,\n        this.mirror.getId(iframeEl.contentDocument)\n      );\n  }\n  handleMessage(message) {\n    const crossOriginMessageEvent = message;\n    if (crossOriginMessageEvent.data.type !== \"rrweb\" || // To filter out the rrweb messages which are forwarded by some sites.\n    crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\n      return;\n    const iframeSourceWindow = message.source;\n    if (!iframeSourceWindow) return;\n    const iframeEl = this.crossOriginIframeMap.get(message.source);\n    if (!iframeEl) return;\n    const transformedEvent = this.transformCrossOriginEvent(\n      iframeEl,\n      crossOriginMessageEvent.data.event\n    );\n    if (transformedEvent)\n      this.wrappedEmit(\n        transformedEvent,\n        crossOriginMessageEvent.data.isCheckout\n      );\n  }\n  transformCrossOriginEvent(iframeEl, e) {\n    var _a2;\n    switch (e.type) {\n      case EventType.FullSnapshot: {\n        this.crossOriginIframeMirror.reset(iframeEl);\n        this.crossOriginIframeStyleMirror.reset(iframeEl);\n        this.replaceIdOnNode(e.data.node, iframeEl);\n        const rootId = e.data.node.id;\n        this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n        this.patchRootIdOnNode(e.data.node, rootId);\n        return {\n          timestamp: e.timestamp,\n          type: EventType.IncrementalSnapshot,\n          data: {\n            source: IncrementalSource.Mutation,\n            adds: [\n              {\n                parentId: this.mirror.getId(iframeEl),\n                nextId: null,\n                node: e.data.node\n              }\n            ],\n            removes: [],\n            texts: [],\n            attributes: [],\n            isAttachIframe: true\n          }\n        };\n      }\n      case EventType.Meta:\n      case EventType.Load:\n      case EventType.DomContentLoaded: {\n        return false;\n      }\n      case EventType.Plugin: {\n        return e;\n      }\n      case EventType.Custom: {\n        this.replaceIds(\n          e.data.payload,\n          iframeEl,\n          [\"id\", \"parentId\", \"previousId\", \"nextId\"]\n        );\n        return e;\n      }\n      case EventType.IncrementalSnapshot: {\n        switch (e.data.source) {\n          case IncrementalSource.Mutation: {\n            e.data.adds.forEach((n) => {\n              this.replaceIds(n, iframeEl, [\n                \"parentId\",\n                \"nextId\",\n                \"previousId\"\n              ]);\n              this.replaceIdOnNode(n.node, iframeEl);\n              const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\n              rootId && this.patchRootIdOnNode(n.node, rootId);\n            });\n            e.data.removes.forEach((n) => {\n              this.replaceIds(n, iframeEl, [\"parentId\", \"id\"]);\n            });\n            e.data.attributes.forEach((n) => {\n              this.replaceIds(n, iframeEl, [\"id\"]);\n            });\n            e.data.texts.forEach((n) => {\n              this.replaceIds(n, iframeEl, [\"id\"]);\n            });\n            return e;\n          }\n          case IncrementalSource.Drag:\n          case IncrementalSource.TouchMove:\n          case IncrementalSource.MouseMove: {\n            e.data.positions.forEach((p) => {\n              this.replaceIds(p, iframeEl, [\"id\"]);\n            });\n            return e;\n          }\n          case IncrementalSource.ViewportResize: {\n            return false;\n          }\n          case IncrementalSource.MediaInteraction:\n          case IncrementalSource.MouseInteraction:\n          case IncrementalSource.Scroll:\n          case IncrementalSource.CanvasMutation:\n          case IncrementalSource.Input: {\n            this.replaceIds(e.data, iframeEl, [\"id\"]);\n            return e;\n          }\n          case IncrementalSource.StyleSheetRule:\n          case IncrementalSource.StyleDeclaration: {\n            this.replaceIds(e.data, iframeEl, [\"id\"]);\n            this.replaceStyleIds(e.data, iframeEl, [\"styleId\"]);\n            return e;\n          }\n          case IncrementalSource.Font: {\n            return e;\n          }\n          case IncrementalSource.Selection: {\n            e.data.ranges.forEach((range) => {\n              this.replaceIds(range, iframeEl, [\"start\", \"end\"]);\n            });\n            return e;\n          }\n          case IncrementalSource.AdoptedStyleSheet: {\n            this.replaceIds(e.data, iframeEl, [\"id\"]);\n            this.replaceStyleIds(e.data, iframeEl, [\"styleIds\"]);\n            (_a2 = e.data.styles) == null ? void 0 : _a2.forEach((style) => {\n              this.replaceStyleIds(style, iframeEl, [\"styleId\"]);\n            });\n            return e;\n          }\n        }\n      }\n    }\n    return false;\n  }\n  replace(iframeMirror, obj, iframeEl, keys) {\n    for (const key of keys) {\n      if (!Array.isArray(obj[key]) && typeof obj[key] !== \"number\") continue;\n      if (Array.isArray(obj[key])) {\n        obj[key] = iframeMirror.getIds(\n          iframeEl,\n          obj[key]\n        );\n      } else {\n        obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n      }\n    }\n    return obj;\n  }\n  replaceIds(obj, iframeEl, keys) {\n    return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n  }\n  replaceStyleIds(obj, iframeEl, keys) {\n    return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n  }\n  replaceIdOnNode(node, iframeEl) {\n    this.replaceIds(node, iframeEl, [\"id\", \"rootId\"]);\n    if (\"childNodes\" in node) {\n      node.childNodes.forEach((child) => {\n        this.replaceIdOnNode(child, iframeEl);\n      });\n    }\n  }\n  patchRootIdOnNode(node, rootId) {\n    if (node.type !== NodeType.Document && !node.rootId) node.rootId = rootId;\n    if (\"childNodes\" in node) {\n      node.childNodes.forEach((child) => {\n        this.patchRootIdOnNode(child, rootId);\n      });\n    }\n  }\n}\nclass ShadowDomManager {\n  constructor(options) {\n    __publicField(this, \"shadowDoms\", /* @__PURE__ */ new WeakSet());\n    __publicField(this, \"mutationCb\");\n    __publicField(this, \"scrollCb\");\n    __publicField(this, \"bypassOptions\");\n    __publicField(this, \"mirror\");\n    __publicField(this, \"restoreHandlers\", []);\n    this.mutationCb = options.mutationCb;\n    this.scrollCb = options.scrollCb;\n    this.bypassOptions = options.bypassOptions;\n    this.mirror = options.mirror;\n    this.init();\n  }\n  init() {\n    this.reset();\n    this.patchAttachShadow(Element, document);\n  }\n  addShadowRoot(shadowRoot2, doc) {\n    if (!isNativeShadowDom(shadowRoot2)) return;\n    if (this.shadowDoms.has(shadowRoot2)) return;\n    this.shadowDoms.add(shadowRoot2);\n    const [observer] = initMutationObserver(\n      {\n        ...this.bypassOptions,\n        doc,\n        mutationCb: this.mutationCb,\n        mirror: this.mirror,\n        shadowDomManager: this\n      },\n      shadowRoot2\n    );\n    this.restoreHandlers.push(() => observer.disconnect());\n    this.restoreHandlers.push(\n      initScrollObserver({\n        ...this.bypassOptions,\n        scrollCb: this.scrollCb,\n        // https://gist.github.com/praveenpuglia/0832da687ed5a5d7a0907046c9ef1813\n        // scroll is not allowed to pass the boundary, so we need to listen the shadow document\n        doc: shadowRoot2,\n        mirror: this.mirror\n      })\n    );\n    setTimeout(() => {\n      if (shadowRoot2.adoptedStyleSheets && shadowRoot2.adoptedStyleSheets.length > 0)\n        this.bypassOptions.stylesheetManager.adoptStyleSheets(\n          shadowRoot2.adoptedStyleSheets,\n          this.mirror.getId(index.host(shadowRoot2))\n        );\n      this.restoreHandlers.push(\n        initAdoptedStyleSheetObserver(\n          {\n            mirror: this.mirror,\n            stylesheetManager: this.bypassOptions.stylesheetManager\n          },\n          shadowRoot2\n        )\n      );\n    }, 0);\n  }\n  /**\n   * Monkey patch 'attachShadow' of an IFrameElement to observe newly added shadow doms.\n   */\n  observeAttachShadow(iframeElement) {\n    if (!iframeElement.contentWindow || !iframeElement.contentDocument) return;\n    this.patchAttachShadow(\n      iframeElement.contentWindow.Element,\n      iframeElement.contentDocument\n    );\n  }\n  /**\n   * Patch 'attachShadow' to observe newly added shadow doms.\n   */\n  patchAttachShadow(element, doc) {\n    const manager = this;\n    this.restoreHandlers.push(\n      patch(\n        element.prototype,\n        \"attachShadow\",\n        function(original) {\n          return function(option) {\n            const sRoot = original.call(this, option);\n            const shadowRootEl = index.shadowRoot(this);\n            if (shadowRootEl && inDom(this))\n              manager.addShadowRoot(shadowRootEl, doc);\n            return sRoot;\n          };\n        }\n      )\n    );\n  }\n  reset() {\n    this.restoreHandlers.forEach((handler) => {\n      try {\n        handler();\n      } catch (e) {\n      }\n    });\n    this.restoreHandlers = [];\n    this.shadowDoms = /* @__PURE__ */ new WeakSet();\n  }\n}\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar lookup = typeof Uint8Array === \"undefined\" ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n  lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function(arraybuffer) {\n  var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = \"\";\n  for (i = 0; i < len; i += 3) {\n    base64 += chars[bytes[i] >> 2];\n    base64 += chars[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n    base64 += chars[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n    base64 += chars[bytes[i + 2] & 63];\n  }\n  if (len % 3 === 2) {\n    base64 = base64.substring(0, base64.length - 1) + \"=\";\n  } else if (len % 3 === 1) {\n    base64 = base64.substring(0, base64.length - 2) + \"==\";\n  }\n  return base64;\n};\nconst canvasVarMap = /* @__PURE__ */ new Map();\nfunction variableListFor(ctx, ctor) {\n  let contextMap = canvasVarMap.get(ctx);\n  if (!contextMap) {\n    contextMap = /* @__PURE__ */ new Map();\n    canvasVarMap.set(ctx, contextMap);\n  }\n  if (!contextMap.has(ctor)) {\n    contextMap.set(ctor, []);\n  }\n  return contextMap.get(ctor);\n}\nconst saveWebGLVar = (value, win, ctx) => {\n  if (!value || !(isInstanceOfWebGLObject(value, win) || typeof value === \"object\"))\n    return;\n  const name = value.constructor.name;\n  const list = variableListFor(ctx, name);\n  let index2 = list.indexOf(value);\n  if (index2 === -1) {\n    index2 = list.length;\n    list.push(value);\n  }\n  return index2;\n};\nfunction serializeArg(value, win, ctx) {\n  if (value instanceof Array) {\n    return value.map((arg) => serializeArg(arg, win, ctx));\n  } else if (value === null) {\n    return value;\n  } else if (value instanceof Float32Array || value instanceof Float64Array || value instanceof Int32Array || value instanceof Uint32Array || value instanceof Uint8Array || value instanceof Uint16Array || value instanceof Int16Array || value instanceof Int8Array || value instanceof Uint8ClampedArray) {\n    const name = value.constructor.name;\n    return {\n      rr_type: name,\n      args: [Object.values(value)]\n    };\n  } else if (\n    // SharedArrayBuffer disabled on most browsers due to spectre.\n    // More info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/SharedArrayBuffer\n    // value instanceof SharedArrayBuffer ||\n    value instanceof ArrayBuffer\n  ) {\n    const name = value.constructor.name;\n    const base64 = encode(value);\n    return {\n      rr_type: name,\n      base64\n    };\n  } else if (value instanceof DataView) {\n    const name = value.constructor.name;\n    return {\n      rr_type: name,\n      args: [\n        serializeArg(value.buffer, win, ctx),\n        value.byteOffset,\n        value.byteLength\n      ]\n    };\n  } else if (value instanceof HTMLImageElement) {\n    const name = value.constructor.name;\n    const { src } = value;\n    return {\n      rr_type: name,\n      src\n    };\n  } else if (value instanceof HTMLCanvasElement) {\n    const name = \"HTMLImageElement\";\n    const src = value.toDataURL();\n    return {\n      rr_type: name,\n      src\n    };\n  } else if (value instanceof ImageData) {\n    const name = value.constructor.name;\n    return {\n      rr_type: name,\n      args: [serializeArg(value.data, win, ctx), value.width, value.height]\n    };\n  } else if (isInstanceOfWebGLObject(value, win) || typeof value === \"object\") {\n    const name = value.constructor.name;\n    const index2 = saveWebGLVar(value, win, ctx);\n    return {\n      rr_type: name,\n      index: index2\n    };\n  }\n  return value;\n}\nconst serializeArgs = (args, win, ctx) => {\n  return args.map((arg) => serializeArg(arg, win, ctx));\n};\nconst isInstanceOfWebGLObject = (value, win) => {\n  const webGLConstructorNames = [\n    \"WebGLActiveInfo\",\n    \"WebGLBuffer\",\n    \"WebGLFramebuffer\",\n    \"WebGLProgram\",\n    \"WebGLRenderbuffer\",\n    \"WebGLShader\",\n    \"WebGLShaderPrecisionFormat\",\n    \"WebGLTexture\",\n    \"WebGLUniformLocation\",\n    \"WebGLVertexArrayObject\",\n    // In old Chrome versions, value won't be an instanceof WebGLVertexArrayObject.\n    \"WebGLVertexArrayObjectOES\"\n  ];\n  const supportedWebGLConstructorNames = webGLConstructorNames.filter(\n    (name) => typeof win[name] === \"function\"\n  );\n  return Boolean(\n    supportedWebGLConstructorNames.find(\n      (name) => value instanceof win[name]\n    )\n  );\n};\nfunction initCanvas2DMutationObserver(cb, win, blockClass, blockSelector) {\n  const handlers = [];\n  const props2D = Object.getOwnPropertyNames(\n    win.CanvasRenderingContext2D.prototype\n  );\n  for (const prop of props2D) {\n    try {\n      if (typeof win.CanvasRenderingContext2D.prototype[prop] !== \"function\") {\n        continue;\n      }\n      const restoreHandler = patch(\n        win.CanvasRenderingContext2D.prototype,\n        prop,\n        function(original) {\n          return function(...args) {\n            if (!isBlocked(this.canvas, blockClass, blockSelector, true)) {\n              setTimeout(() => {\n                const recordArgs = serializeArgs(args, win, this);\n                cb(this.canvas, {\n                  type: CanvasContext[\"2D\"],\n                  property: prop,\n                  args: recordArgs\n                });\n              }, 0);\n            }\n            return original.apply(this, args);\n          };\n        }\n      );\n      handlers.push(restoreHandler);\n    } catch {\n      const hookHandler = hookSetter(\n        win.CanvasRenderingContext2D.prototype,\n        prop,\n        {\n          set(v) {\n            cb(this.canvas, {\n              type: CanvasContext[\"2D\"],\n              property: prop,\n              args: [v],\n              setter: true\n            });\n          }\n        }\n      );\n      handlers.push(hookHandler);\n    }\n  }\n  return () => {\n    handlers.forEach((h) => h());\n  };\n}\nfunction getNormalizedContextName(contextType) {\n  return contextType === \"experimental-webgl\" ? \"webgl\" : contextType;\n}\nfunction initCanvasContextObserver(win, blockClass, blockSelector, setPreserveDrawingBufferToTrue) {\n  const handlers = [];\n  try {\n    const restoreHandler = patch(\n      win.HTMLCanvasElement.prototype,\n      \"getContext\",\n      function(original) {\n        return function(contextType, ...args) {\n          if (!isBlocked(this, blockClass, blockSelector, true)) {\n            const ctxName = getNormalizedContextName(contextType);\n            if (!(\"__context\" in this)) this.__context = ctxName;\n            if (setPreserveDrawingBufferToTrue && [\"webgl\", \"webgl2\"].includes(ctxName)) {\n              if (args[0] && typeof args[0] === \"object\") {\n                const contextAttributes = args[0];\n                if (!contextAttributes.preserveDrawingBuffer) {\n                  contextAttributes.preserveDrawingBuffer = true;\n                }\n              } else {\n                args.splice(0, 1, {\n                  preserveDrawingBuffer: true\n                });\n              }\n            }\n          }\n          return original.apply(this, [contextType, ...args]);\n        };\n      }\n    );\n    handlers.push(restoreHandler);\n  } catch {\n    console.error(\"failed to patch HTMLCanvasElement.prototype.getContext\");\n  }\n  return () => {\n    handlers.forEach((h) => h());\n  };\n}\nfunction patchGLPrototype(prototype, type, cb, blockClass, blockSelector, win) {\n  const handlers = [];\n  const props = Object.getOwnPropertyNames(prototype);\n  for (const prop of props) {\n    if (\n      //prop.startsWith('get') ||  // e.g. getProgramParameter, but too risky\n      [\n        \"isContextLost\",\n        \"canvas\",\n        \"drawingBufferWidth\",\n        \"drawingBufferHeight\"\n      ].includes(prop)\n    ) {\n      continue;\n    }\n    try {\n      if (typeof prototype[prop] !== \"function\") {\n        continue;\n      }\n      const restoreHandler = patch(\n        prototype,\n        prop,\n        function(original) {\n          return function(...args) {\n            const result = original.apply(this, args);\n            saveWebGLVar(result, win, this);\n            if (\"tagName\" in this.canvas && !isBlocked(this.canvas, blockClass, blockSelector, true)) {\n              const recordArgs = serializeArgs(args, win, this);\n              const mutation = {\n                type,\n                property: prop,\n                args: recordArgs\n              };\n              cb(this.canvas, mutation);\n            }\n            return result;\n          };\n        }\n      );\n      handlers.push(restoreHandler);\n    } catch {\n      const hookHandler = hookSetter(prototype, prop, {\n        set(v) {\n          cb(this.canvas, {\n            type,\n            property: prop,\n            args: [v],\n            setter: true\n          });\n        }\n      });\n      handlers.push(hookHandler);\n    }\n  }\n  return handlers;\n}\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector) {\n  const handlers = [];\n  if (typeof win.WebGLRenderingContext !== \"undefined\") {\n    handlers.push(\n      ...patchGLPrototype(\n        win.WebGLRenderingContext.prototype,\n        CanvasContext.WebGL,\n        cb,\n        blockClass,\n        blockSelector,\n        win\n      )\n    );\n  }\n  if (typeof win.WebGL2RenderingContext !== \"undefined\") {\n    handlers.push(\n      ...patchGLPrototype(\n        win.WebGL2RenderingContext.prototype,\n        CanvasContext.WebGL2,\n        cb,\n        blockClass,\n        blockSelector,\n        win\n      )\n    );\n  }\n  return () => {\n    handlers.forEach((h) => h());\n  };\n}\nconst jsContent = '(function() {\\n  \"use strict\";\\n  var chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\\n  var lookup = typeof Uint8Array === \"undefined\" ? [] : new Uint8Array(256);\\n  for (var i = 0; i < chars.length; i++) {\\n    lookup[chars.charCodeAt(i)] = i;\\n  }\\n  var encode = function(arraybuffer) {\\n    var bytes = new Uint8Array(arraybuffer), i2, len = bytes.length, base64 = \"\";\\n    for (i2 = 0; i2 < len; i2 += 3) {\\n      base64 += chars[bytes[i2] >> 2];\\n      base64 += chars[(bytes[i2] & 3) << 4 | bytes[i2 + 1] >> 4];\\n      base64 += chars[(bytes[i2 + 1] & 15) << 2 | bytes[i2 + 2] >> 6];\\n      base64 += chars[bytes[i2 + 2] & 63];\\n    }\\n    if (len % 3 === 2) {\\n      base64 = base64.substring(0, base64.length - 1) + \"=\";\\n    } else if (len % 3 === 1) {\\n      base64 = base64.substring(0, base64.length - 2) + \"==\";\\n    }\\n    return base64;\\n  };\\n  const lastBlobMap = /* @__PURE__ */ new Map();\\n  const transparentBlobMap = /* @__PURE__ */ new Map();\\n  async function getTransparentBlobFor(width, height, dataURLOptions) {\\n    const id = `${width}-${height}`;\\n    if (\"OffscreenCanvas\" in globalThis) {\\n      if (transparentBlobMap.has(id)) return transparentBlobMap.get(id);\\n      const offscreen = new OffscreenCanvas(width, height);\\n      offscreen.getContext(\"2d\");\\n      const blob = await offscreen.convertToBlob(dataURLOptions);\\n      const arrayBuffer = await blob.arrayBuffer();\\n      const base64 = encode(arrayBuffer);\\n      transparentBlobMap.set(id, base64);\\n      return base64;\\n    } else {\\n      return \"\";\\n    }\\n  }\\n  const worker = self;\\n  worker.onmessage = async function(e) {\\n    if (\"OffscreenCanvas\" in globalThis) {\\n      const { id, bitmap, width, height, dataURLOptions } = e.data;\\n      const transparentBase64 = getTransparentBlobFor(\\n        width,\\n        height,\\n        dataURLOptions\\n      );\\n      const offscreen = new OffscreenCanvas(width, height);\\n      const ctx = offscreen.getContext(\"2d\");\\n      ctx.drawImage(bitmap, 0, 0);\\n      bitmap.close();\\n      const blob = await offscreen.convertToBlob(dataURLOptions);\\n      const type = blob.type;\\n      const arrayBuffer = await blob.arrayBuffer();\\n      const base64 = encode(arrayBuffer);\\n      if (!lastBlobMap.has(id) && await transparentBase64 === base64) {\\n        lastBlobMap.set(id, base64);\\n        return worker.postMessage({ id });\\n      }\\n      if (lastBlobMap.get(id) === base64) return worker.postMessage({ id });\\n      worker.postMessage({\\n        id,\\n        type,\\n        base64,\\n        width,\\n        height\\n      });\\n      lastBlobMap.set(id, base64);\\n    } else {\\n      return worker.postMessage({ id: e.data.id });\\n    }\\n  };\\n})();\\n//# sourceMappingURL=image-bitmap-data-url-worker-IJpC7g_b.js.map\\n';\nconst blob = typeof self !== \"undefined\" && self.Blob && new Blob([jsContent], { type: \"text/javascript;charset=utf-8\" });\nfunction WorkerWrapper(options) {\n  let objURL;\n  try {\n    objURL = blob && (self.URL || self.webkitURL).createObjectURL(blob);\n    if (!objURL) throw \"\";\n    const worker = new Worker(objURL, {\n      name: options == null ? void 0 : options.name\n    });\n    worker.addEventListener(\"error\", () => {\n      (self.URL || self.webkitURL).revokeObjectURL(objURL);\n    });\n    return worker;\n  } catch (e) {\n    return new Worker(\n      \"data:text/javascript;charset=utf-8,\" + encodeURIComponent(jsContent),\n      {\n        name: options == null ? void 0 : options.name\n      }\n    );\n  } finally {\n    objURL && (self.URL || self.webkitURL).revokeObjectURL(objURL);\n  }\n}\nclass CanvasManager {\n  constructor(options) {\n    __publicField(this, \"pendingCanvasMutations\", /* @__PURE__ */ new Map());\n    __publicField(this, \"rafStamps\", { latestId: 0, invokeId: null });\n    __publicField(this, \"mirror\");\n    __publicField(this, \"mutationCb\");\n    __publicField(this, \"resetObservers\");\n    __publicField(this, \"frozen\", false);\n    __publicField(this, \"locked\", false);\n    __publicField(this, \"processMutation\", (target, mutation) => {\n      const newFrame = this.rafStamps.invokeId && this.rafStamps.latestId !== this.rafStamps.invokeId;\n      if (newFrame || !this.rafStamps.invokeId)\n        this.rafStamps.invokeId = this.rafStamps.latestId;\n      if (!this.pendingCanvasMutations.has(target)) {\n        this.pendingCanvasMutations.set(target, []);\n      }\n      this.pendingCanvasMutations.get(target).push(mutation);\n    });\n    const {\n      sampling = \"all\",\n      win,\n      blockClass,\n      blockSelector,\n      recordCanvas,\n      dataURLOptions\n    } = options;\n    this.mutationCb = options.mutationCb;\n    this.mirror = options.mirror;\n    if (recordCanvas && sampling === \"all\")\n      this.initCanvasMutationObserver(win, blockClass, blockSelector);\n    if (recordCanvas && typeof sampling === \"number\")\n      this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, {\n        dataURLOptions\n      });\n  }\n  reset() {\n    this.pendingCanvasMutations.clear();\n    this.resetObservers && this.resetObservers();\n  }\n  freeze() {\n    this.frozen = true;\n  }\n  unfreeze() {\n    this.frozen = false;\n  }\n  lock() {\n    this.locked = true;\n  }\n  unlock() {\n    this.locked = false;\n  }\n  initCanvasFPSObserver(fps, win, blockClass, blockSelector, options) {\n    const canvasContextReset = initCanvasContextObserver(\n      win,\n      blockClass,\n      blockSelector,\n      true\n    );\n    const snapshotInProgressMap = /* @__PURE__ */ new Map();\n    const worker = new WorkerWrapper();\n    worker.onmessage = (e) => {\n      const { id } = e.data;\n      snapshotInProgressMap.set(id, false);\n      if (!(\"base64\" in e.data)) return;\n      const { base64, type, width, height } = e.data;\n      this.mutationCb({\n        id,\n        type: CanvasContext[\"2D\"],\n        commands: [\n          {\n            property: \"clearRect\",\n            // wipe canvas\n            args: [0, 0, width, height]\n          },\n          {\n            property: \"drawImage\",\n            // draws (semi-transparent) image\n            args: [\n              {\n                rr_type: \"ImageBitmap\",\n                args: [\n                  {\n                    rr_type: \"Blob\",\n                    data: [{ rr_type: \"ArrayBuffer\", base64 }],\n                    type\n                  }\n                ]\n              },\n              0,\n              0\n            ]\n          }\n        ]\n      });\n    };\n    const timeBetweenSnapshots = 1e3 / fps;\n    let lastSnapshotTime = 0;\n    let rafId;\n    const getCanvas = () => {\n      const matchedCanvas = [];\n      win.document.querySelectorAll(\"canvas\").forEach((canvas) => {\n        if (!isBlocked(canvas, blockClass, blockSelector, true)) {\n          matchedCanvas.push(canvas);\n        }\n      });\n      return matchedCanvas;\n    };\n    const takeCanvasSnapshots = (timestamp) => {\n      if (lastSnapshotTime && timestamp - lastSnapshotTime < timeBetweenSnapshots) {\n        rafId = requestAnimationFrame(takeCanvasSnapshots);\n        return;\n      }\n      lastSnapshotTime = timestamp;\n      getCanvas().forEach(async (canvas) => {\n        var _a2;\n        const id = this.mirror.getId(canvas);\n        if (snapshotInProgressMap.get(id)) return;\n        if (canvas.width === 0 || canvas.height === 0) return;\n        snapshotInProgressMap.set(id, true);\n        if ([\"webgl\", \"webgl2\"].includes(canvas.__context)) {\n          const context = canvas.getContext(canvas.__context);\n          if (((_a2 = context == null ? void 0 : context.getContextAttributes()) == null ? void 0 : _a2.preserveDrawingBuffer) === false) {\n            context.clear(context.COLOR_BUFFER_BIT);\n          }\n        }\n        const bitmap = await createImageBitmap(canvas);\n        worker.postMessage(\n          {\n            id,\n            bitmap,\n            width: canvas.width,\n            height: canvas.height,\n            dataURLOptions: options.dataURLOptions\n          },\n          [bitmap]\n        );\n      });\n      rafId = requestAnimationFrame(takeCanvasSnapshots);\n    };\n    rafId = requestAnimationFrame(takeCanvasSnapshots);\n    this.resetObservers = () => {\n      canvasContextReset();\n      cancelAnimationFrame(rafId);\n    };\n  }\n  initCanvasMutationObserver(win, blockClass, blockSelector) {\n    this.startRAFTimestamping();\n    this.startPendingCanvasMutationFlusher();\n    const canvasContextReset = initCanvasContextObserver(\n      win,\n      blockClass,\n      blockSelector,\n      false\n    );\n    const canvas2DReset = initCanvas2DMutationObserver(\n      this.processMutation.bind(this),\n      win,\n      blockClass,\n      blockSelector\n    );\n    const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(\n      this.processMutation.bind(this),\n      win,\n      blockClass,\n      blockSelector\n    );\n    this.resetObservers = () => {\n      canvasContextReset();\n      canvas2DReset();\n      canvasWebGL1and2Reset();\n    };\n  }\n  startPendingCanvasMutationFlusher() {\n    requestAnimationFrame(() => this.flushPendingCanvasMutations());\n  }\n  startRAFTimestamping() {\n    const setLatestRAFTimestamp = (timestamp) => {\n      this.rafStamps.latestId = timestamp;\n      requestAnimationFrame(setLatestRAFTimestamp);\n    };\n    requestAnimationFrame(setLatestRAFTimestamp);\n  }\n  flushPendingCanvasMutations() {\n    this.pendingCanvasMutations.forEach(\n      (_values, canvas) => {\n        const id = this.mirror.getId(canvas);\n        this.flushPendingCanvasMutationFor(canvas, id);\n      }\n    );\n    requestAnimationFrame(() => this.flushPendingCanvasMutations());\n  }\n  flushPendingCanvasMutationFor(canvas, id) {\n    if (this.frozen || this.locked) {\n      return;\n    }\n    const valuesWithType = this.pendingCanvasMutations.get(canvas);\n    if (!valuesWithType || id === -1) return;\n    const values = valuesWithType.map((value) => {\n      const { type: type2, ...rest } = value;\n      return rest;\n    });\n    const { type } = valuesWithType[0];\n    this.mutationCb({ id, type, commands: values });\n    this.pendingCanvasMutations.delete(canvas);\n  }\n}\nclass StylesheetManager {\n  constructor(options) {\n    __publicField(this, \"trackedLinkElements\", /* @__PURE__ */ new WeakSet());\n    __publicField(this, \"mutationCb\");\n    __publicField(this, \"adoptedStyleSheetCb\");\n    __publicField(this, \"styleMirror\", new StyleSheetMirror());\n    this.mutationCb = options.mutationCb;\n    this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n  }\n  attachLinkElement(linkEl, childSn) {\n    if (\"_cssText\" in childSn.attributes)\n      this.mutationCb({\n        adds: [],\n        removes: [],\n        texts: [],\n        attributes: [\n          {\n            id: childSn.id,\n            attributes: childSn.attributes\n          }\n        ]\n      });\n    this.trackLinkElement(linkEl);\n  }\n  trackLinkElement(linkEl) {\n    if (this.trackedLinkElements.has(linkEl)) return;\n    this.trackedLinkElements.add(linkEl);\n    this.trackStylesheetInLinkElement(linkEl);\n  }\n  adoptStyleSheets(sheets, hostId) {\n    if (sheets.length === 0) return;\n    const adoptedStyleSheetData = {\n      id: hostId,\n      styleIds: []\n    };\n    const styles = [];\n    for (const sheet of sheets) {\n      let styleId;\n      if (!this.styleMirror.has(sheet)) {\n        styleId = this.styleMirror.add(sheet);\n        styles.push({\n          styleId,\n          rules: Array.from(sheet.rules || CSSRule, (r, index2) => ({\n            rule: stringifyRule(r, sheet.href),\n            index: index2\n          }))\n        });\n      } else styleId = this.styleMirror.getId(sheet);\n      adoptedStyleSheetData.styleIds.push(styleId);\n    }\n    if (styles.length > 0) adoptedStyleSheetData.styles = styles;\n    this.adoptedStyleSheetCb(adoptedStyleSheetData);\n  }\n  reset() {\n    this.styleMirror.reset();\n    this.trackedLinkElements = /* @__PURE__ */ new WeakSet();\n  }\n  // TODO: take snapshot on stylesheet reload by applying event listener\n  trackStylesheetInLinkElement(_linkEl) {\n  }\n}\nclass ProcessedNodeManager {\n  constructor() {\n    __publicField(this, \"nodeMap\", /* @__PURE__ */ new WeakMap());\n    __publicField(this, \"active\", false);\n  }\n  inOtherBuffer(node, thisBuffer) {\n    const buffers = this.nodeMap.get(node);\n    return buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer);\n  }\n  add(node, buffer) {\n    if (!this.active) {\n      this.active = true;\n      requestAnimationFrame(() => {\n        this.nodeMap = /* @__PURE__ */ new WeakMap();\n        this.active = false;\n      });\n    }\n    this.nodeMap.set(node, (this.nodeMap.get(node) || /* @__PURE__ */ new Set()).add(buffer));\n  }\n  destroy() {\n  }\n}\nlet wrappedEmit;\nlet takeFullSnapshot;\nlet canvasManager;\nlet recording = false;\ntry {\n  if (Array.from([1], (x) => x * 2)[0] !== 2) {\n    const cleanFrame = document.createElement(\"iframe\");\n    document.body.appendChild(cleanFrame);\n    Array.from = ((_a = cleanFrame.contentWindow) == null ? void 0 : _a.Array.from) || Array.from;\n    document.body.removeChild(cleanFrame);\n  }\n} catch (err) {\n  console.debug(\"Unable to override Array.from\", err);\n}\nconst mirror = createMirror();\nfunction record(options = {}) {\n  const {\n    emit,\n    checkoutEveryNms,\n    checkoutEveryNth,\n    blockClass = \"rr-block\",\n    blockSelector = null,\n    ignoreClass = \"rr-ignore\",\n    ignoreSelector = null,\n    maskTextClass = \"rr-mask\",\n    maskTextSelector = null,\n    inlineStylesheet = true,\n    maskAllInputs,\n    maskInputOptions: _maskInputOptions,\n    slimDOMOptions: _slimDOMOptions,\n    maskInputFn,\n    maskTextFn,\n    hooks,\n    packFn,\n    sampling = {},\n    dataURLOptions = {},\n    mousemoveWait,\n    recordDOM = true,\n    recordCanvas = false,\n    recordCrossOriginIframes = false,\n    recordAfter = options.recordAfter === \"DOMContentLoaded\" ? options.recordAfter : \"load\",\n    userTriggeredOnInput = false,\n    collectFonts = false,\n    inlineImages = false,\n    plugins,\n    keepIframeSrcFn = () => false,\n    ignoreCSSAttributes = /* @__PURE__ */ new Set([]),\n    errorHandler: errorHandler2\n  } = options;\n  registerErrorHandler(errorHandler2);\n  const inEmittingFrame = recordCrossOriginIframes ? window.parent === window : true;\n  let passEmitsToParent = false;\n  if (!inEmittingFrame) {\n    try {\n      if (window.parent.document) {\n        passEmitsToParent = false;\n      }\n    } catch (e) {\n      passEmitsToParent = true;\n    }\n  }\n  if (inEmittingFrame && !emit) {\n    throw new Error(\"emit function is required\");\n  }\n  if (!inEmittingFrame && !passEmitsToParent) {\n    return () => {\n    };\n  }\n  if (mousemoveWait !== void 0 && sampling.mousemove === void 0) {\n    sampling.mousemove = mousemoveWait;\n  }\n  mirror.reset();\n  const maskInputOptions = maskAllInputs === true ? {\n    color: true,\n    date: true,\n    \"datetime-local\": true,\n    email: true,\n    month: true,\n    number: true,\n    range: true,\n    search: true,\n    tel: true,\n    text: true,\n    time: true,\n    url: true,\n    week: true,\n    textarea: true,\n    select: true,\n    password: true\n  } : _maskInputOptions !== void 0 ? _maskInputOptions : { password: true };\n  const slimDOMOptions = slimDOMDefaults(_slimDOMOptions);\n  polyfill();\n  let lastFullSnapshotEvent;\n  let incrementalSnapshotCount = 0;\n  const eventProcessor = (e) => {\n    for (const plugin of plugins || []) {\n      if (plugin.eventProcessor) {\n        e = plugin.eventProcessor(e);\n      }\n    }\n    if (packFn && // Disable packing events which will be emitted to parent frames.\n    !passEmitsToParent) {\n      e = packFn(e);\n    }\n    return e;\n  };\n  wrappedEmit = (r, isCheckout) => {\n    var _a2;\n    const e = r;\n    e.timestamp = nowTimestamp();\n    if (((_a2 = mutationBuffers[0]) == null ? void 0 : _a2.isFrozen()) && e.type !== EventType.FullSnapshot && !(e.type === EventType.IncrementalSnapshot && e.data.source === IncrementalSource.Mutation)) {\n      mutationBuffers.forEach((buf) => buf.unfreeze());\n    }\n    if (inEmittingFrame) {\n      emit == null ? void 0 : emit(eventProcessor(e), isCheckout);\n    } else if (passEmitsToParent) {\n      const message = {\n        type: \"rrweb\",\n        event: eventProcessor(e),\n        origin: window.location.origin,\n        isCheckout\n      };\n      window.parent.postMessage(message, \"*\");\n    }\n    if (e.type === EventType.FullSnapshot) {\n      lastFullSnapshotEvent = e;\n      incrementalSnapshotCount = 0;\n    } else if (e.type === EventType.IncrementalSnapshot) {\n      if (e.data.source === IncrementalSource.Mutation && e.data.isAttachIframe) {\n        return;\n      }\n      incrementalSnapshotCount++;\n      const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n      const exceedTime = checkoutEveryNms && e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n      if (exceedCount || exceedTime) {\n        takeFullSnapshot(true);\n      }\n    }\n  };\n  const wrappedMutationEmit = (m) => {\n    wrappedEmit({\n      type: EventType.IncrementalSnapshot,\n      data: {\n        source: IncrementalSource.Mutation,\n        ...m\n      }\n    });\n  };\n  const wrappedScrollEmit = (p) => wrappedEmit({\n    type: EventType.IncrementalSnapshot,\n    data: {\n      source: IncrementalSource.Scroll,\n      ...p\n    }\n  });\n  const wrappedCanvasMutationEmit = (p) => wrappedEmit({\n    type: EventType.IncrementalSnapshot,\n    data: {\n      source: IncrementalSource.CanvasMutation,\n      ...p\n    }\n  });\n  const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit({\n    type: EventType.IncrementalSnapshot,\n    data: {\n      source: IncrementalSource.AdoptedStyleSheet,\n      ...a\n    }\n  });\n  const stylesheetManager = new StylesheetManager({\n    mutationCb: wrappedMutationEmit,\n    adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit\n  });\n  const iframeManager = new IframeManager({\n    mirror,\n    mutationCb: wrappedMutationEmit,\n    stylesheetManager,\n    recordCrossOriginIframes,\n    wrappedEmit\n  });\n  for (const plugin of plugins || []) {\n    if (plugin.getMirror)\n      plugin.getMirror({\n        nodeMirror: mirror,\n        crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n        crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror\n      });\n  }\n  const processedNodeManager = new ProcessedNodeManager();\n  canvasManager = new CanvasManager({\n    recordCanvas,\n    mutationCb: wrappedCanvasMutationEmit,\n    win: window,\n    blockClass,\n    blockSelector,\n    mirror,\n    sampling: sampling.canvas,\n    dataURLOptions\n  });\n  const shadowDomManager = new ShadowDomManager({\n    mutationCb: wrappedMutationEmit,\n    scrollCb: wrappedScrollEmit,\n    bypassOptions: {\n      blockClass,\n      blockSelector,\n      maskTextClass,\n      maskTextSelector,\n      inlineStylesheet,\n      maskInputOptions,\n      dataURLOptions,\n      maskTextFn,\n      maskInputFn,\n      recordCanvas,\n      inlineImages,\n      sampling,\n      slimDOMOptions,\n      iframeManager,\n      stylesheetManager,\n      canvasManager,\n      keepIframeSrcFn,\n      processedNodeManager\n    },\n    mirror\n  });\n  takeFullSnapshot = (isCheckout = false) => {\n    if (!recordDOM) {\n      return;\n    }\n    wrappedEmit(\n      {\n        type: EventType.Meta,\n        data: {\n          href: window.location.href,\n          width: getWindowWidth(),\n          height: getWindowHeight()\n        }\n      },\n      isCheckout\n    );\n    stylesheetManager.reset();\n    shadowDomManager.init();\n    mutationBuffers.forEach((buf) => buf.lock());\n    const node = snapshot(document, {\n      mirror,\n      blockClass,\n      blockSelector,\n      maskTextClass,\n      maskTextSelector,\n      inlineStylesheet,\n      maskAllInputs: maskInputOptions,\n      maskTextFn,\n      maskInputFn,\n      slimDOM: slimDOMOptions,\n      dataURLOptions,\n      recordCanvas,\n      inlineImages,\n      onSerialize: (n) => {\n        if (isSerializedIframe(n, mirror)) {\n          iframeManager.addIframe(n);\n        }\n        if (isSerializedStylesheet(n, mirror)) {\n          stylesheetManager.trackLinkElement(n);\n        }\n        if (hasShadowRoot(n)) {\n          shadowDomManager.addShadowRoot(index.shadowRoot(n), document);\n        }\n      },\n      onIframeLoad: (iframe, childSn) => {\n        iframeManager.attachIframe(iframe, childSn);\n        shadowDomManager.observeAttachShadow(iframe);\n      },\n      onStylesheetLoad: (linkEl, childSn) => {\n        stylesheetManager.attachLinkElement(linkEl, childSn);\n      },\n      keepIframeSrcFn\n    });\n    if (!node) {\n      return console.warn(\"Failed to snapshot the document\");\n    }\n    wrappedEmit(\n      {\n        type: EventType.FullSnapshot,\n        data: {\n          node,\n          initialOffset: getWindowScroll(window)\n        }\n      },\n      isCheckout\n    );\n    mutationBuffers.forEach((buf) => buf.unlock());\n    if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\n      stylesheetManager.adoptStyleSheets(\n        document.adoptedStyleSheets,\n        mirror.getId(document)\n      );\n  };\n  try {\n    const handlers = [];\n    const observe = (doc) => {\n      var _a2;\n      return callbackWrapper(initObservers)(\n        {\n          mutationCb: wrappedMutationEmit,\n          mousemoveCb: (positions, source) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source,\n              positions\n            }\n          }),\n          mouseInteractionCb: (d) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.MouseInteraction,\n              ...d\n            }\n          }),\n          scrollCb: wrappedScrollEmit,\n          viewportResizeCb: (d) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.ViewportResize,\n              ...d\n            }\n          }),\n          inputCb: (v) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.Input,\n              ...v\n            }\n          }),\n          mediaInteractionCb: (p) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.MediaInteraction,\n              ...p\n            }\n          }),\n          styleSheetRuleCb: (r) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.StyleSheetRule,\n              ...r\n            }\n          }),\n          styleDeclarationCb: (r) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.StyleDeclaration,\n              ...r\n            }\n          }),\n          canvasMutationCb: wrappedCanvasMutationEmit,\n          fontCb: (p) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.Font,\n              ...p\n            }\n          }),\n          selectionCb: (p) => {\n            wrappedEmit({\n              type: EventType.IncrementalSnapshot,\n              data: {\n                source: IncrementalSource.Selection,\n                ...p\n              }\n            });\n          },\n          customElementCb: (c) => {\n            wrappedEmit({\n              type: EventType.IncrementalSnapshot,\n              data: {\n                source: IncrementalSource.CustomElement,\n                ...c\n              }\n            });\n          },\n          blockClass,\n          ignoreClass,\n          ignoreSelector,\n          maskTextClass,\n          maskTextSelector,\n          maskInputOptions,\n          inlineStylesheet,\n          sampling,\n          recordDOM,\n          recordCanvas,\n          inlineImages,\n          userTriggeredOnInput,\n          collectFonts,\n          doc,\n          maskInputFn,\n          maskTextFn,\n          keepIframeSrcFn,\n          blockSelector,\n          slimDOMOptions,\n          dataURLOptions,\n          mirror,\n          iframeManager,\n          stylesheetManager,\n          shadowDomManager,\n          processedNodeManager,\n          canvasManager,\n          ignoreCSSAttributes,\n          plugins: ((_a2 = plugins == null ? void 0 : plugins.filter((p) => p.observer)) == null ? void 0 : _a2.map((p) => ({\n            observer: p.observer,\n            options: p.options,\n            callback: (payload) => wrappedEmit({\n              type: EventType.Plugin,\n              data: {\n                plugin: p.name,\n                payload\n              }\n            })\n          }))) || []\n        },\n        hooks\n      );\n    };\n    iframeManager.addLoadListener((iframeEl) => {\n      try {\n        handlers.push(observe(iframeEl.contentDocument));\n      } catch (error) {\n        console.warn(error);\n      }\n    });\n    const init = () => {\n      takeFullSnapshot();\n      handlers.push(observe(document));\n      recording = true;\n    };\n    if ([\"interactive\", \"complete\"].includes(document.readyState)) {\n      init();\n    } else {\n      handlers.push(\n        on(\"DOMContentLoaded\", () => {\n          wrappedEmit({\n            type: EventType.DomContentLoaded,\n            data: {}\n          });\n          if (recordAfter === \"DOMContentLoaded\") init();\n        })\n      );\n      handlers.push(\n        on(\n          \"load\",\n          () => {\n            wrappedEmit({\n              type: EventType.Load,\n              data: {}\n            });\n            if (recordAfter === \"load\") init();\n          },\n          window\n        )\n      );\n    }\n    return () => {\n      handlers.forEach((handler) => {\n        try {\n          handler();\n        } catch (error) {\n          const msg = String(error).toLowerCase();\n          if (!msg.includes(\"cross-origin\")) {\n            console.warn(error);\n          }\n        }\n      });\n      processedNodeManager.destroy();\n      recording = false;\n      unregisterErrorHandler();\n    };\n  } catch (error) {\n    console.warn(error);\n  }\n}\nrecord.addCustomEvent = (tag, payload) => {\n  if (!recording) {\n    throw new Error(\"please add custom event after start recording\");\n  }\n  wrappedEmit({\n    type: EventType.Custom,\n    data: {\n      tag,\n      payload\n    }\n  });\n};\nrecord.freezePage = () => {\n  mutationBuffers.forEach((buf) => buf.freeze());\n};\nrecord.takeFullSnapshot = (isCheckout) => {\n  if (!recording) {\n    throw new Error(\"please take full snapshot after start recording\");\n  }\n  takeFullSnapshot(isCheckout);\n};\nrecord.mirror = mirror;\nexport {\n  record\n};\n//# sourceMappingURL=record.js.map\n","var u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;\nvar fleb = new u8([\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  1,\n  1,\n  1,\n  1,\n  2,\n  2,\n  2,\n  2,\n  3,\n  3,\n  3,\n  3,\n  4,\n  4,\n  4,\n  4,\n  5,\n  5,\n  5,\n  5,\n  0,\n  /* unused */\n  0,\n  0,\n  /* impossible */\n  0\n]);\nvar fdeb = new u8([\n  0,\n  0,\n  0,\n  0,\n  1,\n  1,\n  2,\n  2,\n  3,\n  3,\n  4,\n  4,\n  5,\n  5,\n  6,\n  6,\n  7,\n  7,\n  8,\n  8,\n  9,\n  9,\n  10,\n  10,\n  11,\n  11,\n  12,\n  12,\n  13,\n  13,\n  /* unused */\n  0,\n  0\n]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function(eb, start) {\n  var b = new u16(31);\n  for (var i = 0; i < 31; ++i) {\n    b[i] = start += 1 << eb[i - 1];\n  }\n  var r = new u32(b[30]);\n  for (var i = 1; i < 30; ++i) {\n    for (var j = b[i]; j < b[i + 1]; ++j) {\n      r[j] = j - b[i] << 5 | i;\n    }\n  }\n  return [b, r];\n};\nvar _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n  var x = (i & 43690) >>> 1 | (i & 21845) << 1;\n  x = (x & 52428) >>> 2 | (x & 13107) << 2;\n  x = (x & 61680) >>> 4 | (x & 3855) << 4;\n  rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar hMap = function(cd, mb, r) {\n  var s = cd.length;\n  var i = 0;\n  var l = new u16(mb);\n  for (; i < s; ++i)\n    ++l[cd[i] - 1];\n  var le = new u16(mb);\n  for (i = 0; i < mb; ++i) {\n    le[i] = le[i - 1] + l[i - 1] << 1;\n  }\n  var co;\n  if (r) {\n    co = new u16(1 << mb);\n    var rvb = 15 - mb;\n    for (i = 0; i < s; ++i) {\n      if (cd[i]) {\n        var sv = i << 4 | cd[i];\n        var r_1 = mb - cd[i];\n        var v = le[cd[i] - 1]++ << r_1;\n        for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n          co[rev[v] >>> rvb] = sv;\n        }\n      }\n    }\n  } else {\n    co = new u16(s);\n    for (i = 0; i < s; ++i)\n      co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n  }\n  return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n  flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n  flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n  flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n  flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n  fdt[i] = 5;\nvar flm = /* @__PURE__ */ hMap(flt, 9, 0), flrm = /* @__PURE__ */ hMap(flt, 9, 1);\nvar fdm = /* @__PURE__ */ hMap(fdt, 5, 0), fdrm = /* @__PURE__ */ hMap(fdt, 5, 1);\nvar max = function(a) {\n  var m = a[0];\n  for (var i = 1; i < a.length; ++i) {\n    if (a[i] > m)\n      m = a[i];\n  }\n  return m;\n};\nvar bits = function(d, p, m) {\n  var o = p / 8 >> 0;\n  return (d[o] | d[o + 1] << 8) >>> (p & 7) & m;\n};\nvar bits16 = function(d, p) {\n  var o = p / 8 >> 0;\n  return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >>> (p & 7);\n};\nvar shft = function(p) {\n  return (p / 8 >> 0) + (p & 7 && 1);\n};\nvar slc = function(v, s, e) {\n  if (e == null || e > v.length)\n    e = v.length;\n  var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n  n.set(v.subarray(s, e));\n  return n;\n};\nvar inflt = function(dat, buf, st) {\n  var sl = dat.length;\n  var noBuf = !buf || st;\n  var noSt = !st || st.i;\n  if (!st)\n    st = {};\n  if (!buf)\n    buf = new u8(sl * 3);\n  var cbuf = function(l2) {\n    var bl = buf.length;\n    if (l2 > bl) {\n      var nbuf = new u8(Math.max(bl * 2, l2));\n      nbuf.set(buf);\n      buf = nbuf;\n    }\n  };\n  var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n  var tbts = sl * 8;\n  do {\n    if (!lm) {\n      st.f = final = bits(dat, pos, 1);\n      var type = bits(dat, pos + 1, 3);\n      pos += 3;\n      if (!type) {\n        var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n        if (t > sl) {\n          if (noSt)\n            throw \"unexpected EOF\";\n          break;\n        }\n        if (noBuf)\n          cbuf(bt + l);\n        buf.set(dat.subarray(s, t), bt);\n        st.b = bt += l, st.p = pos = t * 8;\n        continue;\n      } else if (type == 1)\n        lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n      else if (type == 2) {\n        var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n        var tl = hLit + bits(dat, pos + 5, 31) + 1;\n        pos += 14;\n        var ldt = new u8(tl);\n        var clt = new u8(19);\n        for (var i = 0; i < hcLen; ++i) {\n          clt[clim[i]] = bits(dat, pos + i * 3, 7);\n        }\n        pos += hcLen * 3;\n        var clb = max(clt), clbmsk = (1 << clb) - 1;\n        if (!noSt && pos + tl * (clb + 7) > tbts)\n          break;\n        var clm = hMap(clt, clb, 1);\n        for (var i = 0; i < tl; ) {\n          var r = clm[bits(dat, pos, clbmsk)];\n          pos += r & 15;\n          var s = r >>> 4;\n          if (s < 16) {\n            ldt[i++] = s;\n          } else {\n            var c = 0, n = 0;\n            if (s == 16)\n              n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n            else if (s == 17)\n              n = 3 + bits(dat, pos, 7), pos += 3;\n            else if (s == 18)\n              n = 11 + bits(dat, pos, 127), pos += 7;\n            while (n--)\n              ldt[i++] = c;\n          }\n        }\n        var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n        lbt = max(lt);\n        dbt = max(dt);\n        lm = hMap(lt, lbt, 1);\n        dm = hMap(dt, dbt, 1);\n      } else\n        throw \"invalid block type\";\n      if (pos > tbts)\n        throw \"unexpected EOF\";\n    }\n    if (noBuf)\n      cbuf(bt + 131072);\n    var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n    var mxa = lbt + dbt + 18;\n    while (noSt || pos + mxa < tbts) {\n      var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n      pos += c & 15;\n      if (pos > tbts)\n        throw \"unexpected EOF\";\n      if (!c)\n        throw \"invalid length/literal\";\n      if (sym < 256)\n        buf[bt++] = sym;\n      else if (sym == 256) {\n        lm = null;\n        break;\n      } else {\n        var add = sym - 254;\n        if (sym > 264) {\n          var i = sym - 257, b = fleb[i];\n          add = bits(dat, pos, (1 << b) - 1) + fl[i];\n          pos += b;\n        }\n        var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n        if (!d)\n          throw \"invalid distance\";\n        pos += d & 15;\n        var dt = fd[dsym];\n        if (dsym > 3) {\n          var b = fdeb[dsym];\n          dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n        }\n        if (pos > tbts)\n          throw \"unexpected EOF\";\n        if (noBuf)\n          cbuf(bt + 131072);\n        var end = bt + add;\n        for (; bt < end; bt += 4) {\n          buf[bt] = buf[bt - dt];\n          buf[bt + 1] = buf[bt + 1 - dt];\n          buf[bt + 2] = buf[bt + 2 - dt];\n          buf[bt + 3] = buf[bt + 3 - dt];\n        }\n        bt = end;\n      }\n    }\n    st.l = lm, st.p = pos, st.b = bt;\n    if (lm)\n      final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n  } while (!final);\n  return bt == buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function(d, p, v) {\n  v <<= p & 7;\n  var o = p / 8 >> 0;\n  d[o] |= v;\n  d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function(d, p, v) {\n  v <<= p & 7;\n  var o = p / 8 >> 0;\n  d[o] |= v;\n  d[o + 1] |= v >>> 8;\n  d[o + 2] |= v >>> 16;\n};\nvar hTree = function(d, mb) {\n  var t = [];\n  for (var i = 0; i < d.length; ++i) {\n    if (d[i])\n      t.push({ s: i, f: d[i] });\n  }\n  var s = t.length;\n  var t2 = t.slice();\n  if (!s)\n    return [new u8(0), 0];\n  if (s == 1) {\n    var v = new u8(t[0].s + 1);\n    v[t[0].s] = 1;\n    return [v, 1];\n  }\n  t.sort(function(a, b) {\n    return a.f - b.f;\n  });\n  t.push({ s: -1, f: 25001 });\n  var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n  t[0] = { s: -1, f: l.f + r.f, l, r };\n  while (i1 != s - 1) {\n    l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n    r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n    t[i1++] = { s: -1, f: l.f + r.f, l, r };\n  }\n  var maxSym = t2[0].s;\n  for (var i = 1; i < s; ++i) {\n    if (t2[i].s > maxSym)\n      maxSym = t2[i].s;\n  }\n  var tr = new u16(maxSym + 1);\n  var mbt = ln(t[i1 - 1], tr, 0);\n  if (mbt > mb) {\n    var i = 0, dt = 0;\n    var lft = mbt - mb, cst = 1 << lft;\n    t2.sort(function(a, b) {\n      return tr[b.s] - tr[a.s] || a.f - b.f;\n    });\n    for (; i < s; ++i) {\n      var i2_1 = t2[i].s;\n      if (tr[i2_1] > mb) {\n        dt += cst - (1 << mbt - tr[i2_1]);\n        tr[i2_1] = mb;\n      } else\n        break;\n    }\n    dt >>>= lft;\n    while (dt > 0) {\n      var i2_2 = t2[i].s;\n      if (tr[i2_2] < mb)\n        dt -= 1 << mb - tr[i2_2]++ - 1;\n      else\n        ++i;\n    }\n    for (; i >= 0 && dt; --i) {\n      var i2_3 = t2[i].s;\n      if (tr[i2_3] == mb) {\n        --tr[i2_3];\n        ++dt;\n      }\n    }\n    mbt = mb;\n  }\n  return [new u8(tr), mbt];\n};\nvar ln = function(n, l, d) {\n  return n.s == -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function(c) {\n  var s = c.length;\n  while (s && !c[--s])\n    ;\n  var cl = new u16(++s);\n  var cli = 0, cln = c[0], cls = 1;\n  var w = function(v) {\n    cl[cli++] = v;\n  };\n  for (var i = 1; i <= s; ++i) {\n    if (c[i] == cln && i != s)\n      ++cls;\n    else {\n      if (!cln && cls > 2) {\n        for (; cls > 138; cls -= 138)\n          w(32754);\n        if (cls > 2) {\n          w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n          cls = 0;\n        }\n      } else if (cls > 3) {\n        w(cln), --cls;\n        for (; cls > 6; cls -= 6)\n          w(8304);\n        if (cls > 2)\n          w(cls - 3 << 5 | 8208), cls = 0;\n      }\n      while (cls--)\n        w(cln);\n      cls = 1;\n      cln = c[i];\n    }\n  }\n  return [cl.subarray(0, cli), s];\n};\nvar clen = function(cf, cl) {\n  var l = 0;\n  for (var i = 0; i < cl.length; ++i)\n    l += cf[i] * cl[i];\n  return l;\n};\nvar wfblk = function(out, pos, dat) {\n  var s = dat.length;\n  var o = shft(pos + 2);\n  out[o] = s & 255;\n  out[o + 1] = s >>> 8;\n  out[o + 2] = out[o] ^ 255;\n  out[o + 3] = out[o + 1] ^ 255;\n  for (var i = 0; i < s; ++i)\n    out[o + i + 4] = dat[i];\n  return (o + 4 + s) * 8;\n};\nvar wblk = function(dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n  wbits(out, p++, final);\n  ++lf[256];\n  var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n  var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n  var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n  var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n  var lcfreq = new u16(19);\n  for (var i = 0; i < lclt.length; ++i)\n    lcfreq[lclt[i] & 31]++;\n  for (var i = 0; i < lcdt.length; ++i)\n    lcfreq[lcdt[i] & 31]++;\n  var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n  var nlcc = 19;\n  for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n    ;\n  var flen = bl + 5 << 3;\n  var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n  var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n  if (flen <= ftlen && flen <= dtlen)\n    return wfblk(out, p, dat.subarray(bs, bs + bl));\n  var lm, ll, dm, dl;\n  wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n  if (dtlen < ftlen) {\n    lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n    var llm = hMap(lct, mlcb, 0);\n    wbits(out, p, nlc - 257);\n    wbits(out, p + 5, ndc - 1);\n    wbits(out, p + 10, nlcc - 4);\n    p += 14;\n    for (var i = 0; i < nlcc; ++i)\n      wbits(out, p + 3 * i, lct[clim[i]]);\n    p += 3 * nlcc;\n    var lcts = [lclt, lcdt];\n    for (var it = 0; it < 2; ++it) {\n      var clct = lcts[it];\n      for (var i = 0; i < clct.length; ++i) {\n        var len = clct[i] & 31;\n        wbits(out, p, llm[len]), p += lct[len];\n        if (len > 15)\n          wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n      }\n    }\n  } else {\n    lm = flm, ll = flt, dm = fdm, dl = fdt;\n  }\n  for (var i = 0; i < li; ++i) {\n    if (syms[i] > 255) {\n      var len = syms[i] >>> 18 & 31;\n      wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n      if (len > 7)\n        wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n      var dst = syms[i] & 31;\n      wbits16(out, p, dm[dst]), p += dl[dst];\n      if (dst > 3)\n        wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n    } else {\n      wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n    }\n  }\n  wbits16(out, p, lm[256]);\n  return p + ll[256];\n};\nvar deo = /* @__PURE__ */ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar dflt = function(dat, lvl, plvl, pre, post, lst) {\n  var s = dat.length;\n  var o = new u8(pre + s + 5 * (1 + Math.floor(s / 7e3)) + post);\n  var w = o.subarray(pre, o.length - post);\n  var pos = 0;\n  if (!lvl || s < 8) {\n    for (var i = 0; i <= s; i += 65535) {\n      var e = i + 65535;\n      if (e < s) {\n        pos = wfblk(w, pos, dat.subarray(i, e));\n      } else {\n        w[i] = lst;\n        pos = wfblk(w, pos, dat.subarray(i, s));\n      }\n    }\n  } else {\n    var opt = deo[lvl - 1];\n    var n = opt >>> 13, c = opt & 8191;\n    var msk_1 = (1 << plvl) - 1;\n    var prev = new u16(32768), head = new u16(msk_1 + 1);\n    var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n    var hsh = function(i2) {\n      return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n    };\n    var syms = new u32(25e3);\n    var lf = new u16(288), df = new u16(32);\n    var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n    for (; i < s; ++i) {\n      var hv = hsh(i);\n      var imod = i & 32767;\n      var pimod = head[hv];\n      prev[imod] = pimod;\n      head[hv] = imod;\n      if (wi <= i) {\n        var rem = s - i;\n        if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n          pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n          li = lc_1 = eb = 0, bs = i;\n          for (var j = 0; j < 286; ++j)\n            lf[j] = 0;\n          for (var j = 0; j < 30; ++j)\n            df[j] = 0;\n        }\n        var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n        if (rem > 2 && hv == hsh(i - dif)) {\n          var maxn = Math.min(n, rem) - 1;\n          var maxd = Math.min(32767, i);\n          var ml = Math.min(258, rem);\n          while (dif <= maxd && --ch_1 && imod != pimod) {\n            if (dat[i + l] == dat[i + l - dif]) {\n              var nl = 0;\n              for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n                ;\n              if (nl > l) {\n                l = nl, d = dif;\n                if (nl > maxn)\n                  break;\n                var mmd = Math.min(dif, nl - 2);\n                var md = 0;\n                for (var j = 0; j < mmd; ++j) {\n                  var ti = i - dif + j + 32768 & 32767;\n                  var pti = prev[ti];\n                  var cd = ti - pti + 32768 & 32767;\n                  if (cd > md)\n                    md = cd, pimod = ti;\n                }\n              }\n            }\n            imod = pimod, pimod = prev[imod];\n            dif += imod - pimod + 32768 & 32767;\n          }\n        }\n        if (d) {\n          syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n          var lin = revfl[l] & 31, din = revfd[d] & 31;\n          eb += fleb[lin] + fdeb[din];\n          ++lf[257 + lin];\n          ++df[din];\n          wi = i + l;\n          ++lc_1;\n        } else {\n          syms[li++] = dat[i];\n          ++lf[dat[i]];\n        }\n      }\n    }\n    pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n  }\n  return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function() {\n  var a = 1, b = 0;\n  return {\n    p: function(d) {\n      var n = a, m = b;\n      var l = d.length;\n      for (var i = 0; i != l; ) {\n        var e = Math.min(i + 5552, l);\n        for (; i < e; ++i)\n          n += d[i], m += n;\n        n %= 65521, m %= 65521;\n      }\n      a = n, b = m;\n    },\n    d: function() {\n      return (a >>> 8 << 16 | (b & 255) << 8 | b >>> 8) + ((a & 255) << 23) * 2;\n    }\n  };\n};\nvar dopt = function(dat, opt, pre, post, st) {\n  return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, true);\n};\nvar wbytes = function(d, b, v) {\n  for (; v; ++b)\n    d[b] = v, v >>>= 8;\n};\nvar zlh = function(c, o) {\n  var lv = o.level, fl2 = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n  c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function(d) {\n  if ((d[0] & 15) != 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n    throw \"invalid zlib data\";\n  if (d[1] & 32)\n    throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n  if (opts === void 0) {\n    opts = {};\n  }\n  var a = adler();\n  a.p(data);\n  var d = dopt(data, opts, 2, 4);\n  return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n  return inflt((zlv(data), data.subarray(2, -4)), out);\n}\nfunction strToU8(str, latin1) {\n  var l = str.length;\n  if (!latin1 && typeof TextEncoder != \"undefined\")\n    return new TextEncoder().encode(str);\n  var ar = new u8(str.length + (str.length >>> 1));\n  var ai = 0;\n  var w = function(v) {\n    ar[ai++] = v;\n  };\n  for (var i = 0; i < l; ++i) {\n    if (ai + 5 > ar.length) {\n      var n = new u8(ai + 8 + (l - i << 1));\n      n.set(ar);\n      ar = n;\n    }\n    var c = str.charCodeAt(i);\n    if (c < 128 || latin1)\n      w(c);\n    else if (c < 2048)\n      w(192 | c >>> 6), w(128 | c & 63);\n    else if (c > 55295 && c < 57344)\n      c = 65536 + (c & 1023 << 10) | str.charCodeAt(++i) & 1023, w(240 | c >>> 18), w(128 | c >>> 12 & 63), w(128 | c >>> 6 & 63), w(128 | c & 63);\n    else\n      w(224 | c >>> 12), w(128 | c >>> 6 & 63), w(128 | c & 63);\n  }\n  return slc(ar, 0, ai);\n}\nfunction strFromU8(dat, latin1) {\n  var r = \"\";\n  if (!latin1 && typeof TextDecoder != \"undefined\")\n    return new TextDecoder().decode(dat);\n  for (var i = 0; i < dat.length; ) {\n    var c = dat[i++];\n    if (c < 128 || latin1)\n      r += String.fromCharCode(c);\n    else if (c < 224)\n      r += String.fromCharCode((c & 31) << 6 | dat[i++] & 63);\n    else if (c < 240)\n      r += String.fromCharCode((c & 15) << 12 | (dat[i++] & 63) << 6 | dat[i++] & 63);\n    else\n      c = ((c & 15) << 18 | (dat[i++] & 63) << 12 | (dat[i++] & 63) << 6 | dat[i++] & 63) - 65536, r += String.fromCharCode(55296 | c >> 10, 56320 | c & 1023);\n  }\n  return r;\n}\nconst MARK = \"v1\";\nexport {\n  MARK as M,\n  strToU8 as a,\n  strFromU8 as s,\n  unzlibSync as u,\n  zlibSync as z\n};\n//# sourceMappingURL=base-Dgki_PiJ.js.map\n","import { M as MARK, s as strFromU8, z as zlibSync, a as strToU8 } from \"./base-Dgki_PiJ.js\";\nconst pack = (event) => {\n  const _e = {\n    ...event,\n    v: MARK\n  };\n  return strFromU8(zlibSync(strToU8(JSON.stringify(_e))), true);\n};\nexport {\n  pack\n};\n//# sourceMappingURL=pack.js.map\n","import { isMobile } from './GleapHelper';\nimport { record } from '@rrweb/record';\nimport { pack } from '@rrweb/packer';\n\n// rrweb EventType.Meta. On every checkout (see checkoutEveryNms) rrweb emits a\n// Meta immediately followed by a FullSnapshot, both flagged isCheckout. The\n// Meta therefore reliably marks the start of a fresh, self-contained checkpoint.\nconst RRWEB_META_EVENT_TYPE = 4;\n\n// Take a fresh full snapshot every few minutes. This lets us trim the buffer to\n// whole checkpoints instead of letting it grow unbounded for the lifetime of a\n// long-lived single-page-app session.\nconst CHECKOUT_EVERY_MS = 5 * 60 * 1000;\n\n// Retain at most this many checkpoints (~10-15 min of history). Every retained\n// checkpoint begins with a Meta + FullSnapshot, so the replay is always\n// self-contained and never starts mid-mutation.\nconst MAX_CHECKPOINTS = 3;\n\nexport default class GleapReplayRecorder {\n  startDate = undefined;\n  // Events grouped into checkpoint segments so out-of-window checkpoints can be\n  // dropped without ever cutting off the full snapshot a replay needs to start.\n  segments = [[]];\n  stopFunction = undefined;\n  customOptions = {};\n\n  // GleapReplayRecorder singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapReplayRecorder();\n      return this.instance;\n    } else {\n      return this.instance;\n    }\n  }\n\n  constructor() {}\n\n  setOptions(options) {\n    this.customOptions = options;\n\n    // Re-apply immediately if we're already recording, so options set after the\n    // recorder has started still take effect (otherwise they would only apply on\n    // the next start). Restarting resets the rolling buffer.\n    if (this.stopFunction) {\n      this.start();\n    }\n  }\n\n  /**\n   * Start replays\n   * @returns\n   */\n  start() {\n    this.stop();\n\n    this.startDate = Date.now();\n    this.segments = [[]];\n\n    var options = {\n      inlineStylesheet: true,\n      // Privacy: by default only password inputs are masked (rrweb's default), so\n      // replays keep form values that are useful when debugging. Sites that want\n      // every input masked can opt in via Gleap.setReplayOptions({ maskAllInputs: true }).\n      // Per-element control uses rrweb's default class names: rr-block (replaced\n      // with a same-size placeholder), rr-ignore (skipped) and rr-mask (text masked).\n      // Strip non-visual DOM (scripts, comments, head meta) to shrink the payload.\n      slimDOMOptions: {\n        script: true,\n        comment: true,\n        headFavicon: true,\n        headWhitespace: true,\n        headMetaDescKeywords: true,\n        headMetaSocial: true,\n        headMetaRobots: true,\n        headMetaHttpEquiv: true,\n        headMetaVerification: true,\n      },\n      dataURLOptions: {\n        quality: 0.7,\n      },\n      recordCanvas: false,\n      // Roll a new full snapshot periodically so long sessions stay bounded.\n      checkoutEveryNms: CHECKOUT_EVERY_MS,\n      sampling: {\n        scroll: 150,\n        mouseInteraction: {\n          MouseUp: false,\n          MouseDown: false,\n          Click: true,\n          ContextMenu: true,\n          DblClick: true,\n          Focus: true,\n          Blur: true,\n          TouchStart: true,\n          TouchEnd: false,\n        },\n      },\n      collectFonts: false,\n      recordCrossOriginIframes: false,\n    };\n\n    try {\n      this.stopFunction = record({\n        ...options,\n        ...this.customOptions,\n        emit: (event, isCheckout) => {\n          // A checkout Meta starts a new self-contained checkpoint. Open a fresh\n          // segment and drop the oldest checkpoints beyond the retention cap.\n          if (isCheckout && event && event.type === RRWEB_META_EVENT_TYPE) {\n            this.segments.push([]);\n            while (this.segments.length > MAX_CHECKPOINTS) {\n              this.segments.shift();\n            }\n          }\n\n          this.segments[this.segments.length - 1].push(event);\n        },\n      });\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  /**\n   * Starts recording only if it isn't already running.\n   *\n   * The recorder is started eagerly at SDK init and then again once the config\n   * confirms web replays are enabled. Without this guard that second call (and\n   * the cached-vs-server config double apply) would call start(), which tears\n   * down and rebuilds the rolling buffer, throwing away everything captured so\n   * far.\n   */\n  startIfNotRunning() {\n    if (this.stopFunction) {\n      return;\n    }\n\n    this.start();\n  }\n\n  /**\n   * Stop replays\n   * @returns\n   */\n  stop() {\n    if (this.stopFunction) {\n      this.stopFunction();\n      this.stopFunction = undefined;\n    }\n\n    this.startDate = undefined;\n    this.segments = [[]];\n  }\n\n  /**\n   * Get the current replay data\n   * @returns {Promise<void>}\n   */\n  getReplayData() {\n    // Flatten the checkpoint segments back into one ordered event stream.\n    const events = [].concat(...this.segments);\n\n    // Compress each event with @rrweb/packer to shrink the uploaded and stored\n    // payload; the player decompresses via unpackFn. If packing ever throws we\n    // fall back to raw events so a replay is never lost.\n    let outputEvents = events;\n    let packed = false;\n    try {\n      outputEvents = events.map((event) => pack(event));\n      packed = true;\n    } catch (e) {\n      outputEvents = events;\n      packed = false;\n    }\n\n    const replayResult = {\n      startDate: this.startDate,\n      events: outputEvents,\n      packed,\n      baseUrl: window.location.origin,\n      width: window.innerWidth,\n      height: window.innerHeight,\n      isMobile: isMobile(),\n      type: 'rrweb',\n    };\n\n    return replayResult;\n  }\n}\n","export class ScreenDrawer {\n  rerender;\n  svgElement = null;\n  path = null;\n  strPath;\n  strokeWidth = 12;\n  strokeWidthRect = 6;\n  bufferSize = 4;\n  buffer = [];\n  startPoint = null;\n  tool = 'rect';\n  color = '#EB144C';\n  mouseDown = null;\n  mouseMove = null;\n  mouseUp = null;\n  resizeListener = null;\n  pathBuffer = [];\n\n  constructor(rerender) {\n    const self = this;\n\n    this.rerender = rerender;\n\n    this.svgElement = document.querySelector('.bb-capture-svg');\n    this.svgElement.style.minHeight = `${document.documentElement.scrollHeight}px`;\n\n    // Window resize listener.\n    this.resizeListener = function (e) {\n      self.svgElement.style.minHeight = `${document.documentElement.scrollHeight}px`;\n    };\n    window.addEventListener('resize', this.resizeListener, true);\n\n    this.mouseDown = function (e) {\n      e.preventDefault();\n\n      const colorpicker = document.querySelector('.bb-capture-toolbar-item-colorpicker');\n      if (colorpicker) {\n        colorpicker.style.display = 'none';\n      }\n\n      self.fadeOutToolbar();\n      if (self.tool === 'pen' || self.tool === 'blur') {\n        self.mouseDownPen(e);\n      }\n      if (self.tool === 'rect') {\n        self.mouseDownRect(e);\n      }\n    };\n\n    this.mouseMove = function (e) {\n      e.preventDefault();\n      if (self.tool === 'pen' || self.tool === 'blur') {\n        self.mouseMovePen(e);\n      }\n      if (self.tool === 'rect') {\n        self.mouseMoveRect(e);\n      }\n    };\n\n    this.mouseUp = function (e) {\n      e.preventDefault();\n      self.fadeInToolbar();\n      if (self.tool === 'pen' || self.tool === 'blur') {\n        self.mouseUpPen(e);\n      }\n      if (self.tool === 'rect') {\n        self.mouseUpRect(e);\n      }\n    };\n\n    this.svgElement.addEventListener('mousedown', this.mouseDown);\n    this.svgElement.addEventListener('mousemove', this.mouseMove);\n    this.svgElement.addEventListener('mouseup', this.mouseUp);\n    this.svgElement.addEventListener('touchstart', this.mouseDown, false);\n    this.svgElement.addEventListener('touchmove', this.mouseMove, false);\n    this.svgElement.addEventListener('touchend', this.mouseUp, false);\n\n    setTimeout(() => {\n      this.rerender();\n    }, 100);\n  }\n\n  clear() {\n    if (this.svgElement) {\n      while (this.svgElement.firstChild) {\n        this.svgElement.firstChild.remove();\n      }\n    }\n  }\n\n  destroy() {\n    this.svgElement.removeEventListener('mousedown', this.mouseDown);\n    this.svgElement.removeEventListener('mousemove', this.mouseMove);\n    this.svgElement.removeEventListener('mouseup', this.mouseUp);\n    this.svgElement.removeEventListener('touchstart', this.mouseDown);\n    this.svgElement.removeEventListener('touchmove', this.mouseMove);\n    this.svgElement.removeEventListener('touchend', this.mouseUp);\n    window.removeEventListener('resize', this.resizeListener);\n  }\n\n  mouseUpPen() {\n    if (this.path) {\n      this.path = null;\n    }\n  }\n\n  mouseUpRect() {\n    if (this.path) {\n      this.path = null;\n    }\n  }\n\n  mouseMovePen(e) {\n    if (this.path) {\n      this.appendToBuffer(this.getMousePosition(e));\n      this.updateSvgPath();\n    }\n  }\n\n  mouseMoveRect(e) {\n    if (this.path) {\n      var p = this.getMousePosition(e);\n      var w = Math.abs(p.x - this.startPoint.x);\n      var h = Math.abs(p.y - this.startPoint.y);\n      var x = p.x;\n      var y = p.y;\n      if (p.x > this.startPoint.x) {\n        x = this.startPoint.x;\n      }\n      if (p.y > this.startPoint.y) {\n        y = this.startPoint.y;\n      }\n\n      this.path.setAttributeNS(null, 'x', x);\n      this.path.setAttributeNS(null, 'y', y);\n      this.path.setAttributeNS(null, 'width', w);\n      this.path.setAttributeNS(null, 'height', h);\n    }\n  }\n\n  mouseDownRect(e) {\n    this.path = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n    this.path.setAttribute('fill', 'none');\n    this.path.setAttribute('stroke', this.color);\n    this.path.setAttribute('stroke-linecap', 'round');\n    this.path.setAttribute('stroke-width', this.strokeWidthRect);\n\n    this.startPoint = this.getMousePosition(e);\n    this.appendPathToSvg(this.path);\n  }\n\n  mouseDownPen(e) {\n    var color = this.color + 'AA';\n    var strokeWidth = this.strokeWidth;\n\n    if (this.tool === 'blur') {\n      color = '#000000';\n      strokeWidth = 40;\n    }\n\n    this.path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n    this.path.setAttribute('fill', 'none');\n    this.path.setAttribute('stroke', color);\n    this.path.setAttribute('stroke-linecap', 'round');\n    this.path.setAttribute('stroke-width', strokeWidth);\n    this.buffer = [];\n    var pt = this.getMousePosition(e);\n    this.appendToBuffer(pt);\n    this.strPath = 'M' + pt.x + ' ' + pt.y;\n    this.path.setAttribute('d', this.strPath);\n    this.appendPathToSvg(this.path);\n  }\n\n  setTool(tool) {\n    this.tool = tool;\n  }\n\n  setColor(color) {\n    this.color = color;\n  }\n\n  getMousePosition(e) {\n    if (e.touches && e.touches.length > 0) {\n      return {\n        x: e.touches[0].clientX,\n        y: e.touches[0].clientY,\n      };\n    }\n\n    return {\n      x: e.clientX,\n      y: e.clientY,\n    };\n  }\n\n  // Calculate the average point, starting at offset in the buffer\n  getAveragePoint(offset) {\n    var len = this.buffer.length;\n    if (len % 2 === 1 || len >= this.bufferSize) {\n      var totalX = 0;\n      var totalY = 0;\n      var pt, i;\n      var count = 0;\n      for (i = offset; i < len; i++) {\n        count++;\n        pt = this.buffer[i];\n        totalX += pt.x;\n        totalY += pt.y;\n      }\n      return {\n        x: totalX / count,\n        y: totalY / count,\n      };\n    }\n    return null;\n  }\n\n  updateSvgPath() {\n    var pt = this.getAveragePoint(0);\n\n    if (pt) {\n      // Get the smoothed part of the path that will not change\n      this.strPath += ' L' + pt.x + ' ' + pt.y;\n\n      // Get the last part of the path (close to the current mouse position)\n      // This part will change if the mouse moves again\n      var tmpPath = '';\n      for (var offset = 2; offset < this.buffer.length; offset += 2) {\n        pt = this.getAveragePoint(offset);\n        tmpPath += ' L' + pt.x + ' ' + pt.y;\n      }\n\n      // Set the complete current path coordinates\n      this.path.setAttribute('d', this.strPath + tmpPath);\n    }\n  }\n\n  appendToBuffer(pt) {\n    this.buffer.push(pt);\n    while (this.buffer.length > this.bufferSize) {\n      this.buffer.shift();\n    }\n  }\n\n  appendPathToSvg(path) {\n    this.svgElement.appendChild(path);\n    this.pathBuffer.push(path);\n    this.rerender();\n  }\n\n  removeLastAddedPathFromSvg() {\n    if (this.pathBuffer.length <= 0 || !this.svgElement) {\n      return;\n    }\n\n    this.svgElement.removeChild(this.pathBuffer[this.pathBuffer.length - 1]);\n\n    this.pathBuffer.pop();\n\n    this.rerender();\n  }\n\n  fadeOutToolbar() {\n    var fadeTarget = document.querySelector('.bb-capture-toolbar');\n    if (fadeTarget) {\n      fadeTarget.style.opacity = 0;\n      fadeTarget.style.pointerEvents = 'none';\n    }\n  }\n\n  fadeInToolbar() {\n    var fadeTarget = document.querySelector('.bb-capture-toolbar');\n    if (fadeTarget) {\n      fadeTarget.style.opacity = 1;\n      fadeTarget.style.pointerEvents = 'auto';\n    }\n  }\n}\n","export class GleapScrollStopper {\n  keys = { 37: 1, 38: 1, 39: 1, 40: 1 };\n  supportsPassive = false;\n  wheelOpt = this.supportsPassive ? { passive: false } : false;\n  wheelEvent = 'onwheel' in document.createElement('div') ? 'wheel' : 'mousewheel';\n  scrollDisabled = false;\n\n  // GleapScrollStopper singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapScrollStopper();\n      return this.instance;\n    } else {\n      return this.instance;\n    }\n  }\n\n  constructor() {\n    const self = this;\n    try {\n      window.addEventListener(\n        'test',\n        null,\n        Object.defineProperty({}, 'passive', {\n          get: function () {\n            self.supportsPassive = true;\n            self.wheelOpt = self.supportsPassive ? { passive: false } : false;\n          },\n        })\n      );\n    } catch (e) {}\n  }\n\n  preventDefault(e) {\n    e.preventDefault();\n  }\n\n  preventDefaultForScrollKeys(e) {\n    if (this.keys && this.keys[e.keyCode]) {\n      this.preventDefault(e);\n      return false;\n    }\n  }\n\n  static disableScroll() {\n    const instance = this.getInstance();\n    if (instance.scrollDisabled) {\n      return;\n    }\n\n    instance.scrollDisabled = true;\n\n    window.addEventListener('DOMMouseScroll', instance.preventDefault, false); // older FF\n    window.addEventListener(instance.wheelEvent, instance.preventDefault, instance.wheelOpt); // modern desktop\n    window.addEventListener('touchmove', instance.preventDefault, instance.wheelOpt); // mobile\n    window.addEventListener('keydown', instance.preventDefaultForScrollKeys, false);\n  }\n\n  static enableScroll() {\n    const instance = this.getInstance();\n    if (!instance.scrollDisabled) {\n      return;\n    }\n\n    instance.scrollDisabled = false;\n    window.removeEventListener('DOMMouseScroll', instance.preventDefault, false);\n    window.removeEventListener(instance.wheelEvent, instance.preventDefault, instance.wheelOpt);\n    window.removeEventListener('touchmove', instance.preventDefault, instance.wheelOpt);\n    window.removeEventListener('keydown', instance.preventDefaultForScrollKeys, false);\n  }\n}\n","import Gleap, { GleapTranslationManager, GleapFrameManager } from './Gleap';\nimport { ScreenDrawer } from './ScreenDrawer';\nimport { GleapScrollStopper } from './GleapScrollStopper';\nimport { GleapScreenRecorder } from './GleapScreenRecorder';\nimport { loadIcon } from './UI';\n\nexport default class GleapMarkerManager {\n  type = 'screenshot';\n  dragCursor = null;\n  screenRecorder = null;\n  callback = null;\n  screenDrawer = null;\n  escListener = null;\n  pageLeaveListener = null;\n  overrideLanguage = Gleap.getInstance().overrideLanguage;\n\n  constructor(type) {\n    this.type = type;\n  }\n\n  hideWidgetUI() {\n    const feedbackButton = document.querySelector('.bb-feedback-button');\n    if (feedbackButton) {\n      feedbackButton.style.display = 'none';\n    }\n\n    const dialogUI = document.querySelector('.bb-feedback-dialog-container');\n    if (dialogUI) {\n      dialogUI.style.display = 'none';\n    }\n  }\n\n  showWidgetUI() {\n    if (this.type === 'screenshot') {\n      GleapScrollStopper.enableScroll();\n    }\n\n    // Stop screenrecording.\n    if (this.screenRecorder) {\n      this.screenRecorder.stopScreenRecording();\n    }\n\n    // Unregister ESC listener\n    this.unregisterListeners();\n\n    // Cleanup mouse pointer\n    this.cleanupMousePointer();\n\n    if (this.screenDrawer) {\n      this.screenDrawer.destroy();\n    }\n\n    // Remove the toolbar UI\n    const dialog = document.querySelector('.bb-capture-toolbar');\n    if (dialog) {\n      dialog.remove();\n    }\n\n    // Capture SVG ref\n    const captureSVG = document.querySelector('.bb-capture-svg');\n    if (captureSVG) {\n      captureSVG.classList.add('bb-capture-svg--preview');\n    }\n\n    // Remove the preview UI\n    const videoPreviewContainer = document.querySelector('.bb-capture-preview');\n    if (videoPreviewContainer) {\n      videoPreviewContainer.remove();\n    }\n\n    // Feedback button\n    const feedbackButton = document.querySelector('.bb-feedback-button');\n    if (feedbackButton) {\n      feedbackButton.style.display = 'flex';\n    }\n\n    // Feedback dialog container\n    const dialogUI = document.querySelector('.bb-feedback-dialog-container');\n    if (dialogUI) {\n      dialogUI.style.display = 'block';\n    }\n\n    // Dismiss button\n    const dismissUI = document.querySelector('.bb-capture-dismiss');\n    if (dismissUI) {\n      dismissUI.style.display = 'none';\n    }\n\n    // Hide the color picker\n    const colorPicker = document.querySelector('.bb-capture-toolbar-item-colorpicker');\n    if (colorPicker) {\n      colorPicker.style.display = 'none';\n    }\n\n    // Border layer\n    const borderLayer = document.querySelector('.bb-capture-editor-borderlayer');\n    if (borderLayer) {\n      borderLayer.style.display = 'none';\n    }\n  }\n\n  clear() {\n    const captureEditor = document.querySelector('.bb-capture-editor');\n    if (captureEditor) {\n      captureEditor.remove();\n    }\n  }\n\n  setMouseMove(x, y) {\n    if (!this.dragCursor) {\n      return;\n    }\n\n    this.dragCursor.style.left = `${x + 6}px`;\n    this.dragCursor.style.top = `${y - 26}px`;\n    this.dragCursor.style.right = null;\n  }\n\n  mouseMoveEventHandler(e) {\n    const x = e.clientX;\n    const y = e.clientY;\n    this.setMouseMove(x, y);\n  }\n\n  touchMoveEventHandler(e) {\n    const x = e.touches[0].clientX;\n    const y = e.touches[0].clientY;\n    this.setMouseMove(x, y);\n  }\n\n  setupMousePointer() {\n    const self = this;\n    this.dragCursor = document.querySelector('.bb-capture-editor-drag-info');\n    const captureSVG = document.querySelector('.bb-capture-svg');\n    captureSVG.addEventListener('mouseenter', (e) => {\n      self.dragCursor.style.opacity = 1;\n    });\n\n    captureSVG.addEventListener('mouseleave', (e) => {\n      self.dragCursor.style.opacity = 0;\n    });\n\n    document.documentElement.addEventListener('mousemove', this.mouseMoveEventHandler.bind(this));\n    document.documentElement.addEventListener('touchmove', this.touchMoveEventHandler.bind(this));\n  }\n\n  cleanupMousePointer() {\n    document.documentElement.removeEventListener('mousemove', this.mouseMoveEventHandler);\n    document.documentElement.removeEventListener('touchmove', this.touchMoveEventHandler);\n\n    // Clean up toolbar drag listeners\n    const dragHandle = document.querySelector(\".bb-capture-toolbar-item[data-type='drag']\");\n    if (dragHandle) {\n      dragHandle.removeEventListener('mousedown', this.dragStart);\n      dragHandle.removeEventListener('touchstart', this.dragStart);\n      document.removeEventListener('mousemove', this.drag);\n      document.removeEventListener('touchmove', this.drag);\n      document.removeEventListener('mouseup', this.dragEnd);\n      document.removeEventListener('touchend', this.dragEnd);\n    }\n\n    if (this.dragCursor) {\n      this.dragCursor.remove();\n    }\n  }\n\n  createEditorUI() {\n    // Add HTML for drawing and recording\n    var bugReportingEditor = document.createElement('div');\n    bugReportingEditor.className = 'bb-capture-editor';\n    bugReportingEditor.innerHTML = `\n          <div class=\"bb-capture-editor-borderlayer\"></div>\n          <svg class=\"bb-capture-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" xml:space=\"preserve\"></svg>\n          <div class=\"bb-capture-dismiss\">${loadIcon('dismiss')}</div>\n          <div class='bb-capture-editor-drag-info'>${loadIcon('rect')}</div>\n          <div class=\"bb-capture-toolbar\">\n            <div class=\"bb-capture-toolbar-item bb-capture-item-rec bb-capture-toolbar-item-tool drag-handle-item\" data-type=\"drag\">\n              ${loadIcon('drag')}\n            </div>\n            ${\n              this.type === 'capture'\n                ? `<div class=\"bb-capture-toolbar-item bb-capture-item-rec bb-capture-toolbar-item-recording\" data-type=\"recording\">\n                  ${loadIcon('recorderon')}\n                  ${loadIcon('recorderoff')}\n                  <span class=\"bb-tooltip bb-tooltip-screen-recording\"></span>\n                </div>\n                <div class=\"bb-capture-toolbar-item bb-capture-item-rec\" data-type=\"mic\">\n                  ${loadIcon('mic')}\n                  <span class=\"bb-tooltip bb-tooltip-audio-recording\"></span>\n                </div>\n                <div class=\"bb-capture-toolbar-item-timer bb-capture-item-rec\">2:00</div>\n                <div class=\"bb-capture-toolbar-item-spacer\"></div>\n                <div class=\"bb-capture-toolbar-item bb-capture-toolbar-drawingitem bb-capture-toolbar-item-tool\" data-type=\"pointer\">\n                  ${loadIcon('pointer')}\n                </div>`\n                : ''\n            }\n            <div class=\"bb-capture-toolbar-item bb-capture-toolbar-drawingitem bb-capture-toolbar-item-tool bb-capture-toolbar-item--active\" data-type=\"rect\">\n              ${loadIcon('rect')}\n            </div>\n            <div class=\"bb-capture-toolbar-item bb-capture-toolbar-drawingitem bb-capture-toolbar-item-tool\" data-type=\"pen\">\n              ${loadIcon('pen')}\n            </div>\n            <div class=\"bb-capture-toolbar-item bb-capture-toolbar-drawingitem bb-capture-toolbar-item-tool\" data-type=\"blur\">\n              ${loadIcon('blur')}\n            </div>\n            <div class=\"bb-capture-toolbar-item bb-capture-toolbar-drawingitem\" data-type=\"colorpicker\">\n              <div class=\"bb-capture-toolbar-item-selectedcolor\"></div>\n              <span class=\"bb-tooltip\">${GleapTranslationManager.translateText(`pickAColor`)}</span>\n            </div>\n            <div class=\"bb-capture-toolbar-item bb-capture-toolbar-drawingitem bb-capture-toolbar-item-tool\" data-type=\"undo\">\n              ${loadIcon('undo')}\n              <span class=\"bb-tooltip\">${GleapTranslationManager.translateText(`undo`)}</span>\n            </div>\n            ${\n              this.type !== 'capture'\n                ? `<div class=\"bb-capture-button-next\">${GleapTranslationManager.translateText(`next`)}</div>`\n                : ''\n            }\n          </div>\n          <div class=\"bb-capture-toolbar-item-colorpicker\">\n            <div class=\"bb-capture-toolbar-item-color\" data-color=\"#EB144C\"></div>\n            <div class=\"bb-capture-toolbar-item-color\" data-color=\"#FF6705\"></div>\n            <div class=\"bb-capture-toolbar-item-color\" data-color=\"#FDB903\"></div>\n            <div class=\"bb-capture-toolbar-item-color\" data-color=\"#9900EE\"></div>\n            <div class=\"bb-capture-toolbar-item-color\" data-color=\"#00D082\"></div>\n            <div class=\"bb-capture-toolbar-item-color\" data-color=\"#0A93E4\"></div>\n            <div class=\"bb-capture-toolbar-item-color\" data-color=\"#CCCCCC\"></div>\n          </div>\n          <div class=\"bb-capture-preview\">\n            <div class=\"bb-capture-preview-inner\">\n              <video controls muted autoplay></video>\n              <div class=\"bb-capture-preview-buttons\">\n                <div class=\"bb-capture-preview-retrybutton\">${GleapTranslationManager.translateText(`retry`)}</div>\n                <div class=\"bb-capture-preview-sendbutton\">${GleapTranslationManager.translateText(`next`)}</div>\n              </div>\n            </div>\n          </div>\n        `;\n    document.body.appendChild(bugReportingEditor);\n\n    // Set RTL layout\n    bugReportingEditor.setAttribute('dir', GleapTranslationManager.getInstance().isRTLLayout ? 'rtl' : 'ltr');\n  }\n\n  showNextStep = function () {\n    // Adapt the UI\n    this.showWidgetUI();\n\n    if (this.callback) {\n      GleapFrameManager.getInstance().sendMessage({\n        name: 'set-form-data',\n        data: {\n          formKey: 'capture',\n          data: {\n            value: this.type,\n            dirty: true,\n          },\n        },\n      });\n      this.callback(true);\n    }\n  };\n\n  unregisterListeners() {\n    if (this.escListener) {\n      document.removeEventListener('keydown', this.escListener);\n    }\n\n    if (this.pageLeaveListener) {\n      window.removeEventListener('beforeunload', this.pageLeaveListener);\n    }\n  }\n\n  registerListeners() {\n    const self = this;\n\n    // Esc listener\n    this.escListener = function (evt) {\n      evt = evt || window.event;\n      var isEscape = false;\n      var isEnter = false;\n      if ('key' in evt) {\n        isEscape = evt.key === 'Escape';\n        isEnter = evt.key === 'Enter';\n      }\n      if (isEscape) {\n        self.dismiss();\n      }\n      if (self.type === 'screenshot' && isEnter) {\n        self.showNextStep();\n      }\n    };\n    document.addEventListener('keydown', this.escListener);\n\n    // Page leave listener\n    this.pageLeaveListener = function (event) {\n      event.preventDefault();\n      event.returnValue = '';\n    };\n    window.addEventListener('beforeunload', this.pageLeaveListener);\n  }\n\n  show(callback) {\n    this.callback = callback;\n    const self = this;\n\n    // Register for listeners\n    this.registerListeners();\n\n    // Hide widget UI\n    this.hideWidgetUI();\n\n    // Create the editor UI\n    this.createEditorUI();\n\n    // Setup the mouse pointer\n    this.setupMousePointer();\n\n    // Setup screenshot data\n    if (this.type === 'screenshot') {\n      // Overwrite snapshot position\n      Gleap.getInstance().setGlobalDataItem('snapshotPosition', {\n        x: window.scrollX,\n        y: window.scrollY,\n      });\n\n      // Disable scroll\n      GleapScrollStopper.disableScroll();\n    } else {\n      // Setup screen recording\n      this.setupScreenRecording();\n    }\n\n    // Hook up the drawing.\n    this.screenDrawer = new ScreenDrawer(this.captureScreenDrawerRerender.bind(this));\n\n    this.setupColorPicker();\n    this.setupToolbar();\n  }\n\n  setupColorPicker() {\n    const self = this;\n    const selectedColor = document.querySelector('.bb-capture-toolbar-item-selectedcolor');\n    const colorItems = document.querySelectorAll('.bb-capture-toolbar-item-color');\n    const colorpicker = document.querySelector('.bb-capture-toolbar-item-colorpicker');\n\n    for (var i = 0; i < colorItems.length; i++) {\n      const colorItem = colorItems[i];\n      const hexColor = colorItem.getAttribute('data-color');\n      colorItem.style.backgroundColor = hexColor;\n      colorItem.onclick = function () {\n        if (colorItem) {\n          self.screenDrawer.setColor(hexColor);\n          if (colorpicker) {\n            colorpicker.style.display = 'none';\n          }\n          selectedColor.style.backgroundColor = colorItem.style.backgroundColor;\n          GleapMarkerManager.setPenColor(hexColor);\n        }\n      };\n    }\n  }\n\n  static setPenColor(hexColor) {\n    const penTips = document.querySelectorAll('.bb-pen-tip');\n    for (var j = 0; j < penTips.length; j++) {\n      penTips[j].style.fill = hexColor;\n    }\n  }\n\n  dismiss() {\n    this.showWidgetUI();\n\n    if (this.callback) {\n      this.callback(false);\n    }\n  }\n\n  setupToolbar() {\n    const self = this;\n    const toolbar = document.querySelector('.bb-capture-toolbar');\n    let isDragging = false;\n    let currentX;\n    let currentY;\n    let initialX;\n    let initialY;\n    let xOffset = 0;\n    let yOffset = 0;\n\n    const getTransformValues = () => {\n      const transform = window.getComputedStyle(toolbar).transform;\n      if (transform === 'none') return { x: 0, y: 0 };\n      const matrix = new DOMMatrix(transform);\n      return { x: matrix.m41, y: matrix.m42 };\n    };\n\n    this.dragStart = (e) => {\n      const { x, y } = getTransformValues();\n      xOffset = x;\n      yOffset = y;\n\n      if (e.type === 'mousedown') {\n        initialX = e.clientX - xOffset;\n        initialY = e.clientY - yOffset;\n      } else {\n        initialX = e.touches[0].clientX - xOffset;\n        initialY = e.touches[0].clientY - yOffset;\n      }\n      isDragging = true;\n    };\n\n    this.dragEnd = () => {\n      isDragging = false;\n    };\n\n    this.drag = (e) => {\n      if (isDragging) {\n        e.preventDefault();\n        if (e.type === 'mousemove') {\n          currentX = e.clientX - initialX;\n          currentY = e.clientY - initialY;\n        } else {\n          currentX = e.touches[0].clientX - initialX;\n          currentY = e.touches[0].clientY - initialY;\n        }\n\n        xOffset = currentX;\n        yOffset = currentY;\n\n        toolbar.style.transform = `translate(${currentX}px, ${currentY}px)`;\n      }\n    };\n\n    const dragHandle = document.querySelector(\".bb-capture-toolbar-item[data-type='drag']\");\n\n    dragHandle.addEventListener('mousedown', this.dragStart);\n    dragHandle.addEventListener('touchstart', this.dragStart);\n    document.addEventListener('mousemove', this.drag);\n    document.addEventListener('touchmove', this.drag);\n    document.addEventListener('mouseup', this.dragEnd);\n    document.addEventListener('touchend', this.dragEnd);\n\n    // Hook up dismiss button\n    const dismissButton = document.querySelector('.bb-capture-dismiss');\n    dismissButton.onclick = function () {\n      self.dismiss();\n    };\n\n    // Hook up send button\n    const nextButton = document.querySelector('.bb-capture-button-next');\n    if (nextButton) {\n      nextButton.onclick = this.showNextStep.bind(this);\n    }\n\n    const colorpicker = document.querySelector('.bb-capture-toolbar-item-colorpicker');\n\n    // Capture SVG ref\n    const captureSVG = document.querySelector('.bb-capture-svg');\n\n    const chooseTool = function (type, toolbarItem) {\n      const toolbarTools = document.querySelectorAll('.bb-capture-toolbar-item-tool');\n      for (let j = 0; j < toolbarTools.length; j++) {\n        toolbarTools[j].classList.remove('bb-capture-toolbar-item--active');\n      }\n      toolbarItem.classList.add('bb-capture-toolbar-item--active');\n      self.screenDrawer.setTool(type);\n      self.dragCursor.innerHTML = '';\n      if (type === 'pointer') {\n        captureSVG.style.pointerEvents = 'none';\n      } else {\n        captureSVG.style.pointerEvents = 'auto';\n        try {\n          var svgClone = toolbarItem.querySelector('svg').cloneNode(true);\n          if (svgClone && self.dragCursor) {\n            self.dragCursor.appendChild(svgClone);\n          }\n        } catch (exp) {}\n      }\n    };\n\n    // Setup toolbar items\n    var toolbarItems = document.querySelectorAll('.bb-capture-toolbar-item');\n    for (var i = 0; i < toolbarItems.length; i++) {\n      const toolbarItem = toolbarItems[i];\n      toolbarItem.onclick = function () {\n        const type = toolbarItem.getAttribute('data-type');\n        if (colorpicker && type !== 'colorpicker') {\n          colorpicker.style.display = 'none';\n        }\n\n        // Mic & recording buttons\n        if (type === 'mic') {\n          self.screenRecorder.toggleAudio();\n        }\n        if (type === 'recording') {\n          if (self.screenRecorder.isRecording) {\n            self.screenRecorder.stopScreenRecording();\n          } else {\n            self.screenRecorder.startScreenRecording();\n            chooseTool('pointer', document.querySelector(\".bb-capture-toolbar-item[data-type='pointer']\"));\n          }\n        }\n\n        // Marker buttons\n        if (self.type === 'capture' && !self.screenRecorder.isRecording) {\n          // Inactivate buttons.\n          return;\n        }\n        if (type === 'pen' || type === 'blur' || type === 'rect' || type === 'pointer') {\n          chooseTool(type, toolbarItem);\n        }\n        if (type === 'colorpicker') {\n          if (colorpicker.style.display === 'flex') {\n            colorpicker.style.display = 'none';\n          } else {\n            colorpicker.style.display = 'flex';\n          }\n        }\n        if (type === 'undo') {\n          self.screenDrawer.removeLastAddedPathFromSvg();\n        }\n      };\n    }\n  }\n\n  captureScreenDrawerRerender() {\n    if (!this.screenDrawer) {\n      return;\n    }\n\n    const itemInactiveClass = 'bb-capture-editor-item-inactive';\n    const toolbarItems = document.querySelectorAll('.bb-capture-toolbar-item');\n    for (var i = 0; i < toolbarItems.length; i++) {\n      const toolbarItem = toolbarItems[i];\n      const type = toolbarItem.getAttribute('data-type');\n      switch (type) {\n        case 'undo':\n          if (this.screenDrawer.pathBuffer != null && this.screenDrawer.pathBuffer.length > 0) {\n            toolbarItem.classList.remove(itemInactiveClass);\n          } else {\n            toolbarItem.classList.add(itemInactiveClass);\n          }\n          break;\n        default:\n          break;\n      }\n    }\n  }\n\n  captureRenderer() {\n    if (!this.screenRecorder) {\n      return;\n    }\n\n    if (this.screenRecorder.file) {\n      Gleap.getInstance().setGlobalDataItem('screenRecordingData', this.screenRecorder.file);\n    }\n\n    const itemInactiveClass = 'bb-capture-editor-item-inactive';\n    const timerLabel = document.querySelector('.bb-capture-toolbar-item-timer');\n    const toolbarItems = document.querySelectorAll('.bb-capture-toolbar-item');\n    const screenRecordingTooltip = document.querySelector('.bb-tooltip-screen-recording');\n    const audioRecordingTooltip = document.querySelector('.bb-tooltip-audio-recording');\n    const captureEditor = document.querySelector('.bb-capture-editor');\n    const recordingClass = 'bb-capture-editor-recording';\n    const notRecordingClass = 'bb-capture-editor-notrecording';\n    if (this.screenRecorder.isRecording) {\n      captureEditor.classList.add(recordingClass);\n      captureEditor.classList.remove(notRecordingClass);\n    } else {\n      captureEditor.classList.add(notRecordingClass);\n      captureEditor.classList.remove(recordingClass);\n    }\n\n    // Update UI.\n    const dialog = document.querySelector('.bb-capture-toolbar');\n    const videoPreviewContainer = document.querySelector('.bb-capture-preview');\n    videoPreviewContainer.style.display = this.screenRecorder.file ? 'flex' : 'none';\n    dialog.style.display = !this.screenRecorder.file ? 'flex' : 'none';\n\n    for (var i = 0; i < toolbarItems.length; i++) {\n      const toolbarItem = toolbarItems[i];\n      const type = toolbarItem.getAttribute('data-type');\n      switch (type) {\n        case 'mic':\n          if (this.screenRecorder.audioAvailable && this.screenRecorder.available) {\n            toolbarItem.classList.remove(itemInactiveClass);\n            if (!this.screenRecorder.audioMuted) {\n              toolbarItem.classList.remove('bb-capture-toolbar-item--inactivecross');\n              audioRecordingTooltip.innerHTML = GleapTranslationManager.translateText('mute');\n            } else {\n              toolbarItem.classList.add('bb-capture-toolbar-item--inactivecross');\n              audioRecordingTooltip.innerHTML = GleapTranslationManager.translateText('unmute');\n            }\n          } else {\n            toolbarItem.classList.add(itemInactiveClass);\n            toolbarItem.classList.add('bb-capture-toolbar-item--inactivecross');\n            audioRecordingTooltip.innerHTML = GleapTranslationManager.translateText('browserNotSupported');\n          }\n          break;\n\n        case 'recording':\n          if (this.screenRecorder.available) {\n            toolbarItem.classList.remove(itemInactiveClass);\n            if (this.screenRecorder.isRecording) {\n              toolbarItem.setAttribute('data-active', 'true');\n              screenRecordingTooltip.innerHTML = GleapTranslationManager.translateText('stopRecording');\n              timerLabel.style.display = 'block';\n            } else {\n              toolbarItem.setAttribute('data-active', 'false');\n              screenRecordingTooltip.innerHTML = GleapTranslationManager.translateText('startRecording');\n              timerLabel.style.display = 'none';\n            }\n          } else {\n            // Recording is not available.\n            toolbarItem.classList.add(itemInactiveClass);\n            screenRecordingTooltip.innerHTML = GleapTranslationManager.translateText('browserNotSupported');\n          }\n          break;\n\n        default:\n          break;\n      }\n    }\n  }\n\n  setupScreenRecording() {\n    const self = this;\n\n    // Hook preview next button\n    const nextButtonPreview = document.querySelector('.bb-capture-preview-sendbutton');\n    nextButtonPreview.onclick = this.showNextStep.bind(this);\n\n    // Hook retry button\n    const retryButton = document.querySelector('.bb-capture-preview-retrybutton');\n    retryButton.onclick = function () {\n      self.screenRecorder.clearPreview();\n      if (self.screenDrawer) {\n        self.screenDrawer.clear();\n      }\n    };\n\n    // Setup screen recorder\n    this.screenRecorder = new GleapScreenRecorder(\n      this.captureRenderer.bind(this),\n      GleapTranslationManager.translateText('accessToScreenSharingDenied')\n    );\n  }\n}\n","import { GleapFrameManager, GleapFeedbackButtonManager, GleapConfigManager } from './Gleap';\n\nexport default class GleapTranslationManager {\n  overrideLanguage = '';\n  isRTLLayout = false;\n\n  // GleapTranslationManager singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapTranslationManager();\n    }\n    return this.instance;\n  }\n\n  /**\n   * Returns the language to override the default language.\n   * @returns {string}\n   */\n  getOverrideLanguage() {\n    return this.overrideLanguage;\n  }\n\n  /**\n   * Sets the language to override the default language.\n   * @param {*} language\n   */\n  setOverrideLanguage(language) {\n    this.overrideLanguage = language;\n  }\n\n  updateRTLSupport() {\n    // Update RTL support.\n    const flowConfig = GleapConfigManager.getInstance().getFlowConfig();\n\n    this.isRTLLayout = false;\n    if (flowConfig && flowConfig.localizationOptions && flowConfig.localizationOptions.rtl) {\n      this.isRTLLayout = true;\n    }\n\n    GleapFeedbackButtonManager.getInstance().updateFeedbackButtonState();\n    GleapFrameManager.getInstance().updateFrameStyle();\n  }\n\n  getActiveLanguage() {\n    var language = 'en';\n    if (typeof navigator !== 'undefined') {\n      language = navigator.language.toLowerCase();\n    }\n\n    // Get language from HTML lang attribute if available\n    if (typeof document !== 'undefined' && document.documentElement) {\n      const htmlLang = document.documentElement.lang;\n      if (htmlLang && htmlLang.trim() !== '') {\n        language = htmlLang.toLowerCase().trim();\n      }\n    }\n\n    if (this.overrideLanguage && this.overrideLanguage !== '') {\n      language = this.overrideLanguage.toLowerCase();\n    }\n\n    return language;\n  }\n\n  static translateText(key) {\n    if (!key) {\n      return '';\n    }\n\n    const flowConfig = GleapConfigManager.getInstance().getFlowConfig();\n    const staticTranslation = flowConfig.staticTranslations;\n\n    if (staticTranslation && staticTranslation[key]) {\n      return staticTranslation[key];\n    }\n\n    return key;\n  }\n\n  static translateTextWithVars(key, vars) {\n    if (!key) {\n      return '';\n    }\n\n    var template = this.translateText(key);\n    if (!template) {\n      return '';\n    }\n\n    return template.replace(/{(\\w+)}/g, function (_, key) {\n      return vars[key];\n    });\n  }\n}\n","import Gleap from './Gleap';\n\nexport default class GleapShortcutListener {\n  shortCutListener = undefined;\n\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapShortcutListener();\n    }\n    return this.instance;\n  }\n\n  start() {\n    if (this.shortCutListener) {\n      return;\n    }\n\n    const charForEvent = function (event) {\n      var code;\n\n      if (event.key !== undefined) {\n        code = event.key;\n      } else if (event.keyIdentifier !== undefined) {\n        code = event.keyIdentifier;\n      } else if (event.keyCode !== undefined) {\n        code = event.keyCode;\n      }\n\n      return code;\n    };\n\n    this.shortCutListener = document.addEventListener('keyup', function (e) {\n      const char = charForEvent(e);\n      if (e.ctrlKey && (char === 'u' || char === 'U' || char === 85)) {\n        Gleap.startFeedbackFlowWithOptions('bugreporting', {\n          autostartDrawing: true,\n        });\n      }\n    });\n  }\n\n  stop() {\n    if (this.shortCutListener) {\n      document.removeEventListener('keyup', this.shortCutListener);\n      this.shortCutListener = undefined;\n    }\n  }\n}\n","export default class GleapPreFillManager {\n  formPreFill = {};\n\n  // GleapPreFillManager singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapPreFillManager();\n    }\n    return this.instance;\n  }\n}\n","import Gleap, {\n  GleapFeedbackButtonManager,\n  GleapConfigManager,\n  GleapSession,\n  GleapAudioManager,\n  GleapTranslationManager,\n  GleapEventManager,\n  GleapAiChatbarManager,\n} from './Gleap';\nimport { loadFromGleapCache, saveToGleapCache } from './GleapHelper';\nimport { loadIcon } from './UI';\n\nexport default class GleapNotificationManager {\n  notificationContainer = null;\n  notifications = [];\n  unreadCount = 0;\n  unreadNotificationsKey = 'unread-notifications';\n  isTabActive = true;\n  showNotificationBadge = true;\n\n  // Keep track of the current index of news being shown\n  currentNewsIndex = 0;\n\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapNotificationManager();\n    }\n    return this.instance;\n  }\n\n  constructor() {}\n\n  updateTabBarNotificationCount() {\n    GleapEventManager.notifyEvent('unread-count-changed', this.unreadCount);\n  }\n\n  injectNotificationUI() {\n    if (this.notificationContainer) {\n      return;\n    }\n\n    var elem = document.createElement('div');\n    elem.className = 'gleap-notification-container gleap-font';\n    document.body.appendChild(elem);\n    this.notificationContainer = elem;\n\n    this.updateContainerStyle();\n    this.reloadNotificationsFromCache();\n  }\n\n  reloadNotificationsFromCache() {\n    try {\n      const notificationsFromCache = loadFromGleapCache(this.unreadNotificationsKey);\n      if (notificationsFromCache && notificationsFromCache.length > 0) {\n        let nots = notificationsFromCache.filter(\n          (notification) =>\n            // Never resurface chatbar-routed notifications in the widget bubble.\n            // (Pre-fix builds may have cached them before the routing guard existed.)\n            notification?.data?.lastSource !== 'chatbar' &&\n            new Date(notification.createdAt) > new Date(Date.now() - 1 * 60 * 60 * 1000)\n        );\n\n        if (nots.length > 2) {\n          this.notifications = nots.splice(0, nots.length - 2);\n        } else {\n          this.notifications = nots;\n        }\n        this.renderNotifications();\n      }\n    } catch (exp) {}\n  }\n\n  setNotificationCount(unreadCount) {\n    this.unreadCount = unreadCount;\n    this.updateTabBarNotificationCount();\n\n    // Update the badge counter.\n    GleapFeedbackButtonManager.getInstance().updateNotificationBadge(this.unreadCount);\n  }\n\n  showNotification(notification) {\n    if (!(this.notificationContainer && notification && notification.data)) {\n      return;\n    }\n\n    // Route conversation notifications by lastSource. Chatbar-origin replies go to the\n    // chatbar pill; everything else stays in the widget bubble (unchanged behavior).\n    try {\n      const lastSource = notification?.data?.lastSource;\n      const chatbar = GleapAiChatbarManager.getInstance();\n      // Available if enabled for the project, manually shown, or currently visible\n      // (e.g. shown before config arrives). showChatbarNotification\n      // queues the pill until the frame handshakes, so routing pre-handshake is safe.\n      const chatbarAvailable =\n        chatbar?.config?.enabled || chatbar?.manuallyShown || (chatbar && !chatbar.isHidden);\n      if (lastSource === 'chatbar' && chatbarAvailable) {\n        chatbar.showChatbarNotification(notification.data);\n        return;\n      }\n    } catch (e) {}\n\n    const notificationsForOutbound = this.notifications.find((e) => notification.outbound === e.outbound);\n    if (!notificationsForOutbound) {\n      this.notifications.push(notification);\n\n      // Play sound only if it's a new one\n      if (notification.sound) {\n        GleapAudioManager.ping();\n      }\n    }\n    if (this.notifications.length > 2) {\n      this.notifications.shift();\n    }\n\n    // Persist notifications.\n    saveToGleapCache(this.unreadNotificationsKey, this.notifications);\n\n    this.renderNotifications();\n  }\n\n  /**\n   * Renders notifications. For news-type notifications, only show\n   * one at a time if there are multiple, with a \"Next\" button to cycle.\n   * The \"Next\" button + pagination are placed within the news content area.\n   *\n   * - Sorts news notifications by createdAt (oldest first).\n   * - Shows \"Done\" on the last news item instead of \"Next\".\n   */\n  renderNotifications() {\n    if (!this.notificationContainer) {\n      return;\n    }\n\n    // Clear the existing notifications in the container (UI only).\n    this.clearAllNotifications(true);\n\n    // Append a close button (which clears everything).\n    const clearElem = document.createElement('div');\n    clearElem.onclick = () => {\n      this.clearAllNotifications();\n      // Reset the news index when everything is closed\n      this.currentNewsIndex = 0;\n    };\n    clearElem.className = 'gleap-notification-close';\n    clearElem.innerHTML = loadIcon('dismiss');\n    this.notificationContainer.appendChild(clearElem);\n\n    // Separate out news notifications vs. others, then sort news by date ascending\n    const newsNotifications = this.notifications\n      .filter((n) => n.data.news)\n      .sort((a, b) => new Date(a.createdAt) - new Date(b.createdAt));\n\n    const otherNotifications = this.notifications.filter((n) => !n.data.news);\n\n    // --- Render NEWS notifications (with pagination) ---\n    if (newsNotifications.length > 0) {\n      // We only show ONE news item at a time if there's more than one\n      const currentIndex = this.currentNewsIndex < newsNotifications.length ? this.currentNewsIndex : 0;\n      const currentNews = newsNotifications[currentIndex];\n\n      // Main wrapper for the news notification\n      const newsElem = document.createElement('div');\n      newsElem.className = 'gleap-notification-item-news';\n\n      // The container that holds image + content\n      const newsContainerElem = document.createElement('div');\n      newsContainerElem.className = 'gleap-notification-item-news-container';\n\n      // Create the image element (clickable)\n      if (\n        currentNews.data.coverImageUrl &&\n        currentNews.data.coverImageUrl !== '' &&\n        !currentNews.data.coverImageUrl.includes('NewsImagePlaceholder')\n      ) {\n        const newsImageElem = document.createElement('img');\n        newsImageElem.className = 'gleap-notification-item-news-image';\n        newsImageElem.src = currentNews.data.coverImageUrl;\n\n        // Only the image is clickable\n        newsImageElem.onclick = (e) => {\n          e.stopPropagation();\n          this.openNews(currentNews);\n        };\n        newsContainerElem.appendChild(newsImageElem);\n      }\n\n      // The content container\n      const newsContentElem = document.createElement('div');\n      newsContentElem.className = 'gleap-notification-item-news-content';\n\n      // Title (clickable)\n      const newsTitleElem = document.createElement('div');\n      newsTitleElem.className = 'gleap-notification-item-news-content-title';\n\n      let content = currentNews.data.text || '';\n      content = content.replaceAll('{{name}}', GleapSession.getInstance().getName());\n      newsTitleElem.innerText = content;\n\n      // Only the title is clickable\n      newsTitleElem.onclick = (e) => {\n        e.stopPropagation();\n        this.openNews(currentNews);\n      };\n\n      newsContentElem.appendChild(newsTitleElem);\n\n      // Description / Sender\n      const descHTML = this.renderDescription(currentNews);\n      if (descHTML) {\n        const descElem = document.createElement('div');\n        descElem.className = 'gleap-notification-item-news-preview';\n        descElem.innerHTML = descHTML;\n        newsContentElem.appendChild(descElem);\n      }\n\n      // If there's more than one news item, show pagination + next/done button\n      if (newsNotifications.length > 1) {\n        // Pagination container (still inside .gleap-notification-item-news-content)\n        const paginationElem = document.createElement('div');\n        paginationElem.className = 'gleap-news-pagination';\n\n        // Show current item / total\n        const pageIndicator = document.createElement('span');\n        pageIndicator.className = 'gleap-news-page-indicator';\n        pageIndicator.innerText = `${currentIndex + 1} / ${newsNotifications.length}`;\n        paginationElem.appendChild(pageIndicator);\n\n        // Next or Done button\n        const nextBtn = document.createElement('button');\n        nextBtn.className = 'gleap-news-next-button';\n\n        if (currentIndex < newsNotifications.length - 1) {\n          nextBtn.innerText = GleapTranslationManager.translateText(`next`);\n          nextBtn.onclick = (e) => {\n            e.stopPropagation(); // so we can click the button freely\n            this.currentNewsIndex++;\n            this.renderNotifications();\n          };\n        } else {\n          nextBtn.innerText = GleapTranslationManager.translateText(`done`);\n          nextBtn.onclick = (e) => {\n            e.stopPropagation();\n            this.clearAllNotifications();\n            this.currentNewsIndex = 0;\n          };\n        }\n        paginationElem.appendChild(nextBtn);\n        newsContentElem.appendChild(paginationElem);\n      }\n\n      // Append content to container\n      newsContainerElem.appendChild(newsContentElem);\n      // Append container to the main element\n      newsElem.appendChild(newsContainerElem);\n      // Finally append to the notification container\n      this.notificationContainer.appendChild(newsElem);\n    }\n\n    // --- Render OTHER notifications normally ---\n    for (let i = 0; i < otherNotifications.length; i++) {\n      const notification = otherNotifications[i];\n      let content = notification.data.text || '';\n      // Replace placeholders\n      content = content.replaceAll('{{name}}', GleapSession.getInstance().getName());\n\n      const elem = document.createElement('div');\n      elem.onclick = () => {\n        if (notification.data.conversation) {\n          Gleap.openConversation(notification.data.conversation.shareToken, true);\n        } else if (notification.data.checklist) {\n          Gleap.openChecklist(notification.data.checklist.id, true);\n        } else {\n          Gleap.open();\n        }\n      };\n\n      // Check if it's a checklist type\n      if (notification.data.checklist) {\n        let progress = Math.round((notification.data.currentStep / notification.data.totalSteps) * 100);\n        if (progress < 100) {\n          progress += 4;\n        }\n\n        elem.className = 'gleap-notification-item-checklist';\n        elem.innerHTML = `\n          <div class=\"gleap-notification-item-checklist-container\">\n            <div class=\"gleap-notification-item-checklist-content\">\n              <div class=\"gleap-notification-item-checklist-content-title\">\n                ${notification.data.text}\n              </div>\n              <div class=\"gleap-notification-item-checklist-content-progress\">\n                <div class=\"gleap-notification-item-checklist-content-progress-inner\" style=\"width: ${progress}%;\"></div>\n              </div>\n              <div class=\"gleap-notification-item-checklist-content-next\">\n                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\n                  fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <path d=\"M4 12H20M20 12L14 6M20 12L14 18\"\n                    stroke=\"currentColor\" stroke-width=\"2\"\n                    stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </svg>\n                ${notification.data.nextStepTitle}\n              </div>\n            </div>\n          </div>`;\n      } else {\n        // Standard non-news notification\n        elem.className = 'gleap-notification-item';\n        elem.innerHTML = `\n          ${\n            notification.data.sender &&\n            notification.data.sender.profileImageUrl &&\n            `<img src=\"${notification.data.sender.profileImageUrl}\" />`\n          }\n          <div class=\"gleap-notification-item-container\">\n            ${\n              notification.data.sender\n                ? `<div class=\"gleap-notification-item-sender\">\n                     ${notification.data.sender.name}\n                   </div>`\n                : ''\n            }\n            <div class=\"gleap-notification-item-content\">${content}</div>\n          </div>`;\n      }\n      this.notificationContainer.appendChild(elem);\n    }\n\n    const hasNotifications = newsNotifications.length > 0 || otherNotifications.length > 0;\n    if (!hasNotifications) {\n      // Clear the notification container\n      this.clearAllNotifications(true);\n    }\n  }\n\n  /**\n   * Helper to open news from a given notification.\n   */\n  openNews(notification) {\n    if (notification.data.news) {\n      Gleap.openNewsArticle(notification.data.news.id, true);\n    } else {\n      Gleap.open();\n    }\n  }\n\n  /**\n   * Helper to render preview or sender info for news notifications.\n   */\n  renderDescription(notification) {\n    const { previewText, sender } = notification.data;\n    if (previewText && previewText.length > 0) {\n      return previewText;\n    } else if (sender) {\n      // Return HTML for the sender name + optional image\n      return `\n        <div class=\"gleap-notification-item-news-sender\">\n          ${sender.profileImageUrl ? `<img src=\"${sender.profileImageUrl}\" alt=\"${sender.name}\" />` : ''}\n          ${sender.name}\n        </div>\n      `;\n    }\n    return '';\n  }\n\n  /**\n   * Clears all notifications from the container.\n   *\n   * @param {boolean} uiOnly - Whether to only clear the UI or also the notifications.\n   */\n  clearAllNotifications(uiOnly = false) {\n    if (!this.notificationContainer) {\n      return;\n    }\n\n    if (!uiOnly) {\n      this.notifications = [];\n      // Reset currentNewsIndex whenever we clear them out\n      this.currentNewsIndex = 0;\n      saveToGleapCache(this.unreadNotificationsKey, this.notifications);\n    }\n\n    while (this.notificationContainer.firstChild) {\n      this.notificationContainer.removeChild(this.notificationContainer.firstChild);\n    }\n  }\n\n  updateContainerStyle() {\n    if (!this.notificationContainer) {\n      return;\n    }\n\n    const flowConfig = GleapConfigManager.getInstance().getFlowConfig();\n    const classLeft = 'gleap-notification-container--left';\n    const classNoButton = 'gleap-notification-container--no-button';\n    this.notificationContainer.classList.remove(classLeft);\n    this.notificationContainer.classList.remove(classNoButton);\n\n    if (\n      flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_CLASSIC_LEFT ||\n      flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_BOTTOM_LEFT\n    ) {\n      this.notificationContainer.classList.add(classLeft);\n    }\n\n    if (GleapFeedbackButtonManager.getInstance().buttonHidden === null) {\n      if (flowConfig.feedbackButtonPosition === GleapFeedbackButtonManager.FEEDBACK_BUTTON_NONE) {\n        this.notificationContainer.classList.add(classNoButton);\n      }\n    } else {\n      if (GleapFeedbackButtonManager.getInstance().buttonHidden) {\n        this.notificationContainer.classList.add(classNoButton);\n      }\n    }\n\n    this.notificationContainer.setAttribute('dir', GleapTranslationManager.getInstance().isRTLLayout ? 'rtl' : 'ltr');\n  }\n}\n","import {\n  GleapFrameManager,\n  GleapConfigManager,\n  GleapSession,\n  GleapEventManager,\n  GleapTranslationManager,\n} from './Gleap';\nimport GleapAgentToolManager from './GleapAgentToolManager';\nimport { bootstrapGleapFrame, runFunctionWhenDomIsReady } from './GleapHelper';\n\nexport default class GleapAiChatbarManager {\n  chatbarUrl = \"https://messenger-app.gleap.io/chatbar\";\n  chatbarContainer = null;\n  chatbarFrame = null;\n  config = null;\n  isHidden = true;\n  manuallyHidden = false;\n  manuallyShown = false;\n  comReady = false;\n  pendingMessages = [];\n  chatbarStyle = null;\n  _panelOpen = false;\n  // Agent targeted by the public Gleap.startAgent() API. agentId is 'kai' (the\n  // default AI agent) or a resolved workflow/bot id; agentName is the display\n  // name resolved via the shared agents endpoint.\n  agentId = null;\n  agentName = null;\n  agentContext = null;\n\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapAiChatbarManager();\n    }\n    return this.instance;\n  }\n\n  constructor() {\n    this._listenForMessages();\n    this._listenForOutsideClicks();\n  }\n\n  _listenForOutsideClicks() {\n    document.addEventListener('click', (event) => {\n      if (!this.chatbarContainer) return;\n      if (this.chatbarContainer.contains(event.target)) return;\n      if (this._suppressOutsideClick) return;\n      this._postMessageRaw({ name: 'chatbar-outside-click' });\n    });\n  }\n\n  _listenForMessages() {\n    window.addEventListener('message', (event) => {\n      // The chatbar now hosts a Messenger-App frame bootstrapped via about:blank, so\n      // event.origin is the host page's origin (not the Gleap origin). Identify the\n      // frame's messages by event.source, mirroring GleapFrameManager.\n      if (!this.chatbarFrame || event.source !== this.chatbarFrame.contentWindow) {\n        return;\n      }\n\n      try {\n        const data = JSON.parse(event.data);\n        if (!data || !data.name) return;\n\n        // Handshake: the Messenger frame posts a bare { name: 'ping' } on boot.\n        if (data.name === 'ping') {\n          this.comReady = true;\n          this._sendSessionUpdate();\n          this._sendConfigUpdate();\n          this._flushPendingMessages();\n          // Declare the chatbar \"open\" on boot so the frame connects Pusher and loads\n          // its (origin-filtered) conversation list. See Task 21 note.\n          this.setPanelOpen(true);\n          return;\n        }\n\n        // Reuse the widget's data collection so chatbar tickets carry the same metadata.\n        if (data.name === 'collect-ticket-data') {\n          GleapFrameManager.getInstance().answerCollectTicketData(this.chatbarFrame, data);\n          return;\n        }\n\n        // The chatbar frame reports its expand/collapse state so we can drive Pusher.\n        if (data.name === 'chatbar-panel-state') {\n          this.setPanelOpen(!!data.data?.isOpen);\n          return;\n        }\n\n        // Surface concerns kept from the legacy protocol.\n        if (data.name === 'chatbar-resize' && data.data) {\n          this._resizeFrame(data.data);\n          return;\n        }\n        if (data.name === 'chatbar-panel-blur' && data.data) {\n          this._updateBlurBackdrop(data.data);\n          return;\n        }\n        if (data.name === 'close-widget') {\n          this.setPanelOpen(false);\n          return;\n        }\n\n        // Open external links posted by the frame.\n        if (data.name === 'open-url') {\n          const url = data.data;\n          const newTab = data.newTab ? true : false;\n          try {\n            GleapFrameManager.getInstance().urlHandler(url, newTab);\n          } catch (e) {}\n          return;\n        }\n\n        // Tool execution requested from inside a chatbar conversation.\n        if (data.name === 'tool-execution' && data.data) {\n          GleapEventManager.notifyEvent('tool-execution', data.data);\n          GleapAgentToolManager.getInstance().triggerToolAction(data.data);\n          return;\n        }\n\n        // Frontend tool execution request: run the registered handler and\n        // return its result to the frame, which delivers it to the agent.\n        if (data.name === 'frontend-tool-execute' && data.data) {\n          GleapAgentToolManager.getInstance()\n            .executeToolAction(data.data)\n            .then((result) => {\n              this._postMessageRaw({\n                name: 'frontend-tool-result',\n                data: result,\n              });\n            });\n          return;\n        }\n\n        // Generic event forwarding (e.g. message-sent / conversation-created / reply-received).\n        if (data.name === 'notify-event' && data.data) {\n          GleapEventManager.notifyEvent(data.data.type, data.data.data);\n          return;\n        }\n      } catch (e) {}\n    });\n  }\n\n  // Posts a BARE Messenger-protocol message to the chatbar frame (no legacy\n  // type:'chatbar' wrapper). Queues until the handshake completes.\n  _postMessageRaw(message) {\n    try {\n      if (!this.comReady || !this.chatbarFrame?.contentWindow) {\n        this.pendingMessages.push(message);\n        return;\n      }\n      this.chatbarFrame.contentWindow.postMessage(JSON.stringify(message), '*');\n    } catch (e) {}\n  }\n\n  _flushPendingMessages() {\n    const queued = this.pendingMessages || [];\n    this.pendingMessages = [];\n    queued.forEach((m) => this._postMessageRaw(m));\n  }\n\n  _sendSessionUpdate() {\n    this._postMessageRaw({\n      name: 'session-update',\n      data: {\n        sessionData: GleapSession.getInstance().getSession(),\n        apiUrl: GleapSession.getInstance().apiUrl,\n        sdkKey: GleapSession.getInstance().sdkKey,\n      },\n    });\n  }\n\n  _sendConfigUpdate() {\n    this._postMessageRaw({\n      name: 'config-update',\n      data: {\n        config: this._withChatbarConfig(GleapConfigManager.getInstance().getFlowConfig()),\n        aiTools: GleapAgentToolManager.getInstance().getAgentTools(),\n        agentTools: GleapAgentToolManager.getInstance().getAgentTools(),\n        overrideLanguage: GleapTranslationManager.getInstance().getOverrideLanguage(),\n      },\n    });\n  }\n\n  // Merge the websocket `ai` config (placeholder, quickActions, style, color) onto the\n  // flow config under the chatbar* keys the Messenger /chatbar frame reads.\n  _withChatbarConfig(flowConfig) {\n    const base = flowConfig || {};\n    return {\n      ...base,\n      chatbarPlaceholder: this.config?.placeholder,\n      chatbarQuickActions: this.config?.quickActions || [],\n      chatbarStyle: this.config?.style,\n      chatbarColor: base?.color,\n      chatbarWorkflowId: this.config?.workflowId ?? null,\n    };\n  }\n\n  // Drives the chatbar frame's Pusher connection + conversation loaders via the shared\n  // widget-status-update message (handled in Messenger CommunicationManager).\n  setPanelOpen(isOpen) {\n    this._panelOpen = !!isOpen;\n    this._postMessageRaw({ name: 'widget-status-update', data: { isWidgetOpen: !!isOpen } });\n  }\n\n  // Forwards a single latest-message pill to the chatbar frame. Called by\n  // GleapNotificationManager when a comment notification's lastSource === 'chatbar'.\n  showChatbarNotification(data) {\n    this._postMessageRaw({\n      name: 'chatbar-notification',\n      data: {\n        sender: data?.sender?.name,\n        text: data?.text,\n        shareToken: data?.conversation?.shareToken,\n      },\n    });\n  }\n\n  _resizeFrame({ width, height }) {\n    if (!this.chatbarContainer) return;\n\n    // Below 600px the width is owned by CSS (the ≤460px media query takes it fluid);\n    // don't write an inline width that would override it.\n    if (Number.isFinite(width) && window.innerWidth >= 600) {\n      const maxWidth = window.innerWidth - 20;\n      this.chatbarContainer.style.width = Math.min(Math.ceil(width), maxWidth) + 'px';\n    }\n    if (Number.isFinite(height)) {\n      this.chatbarContainer.style.height = Math.ceil(height) + 'px';\n    }\n    if (!this.isHidden) {\n      this.chatbarContainer.style.display = 'block';\n    }\n  }\n\n  _updateBlurBackdrop({ visible, top, bottom, left, right, radius, dark }) {\n    // The blur is a PARENT div sized to the panel and placed BEHIND the transparent\n    // iframe, so ONLY the panel is frosted — not the padding, gap, or input bar. The\n    // frame sends the panel's insets; top+bottom (not height) make the div track the\n    // bottom-anchored panel as the container animates. (The container no longer has a\n    // `transform`, which previously clipped this div's backdrop-filter to nothing.)\n    if (!this.blurBackdrop) return;\n    // Make sure the older whole-iframe blur is off.\n    if (this.chatbarFrame) {\n      this.chatbarFrame.style.backdropFilter = '';\n      this.chatbarFrame.style.webkitBackdropFilter = '';\n    }\n    if (visible) {\n      const bd = this.blurBackdrop.style;\n      bd.top = (top ?? 0) + 'px';\n      bd.bottom = (bottom ?? 0) + 'px';\n      bd.left = (left ?? 0) + 'px';\n      bd.right = (right ?? 0) + 'px';\n      bd.height = 'auto';\n      bd.borderRadius = (radius ?? 20) + 'px';\n      // Match the chatbar style: a dark frosted tint for the dark variants, the light\n      // white tint otherwise. brightness < 1 darkens the blurred page behind it so the\n      // panel reads as a true dark surface (mirrors the dark input bar's gray frost).\n      if (dark) {\n        bd.background = 'rgba(40, 40, 40, 0.55)';\n        bd.backdropFilter = 'blur(20px) saturate(140%) brightness(0.75)';\n        bd.webkitBackdropFilter = 'blur(20px) saturate(140%) brightness(0.75)';\n      } else {\n        bd.background = 'rgba(255, 255, 255, 0.45)';\n        bd.backdropFilter = 'blur(20px) saturate(150%) brightness(1.04)';\n        bd.webkitBackdropFilter = 'blur(20px) saturate(150%) brightness(1.04)';\n      }\n      bd.opacity = '1';\n    } else {\n      this.blurBackdrop.style.opacity = '0';\n    }\n  }\n\n  setConfig(config) {\n    this.config = config;\n\n    if (config.enabled) {\n      this.show();\n    } else if (!this.manuallyShown) {\n      this.hide();\n    }\n\n    // Forward updated config to the chatbar frame once the handshake is done so late\n    // `ai` updates from the websocket reach the frame.\n    if (this.comReady) {\n      this._sendConfigUpdate();\n    }\n  }\n\n  setPlaceholder(placeholder) {\n    if (!this.config) this.config = {};\n    this.config.placeholder = placeholder;\n    if (this.comReady) {\n      this._sendConfigUpdate();\n    }\n  }\n\n  setQuickActions(quickActions) {\n    if (!this.config) this.config = {};\n    this.config.quickActions = quickActions;\n    if (this.comReady) {\n      this._sendConfigUpdate();\n    }\n  }\n\n  sendAgentToolsUpdate() {\n    this._postMessageRaw({\n      name: 'config-update',\n      data: {\n        config: this._withChatbarConfig(GleapConfigManager.getInstance().getFlowConfig()),\n        aiTools: GleapAgentToolManager.getInstance().getAgentTools(),\n        agentTools: GleapAgentToolManager.getInstance().getAgentTools(),\n        overrideLanguage: GleapTranslationManager.getInstance().getOverrideLanguage(),\n      },\n    });\n  }\n\n  // Normalize the second argument of startAgent()/showWithAgent(). For backward\n  // compatibility a bare context object (no recognized option keys) is accepted\n  // and treated as { context }.\n  _normalizeAgentOptions(options) {\n    if (!options || typeof options !== 'object') return {};\n    const hasKnownKeys =\n      'context' in options ||\n      'initialQuestion' in options ||\n      'initialMessage' in options;\n    return hasKnownKeys ? options : { context: options };\n  }\n\n  // The project's configured chatbar agent (aiBar.workflowId), used when\n  // startAgent() is called without an explicit id.\n  _getDefaultAgentId() {\n    try {\n      if (this.config?.workflowId) return this.config.workflowId;\n      const flowConfig = GleapConfigManager.getInstance().getFlowConfig() || {};\n      return flowConfig?.aiBar?.workflowId || null;\n    } catch (e) {\n      return null;\n    }\n  }\n\n  // Legacy agent validation: resolve the agent's display name via the shared\n  // agents endpoint. Sets agentId/agentName on success, leaves them untouched\n  // (and returns null) on any failure so the caller can still proceed.\n  async _validateAgent(agentId) {\n    try {\n      const session = GleapSession.getInstance();\n      const apiUrl = session.apiUrl || 'https://api.gleap.io';\n\n      const headers = {};\n      if (session.sdkKey) headers['Api-Token'] = session.sdkKey;\n      if (session.session?.gleapId) headers['Gleap-Id'] = session.session.gleapId;\n      if (session.session?.gleapHash) headers['Gleap-Hash'] = session.session.gleapHash;\n\n      const res = await fetch(`${apiUrl}/v3/shared/agents/${encodeURIComponent(agentId)}`, { headers });\n      if (!res.ok) return null;\n\n      const agentInfo = await res.json();\n      if (!agentInfo || agentInfo.error) return null;\n\n      this.agentId = agentId;\n      this.agentName = agentInfo.name || 'AI Agent';\n      return agentInfo;\n    } catch (e) {\n      return null;\n    }\n  }\n\n  // Reveal the inline chatbar and start a fresh conversation with the given\n  // agent. agentId resolves to the configured default (or 'kai') when empty or\n  // 'default'. options:\n  //   { context?, initialQuestion?, initialMessage? }\n  //   • initialQuestion — a customer question delivered into the conversation\n  //     and ANSWERED by the agent (the customer's first message).\n  //   • initialMessage  — a greeting FROM the agent shown first (e.g. \"Hey, how\n  //     can I help you\"); a static bot message, not answered.\n  async showWithAgent(agentId, options) {\n    const opts = this._normalizeAgentOptions(options);\n\n    // startAgent() is typically called from a host-page click. That same click\n    // bubbles to our document listener and would post `chatbar-outside-click`,\n    // collapsing the panel the instant it opens. Suppress outside-click handling\n    // SYNCHRONOUSLY here — before the awaited validation below — so the\n    // triggering click (which finishes bubbling during that await) can't close\n    // the panel; otherwise the validated, non-'kai' path is left unprotected.\n    this._suppressOutsideClick = true;\n    clearTimeout(this._suppressOutsideClickTimeout);\n    this._suppressOutsideClickTimeout = setTimeout(() => {\n      this._suppressOutsideClick = false;\n    }, 600);\n\n    let resolvedAgentId = agentId;\n    if (!resolvedAgentId || resolvedAgentId === 'default') {\n      resolvedAgentId = this._getDefaultAgentId() || 'kai';\n    }\n\n    if (resolvedAgentId && resolvedAgentId !== 'kai') {\n      // Target the requested id up front: _validateAgent only enriches\n      // agentName on success, so on a failed lookup (404, network error) we'd\n      // otherwise post a stale id from a previous call — or null on the first\n      // call. Setting it here means a failed validation still targets the\n      // requested agent.\n      this.agentId = resolvedAgentId;\n      this.agentName = null;\n      await this._validateAgent(resolvedAgentId);\n    } else {\n      this.agentId = 'kai';\n      this.agentName = null;\n    }\n\n    if (opts.context) this.agentContext = opts.context;\n\n    // Reveal the chatbar (mirrors showAiChatbar) and ensure the frame is mounted.\n    this.manuallyHidden = false;\n    this.manuallyShown = true;\n    this.show();\n\n    // Mark the panel open BEFORE starting the agent so the frame connects Pusher\n    // and subscribes first. The initial message is delivered back to the frame\n    // over the WebSocket (~500ms after create); without an active subscription\n    // at create time that push is missed and the message never renders.\n    this.setPanelOpen(true);\n\n    // Queued until the handshake completes (_postMessageRaw buffers until the\n    // frame posts `ping`), so this works whether or not the chatbar was already\n    // mounted. The frame opens its panel and starts the conversation.\n    this._postMessageRaw({\n      name: 'chatbar-start-agent',\n      data: {\n        agentId: this.agentId,\n        agentName: this.agentName,\n        context: this.agentContext,\n        initialQuestion: opts.initialQuestion || undefined,\n        initialMessage: opts.initialMessage || undefined,\n      },\n    });\n  }\n\n  updateUIVisibility() {\n    const isOpened = GleapFrameManager.getInstance().isOpened();\n    if (isOpened) {\n      this.hide();\n    } else if (this.config?.enabled || this.manuallyShown) {\n      this.show();\n    } else {\n      this.hide();\n    }\n  }\n\n  show() {\n    if (this.manuallyHidden) {\n      return;\n    }\n    this.isHidden = false;\n    this._preloadIframe();\n    if (this.chatbarContainer) {\n      this.chatbarContainer.style.display = 'block';\n    }\n  }\n\n  hide() {\n    this.isHidden = true;\n    this._removeUI();\n  }\n\n  _removeUI() {\n    if (!this.chatbarContainer) return;\n    if (document.body && document.body.contains(this.chatbarContainer)) {\n      document.body.removeChild(this.chatbarContainer);\n    }\n    this.chatbarContainer = null;\n    this.chatbarFrame = null;\n    this.blurBackdrop = null;\n    this.comReady = false;\n    this._panelOpen = false;\n    this.pendingMessages = [];\n  }\n\n  _preloadIframe() {\n    if (this.chatbarContainer) return;\n    runFunctionWhenDomIsReady(() => this._injectUI());\n  }\n\n  _injectUI() {\n    if (!document.body || this.chatbarContainer) return;\n\n    let flowConfig = {};\n    try {\n      flowConfig = GleapConfigManager.getInstance().getFlowConfig() || {};\n    } catch (e) {}\n\n    if (!document.getElementById('gleap-chatbar-styles')) {\n      const widgetPosition = flowConfig.feedbackButtonPosition;\n      let positionStyle = '';\n\n      if (widgetPosition === \"BOTTOM_RIGHT\") {\n        positionStyle = 'right: 60px !important;';\n      } else if (widgetPosition === \"BOTTOM_LEFT\") {\n        positionStyle = 'left: 60px !important;';\n      } else {\n        positionStyle = 'right: 0 !important;';\n      }\n\n      const styleEl = document.createElement('style');\n      styleEl.id = 'gleap-chatbar-styles';\n      styleEl.innerHTML = `\n        @media (max-width: 460px) {\n          .gleap-chatbar {\n            width: auto !important;\n            max-width: 100% !important;\n            ${positionStyle}\n          }\n        }\n      `;\n      document.head.appendChild(styleEl);\n    }\n\n    const container = document.createElement('div');\n    container.className = 'gleap-chatbar';\n\n    container.style.cssText = `\n      position: fixed;\n      bottom: 10px;\n      z-index: 2147483000;\n      border: 0;\n      width: 280px;\n      max-width: calc(100vw - 20px);\n      overflow: visible;\n      height: 80px;\n      display: none;\n      transition: width 0.32s cubic-bezier(0.22, 1, 0.36, 1), height 0.32s cubic-bezier(0.22, 1, 0.36, 1);\n      left: 0;\n      right: 0;\n      margin-left: auto;\n      margin-right: auto;\n    `;\n\n    const frame = document.createElement('iframe');\n    frame.className = 'gleap-chatbar-frame';\n    frame.title = 'Gleap AI Chatbar';\n    frame.setAttribute('role', 'dialog');\n    frame.setAttribute('frameborder', '0');\n    frame.setAttribute('allow', 'autoplay; encrypted-media; microphone *;');\n    frame.style.cssText = `\n      position: relative;\n      width: 100%;\n      height: 100%;\n      border: 0;\n      background: transparent;\n      z-index: 1;\n    `;\n\n    const blurBackdrop = document.createElement('div');\n    // Real backdrop blur, tuned to scroll as smoothly as Chromium allows. backdrop-filter\n    // re-samples the page behind it every scroll frame — that readback is what flickers.\n    // Mitigations (none of which blank the blur):\n    //   • smaller radius (20px vs 40px): the radius dominates per-frame cost, so this is\n    //     the biggest win for dropped frames / flicker.\n    //   • a translucent white tint OVER the blur: masks the moving blurred content so any\n    //     residual flicker is far less visible, and keeps text readable.\n    //   • translateZ(0) + will-change: promote the blur to a stable compositing layer.\n    // IMPORTANT: the transform is ON THIS ELEMENT (safe). Do NOT move a transform/filter/\n    // will-change onto the parent container — that makes backdrop-filter sample only the\n    // container and the blur goes blank. If the blur ever renders blank, drop the\n    // `transform` line here first.\n    blurBackdrop.style.cssText = `\n      position: absolute;\n      opacity: 0;\n      transition: opacity 0.24s ease;\n      background: rgba(255, 255, 255, 0.45);\n      backdrop-filter: blur(20px) saturate(150%) brightness(1.04);\n      -webkit-backdrop-filter: blur(20px) saturate(150%) brightness(1.04);\n      transform: translateZ(0);\n      will-change: backdrop-filter, transform;\n      backface-visibility: hidden;\n      border-radius: 20px;\n      pointer-events: none;\n      z-index: 0;\n    `;\n\n    container.appendChild(blurBackdrop);\n    container.appendChild(frame);\n    document.body.appendChild(container);\n\n    this.chatbarContainer = container;\n    this.chatbarFrame = frame;\n    this.blurBackdrop = blurBackdrop;\n\n    // Bootstrap the Messenger /chatbar frame from the Gleap origin via about:blank +\n    // doc.write (mirrors GleapFrameManager.injectFrame). bootstrapGleapFrame injects\n    // history.replaceState('/chatbar') so the Messenger router boots into CHATBAR mode.\n    bootstrapGleapFrame(this.chatbarFrame, this.chatbarUrl);\n  }\n\n  destroy() {\n    this._removeUI();\n    this.config = null;\n    this.isHidden = true;\n    this.comReady = false;\n    this._panelOpen = false;\n    this.pendingMessages = [];\n    this.agentId = null;\n    this.agentName = null;\n    this.agentContext = null;\n    GleapAiChatbarManager.instance = null;\n  }\n}\n","import Gleap, { GleapFrameManager } from './Gleap';\nimport { bootstrapGleapFrame } from './GleapHelper';\n\nexport default class GleapBannerManager {\n  bannerUrl = 'https://outboundmedia.gleap.io';\n  bannerContainer = null;\n  bannerData = null;\n  disabled = false;\n\n  // GleapBannerManager singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapBannerManager();\n    }\n    return this.instance;\n  }\n\n  constructor() {\n    this.startCommunication();\n  }\n\n  setBannerUrl(url) {\n    this.bannerUrl = url;\n  }\n\n  startCommunication() {\n    // Add window message listener.\n    // With about:blank bootstrapping (see injectBannerUI), event.origin is the parent's origin\n    // — not the bannerUrl. We accept both: source-based match for the bootstrapped iframe,\n    // origin-based match for the legacy / fallback case.\n    window.addEventListener('message', (event) => {\n      const bannerFrame = this.bannerContainer\n        ? this.bannerContainer.querySelector('.gleap-b-frame')\n        : null;\n      const sourceMatches = bannerFrame && event.source === bannerFrame.contentWindow;\n      const originMatches = this.bannerUrl?.includes(event.origin);\n      if (!sourceMatches && !originMatches) {\n        return;\n      }\n\n      try {\n        const data = JSON.parse(event.data);\n\n        if (data?.type !== 'BANNER') {\n          return;\n        }\n\n        if (data.name === 'banner-loaded' && this.bannerData) {\n          this.sendMessage({\n            name: 'banner-data',\n            data: this.bannerData,\n          });\n        }\n        if (data.name === 'banner-height') {\n          document.documentElement.style.setProperty('--gleap-margin-top', data.data.height + 'px');\n        }\n        if (data.name === 'banner-data-set') {\n          document.body.classList.add('gleap-b-shown');\n\n          if (this.bannerData?.format === 'floating') {\n            document.body.classList.add('gleap-b-f');\n          }\n        }\n        if (data.name === 'banner-close') {\n          this.removeBannerUI();\n        }\n        if (data.name === 'start-conversation') {\n          Gleap.startBot(data.data?.botId);\n        }\n        if (data.name === 'start-custom-action') {\n          Gleap.triggerCustomAction(data.data?.action);\n        }\n        if (data.name === 'start-product-tour') {\n          Gleap.startProductTour(data.data?.tourId, true);\n        }\n        if (data.name === 'open-url') {\n          const url = data.data;\n          const newTab = data.newTab ? true : false;\n          GleapFrameManager.getInstance().urlHandler(url, newTab);\n        }\n        if (data.name === 'show-form') {\n          Gleap.startFeedbackFlow(data.data?.formId);\n        }\n        if (data.name === 'show-survey') {\n          Gleap.showSurvey(data.data?.formId, data.data?.surveyFormat);\n        }\n        if (data.name === 'show-news-article') {\n          Gleap.openNewsArticle(data.data?.articleId);\n        }\n        if (data.name === 'show-help-article') {\n          Gleap.openHelpCenterArticle(data.data?.articleId);\n        }\n        if (data.name === 'show-checklist') {\n          Gleap.startChecklist(data.data?.checklistId, true, data.data?.sharedKey);\n        }\n      } catch (exp) {}\n    });\n  }\n\n  removeBannerUI() {\n    if (this.bannerContainer) {\n      document.body.removeChild(this.bannerContainer);\n      this.bannerContainer = null;\n    }\n\n    document.body.classList.remove('gleap-b-shown');\n    document.body.classList.remove('gleap-b-f');\n  }\n\n  disable() {\n    this.disabled = true;\n    this.removeBannerUI();\n  }\n\n  /**\n   * Injects the feedback button into the current DOM.\n   */\n  injectBannerUI(bannerData) {\n    if (!document.body) {\n      return false;\n    }\n\n    if (this.disabled) {\n      return false;\n    }\n\n    if (this.bannerContainer) {\n      this.removeBannerUI();\n    }\n\n    this.bannerData = bannerData;\n\n    // Create the iframe without a src so it becomes an about:blank document (same-origin to parent).\n    // Then bootstrap the actual banner content via doc.write. See bootstrapGleapFrame in GleapHelper.\n    // If the bootstrap fails (e.g. CORS not enabled on the bannerUrl), the helper falls back to\n    // setting iframe.src directly, preserving the original behavior.\n    var elem = document.createElement('div');\n    elem.className = 'gleap-b';\n    elem.innerHTML = `<iframe class=\"gleap-b-frame\" scrolling=\"no\" title=\"Gleap Banner\" role=\"dialog\" frameborder=\"0\"></iframe>`;\n    document.body.appendChild(elem);\n    this.bannerContainer = elem;\n\n    const iframe = elem.querySelector('.gleap-b-frame');\n    if (iframe) {\n      bootstrapGleapFrame(iframe, this.bannerUrl);\n    }\n  }\n\n  sendMessage(data) {\n    try {\n      const gleapBFrame = document.querySelector('.gleap-b-frame');\n      if (gleapBFrame && gleapBFrame.contentWindow) {\n        gleapBFrame.contentWindow.postMessage(\n          JSON.stringify({\n            ...data,\n            type: 'banner',\n          }),\n          '*'\n        );\n      }\n    } catch (e) {}\n  }\n\n  showBanner(bannerData) {\n    this.injectBannerUI(bannerData);\n  }\n}\n","import Gleap, { GleapConfigManager, GleapFrameManager } from './Gleap';\nimport { bootstrapGleapFrame } from './GleapHelper';\n\nexport default class GleapModalManager {\n  modalUrl = 'https://outboundmedia.gleap.io/modal';\n  modalContainer = null;\n  modalData = null;\n  modalBackdropClickListener = null;\n  disabled = false;\n  // singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapModalManager();\n    }\n    return this.instance;\n  }\n\n  constructor() {\n    this._listenForMessages();\n  }\n\n  setModalUrl(url) {\n    this.modalUrl = url;\n  }\n\n  disable() {\n    this.disabled = true;\n    this.hideModal();\n  }\n\n  _listenForMessages() {\n    // With about:blank bootstrapping (see _injectModalUI), event.origin is the parent's origin,\n    // not modalUrl. We accept both: source-based match for the bootstrapped iframe, origin-based\n    // match for the legacy / fallback case.\n    window.addEventListener('message', (event) => {\n      const modalFrame = this.modalContainer\n        ? this.modalContainer.querySelector('.gleap-modal-frame')\n        : null;\n      const sourceMatches = modalFrame && event.source === modalFrame.contentWindow;\n      const originMatches = this.modalUrl?.includes(event.origin);\n      if (!sourceMatches && !originMatches) {\n        return;\n      }\n\n      try {\n        const data = JSON.parse(event.data);\n\n        if (data?.type !== 'MODAL') {\n          return;\n        }\n\n        if (data.name === 'modal-loaded' && this.modalData) {\n          const flowConfig = GleapConfigManager.getInstance().getFlowConfig();\n          const primaryColor = flowConfig.color ? flowConfig.color : '#485BFF';\n          const backgroundColor = flowConfig.backgroundColor ? flowConfig.backgroundColor : '#FFFFFF';\n\n          this._postMessage({\n            name: 'modal-data',\n            data: {\n              ...this.modalData,\n              primaryColor: primaryColor,\n              backgroundColor: backgroundColor,\n            },\n          });\n        }\n        if (data.name === 'modal-height') {\n          const height = data?.data?.height;\n          if (height) {\n            // Set the height of the modal iframe\n            const iframe = this.modalContainer.querySelector('.gleap-modal-frame');\n            if (iframe) {\n              iframe.style.height = `${height}px`;\n            }\n          }\n        }\n        if (data.name === 'modal-data-set') {\n          // TODO: Implement\n        }\n        if (data.name === 'modal-close') {\n          this.hideModal();\n        }\n        if (data.name === 'start-conversation') {\n          Gleap.startBot(data.data?.botId);\n        }\n        if (data.name === 'start-custom-action') {\n          Gleap.triggerCustomAction(data.data?.action);\n        }\n        if (data.name === 'start-product-tour') {\n          Gleap.startProductTour(data.data?.tourId, true);\n        }\n        if (data.name === 'open-url') {\n          const url = data.data;\n          const newTab = data.newTab ? true : false;\n          GleapFrameManager.getInstance().urlHandler(url, newTab);\n        }\n        if (data.name === 'show-form') {\n          Gleap.startFeedbackFlow(data.data?.formId);\n        }\n        if (data.name === 'show-survey') {\n          Gleap.showSurvey(data.data?.formId, data.data?.surveyFormat);\n        }\n        if (data.name === 'show-news-article') {\n          Gleap.openNewsArticle(data.data?.articleId);\n        }\n        if (data.name === 'show-help-article') {\n          Gleap.openHelpCenterArticle(data.data?.articleId);\n        }\n        if (data.name === 'show-checklist') {\n          Gleap.startChecklist(data.data?.checklistId, true, data.data?.sharedKey);\n        }\n      } catch (exp) {}\n    });\n  }\n\n  _injectModalUI(modalData) {\n    if (!document.body) return false;\n\n    if (this.disabled) {\n      return false;\n    }\n\n    if (this.modalContainer) {\n      this.hideModal();\n    }\n\n    this.modalData = modalData;\n\n    // The iframe is created without a src so it becomes an about:blank document (same-origin\n    // to parent). bootstrapGleapFrame then injects the actual modal content via doc.write.\n    // See bootstrapGleapFrame in GleapHelper for the why and the fallback behavior.\n    const wrapper = document.createElement('div');\n    wrapper.className = 'gleap-modal-wrapper';\n    wrapper.innerHTML = `\n      <div class=\"gleap-modal-backdrop\"></div>\n      <div class=\"gleap-modal\">\n        <iframe\n          class=\"gleap-modal-frame\"\n          scrolling=\"no\"\n          title=\"Gleap Modal\"\n          role=\"dialog\"\n          frameborder=\"0\"\n          allow=\"autoplay; encrypted-media; fullscreen; microphone *;\"\n        ></iframe>\n      </div>\n    `;\n    document.body.appendChild(wrapper);\n    this.modalContainer = wrapper;\n\n    const iframe = wrapper.querySelector('.gleap-modal-frame');\n    if (iframe) {\n      bootstrapGleapFrame(iframe, this.modalUrl);\n    }\n\n    // Add on backdrop click listener\n    this.modalBackdropClickListener = this.modalContainer\n      .querySelector('.gleap-modal-backdrop')\n      .addEventListener('click', () => {\n        if (this.modalData?.showCloseButton ?? true) {\n          this.hideModal();\n        }\n      });\n\n    // lock background scroll\n    document.body.classList.add('gleap-modal-open');\n  }\n\n  _postMessage(message) {\n    try {\n      const frame = this.modalContainer.querySelector('.gleap-modal-frame');\n      if (frame?.contentWindow) {\n        // targetOrigin '*' because with about:blank bootstrapping the iframe inherits the\n        // parent's origin, not modalUrl. Using modalUrl here would cause the browser to drop\n        // the message. '*' is safe here: the message is intended for the iframe we created,\n        // and only contains non-sensitive UI config.\n        frame.contentWindow.postMessage(JSON.stringify({ ...message, type: 'modal' }), '*');\n      }\n    } catch (err) {}\n  }\n\n  showModal(modalData) {\n    if (modalData && modalData.config) {\n      this._injectModalUI(modalData.config);\n    }\n  }\n\n  hideModal() {\n    if (!this.modalContainer) return;\n\n    if (this.modalBackdropClickListener) {\n      this.modalContainer\n        .querySelector('.gleap-modal-backdrop')\n        .removeEventListener('click', this.modalBackdropClickListener);\n    }\n\n    document.body.removeChild(this.modalContainer);\n    this.modalContainer = null;\n    document.body.classList.remove('gleap-modal-open');\n  }\n}\n","export default class GleapAudioManager {\n  static audio;\n  static settings = {\n    play: true,\n  };\n\n  static playSound(play) {\n    this.settings.play = play;\n  }\n\n  static ping() {\n    try {\n      if (!this.settings.play) {\n        return;\n      }\n\n      if (!this.audio) {\n        this.audio = new Audio('https://js.gleap.io/res/ping.mp3');\n      }\n\n      const playPromise = this.audio.play();\n      if (playPromise !== undefined) {\n        playPromise.then((_) => {}).catch((error) => {});\n      }\n    } catch (exp) {}\n  }\n}\n","export default class GleapTagManager {\n  tags = [];\n\n  // GleapTagManager singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapTagManager();\n    }\n    return this.instance;\n  }\n\n  /**\n   * Returns the tags\n   * @returns {*}\n   */\n  getTags() {\n    return this.tags;\n  }\n\n  /**\n   * Sets the tags sent with every ticket.\n   * @param {*} tags Array of strings\n   */\n  setTags(tags) {\n    this.tags = tags;\n  }\n}\n","/**\n * Returns the Tag of the element\n * @param  { Object } element\n * @return { String }\n */\nexport function getID(el) {\n  const id = el.getAttribute('id');\n\n  if (id !== null && id !== '') {\n    // if the ID starts with a number or contains \":\" selecting with a hash will cause a DOMException\n    return id.match(/(?:^\\d|:)/) ? `[id=\"${id}\"]` : '#' + id;\n  }\n  return null;\n}\n","/**\n * Get class names for an element\n *\n * @pararm { Element } el\n * @return { Array }\n */\nexport function getClasses(el) {\n  if (!el.hasAttribute('class')) {\n    return [];\n  }\n\n  try {\n    let classList = Array.prototype.slice.call(el.classList);\n\n    // return only the valid CSS selectors based on RegEx\n    return classList.filter((item) => (!/^[a-z_-][a-z\\d_-]*$/i.test(item) ? null : item));\n  } catch (e) {\n    let className = el.getAttribute('class');\n\n    // remove duplicate and leading/trailing whitespaces\n    className = className.trim().replace(/\\s+/g, ' ');\n\n    // split into separate classnames\n    return className.split(' ');\n  }\n}\n\n/**\n * Returns the Class selectors of the element\n * @param  { Object } element\n * @return { Array }\n */\nexport function getClassSelectors(el) {\n  const classList = getClasses(el).filter(Boolean);\n  return classList.map((cl) => `.${cl}`);\n}\n","/**\n * Recursively combinate items.\n * @param  { Array } result\n * @param  { Array } items\n * @param  { Array } data\n * @param  { Number } start\n * @param  { Number } end\n * @param  { Number } index\n * @param  { Number } k\n */\nfunction kCombinations(result, items, data, start, end, index, k) {\n  if (index === k) {\n    result.push(data.slice(0, index).join(''));\n    return;\n  }\n\n  for (let i = start; i <= end && end - i + 1 >= k - index; ++i) {\n    data[index] = items[i];\n    kCombinations(result, items, data, i + 1, end, index + 1, k);\n  }\n}\n\n/**\n * Returns all the possible selector combinations\n * @param  { Array } items\n * @param  { Number } k\n * @return { Array }\n */\nexport function getCombinations(items, k) {\n  const result = [],\n    n = items.length,\n    data = [];\n\n  for (var l = 1; l <= k; ++l) {\n    kCombinations(result, items, data, 0, n - 1, 0, l);\n  }\n\n  return result;\n}\n","/**\n * Determines if the passed el is a DOM element\n */\nexport function isElement(el) {\n  let isElem;\n\n  if (typeof HTMLElement === 'object') {\n    isElem = el instanceof HTMLElement;\n  } else {\n    isElem = !!el && typeof el === 'object' && el.nodeType === 1 && typeof el.nodeName === 'string';\n  }\n  return isElem;\n}\n","import { isElement } from './isElement';\n\n/**\n * Returns the selectors based on the position of the element relative to its siblings\n * @param  { Object } element\n * @return { Array }\n */\nexport function getNthChild(element) {\n  let counter = 0;\n  let k;\n  let sibling;\n  const { parentNode } = element;\n\n  if (Boolean(parentNode)) {\n    const { childNodes } = parentNode;\n    const len = childNodes.length;\n    for (k = 0; k < len; k++) {\n      sibling = childNodes[k];\n      if (isElement(sibling)) {\n        counter++;\n        if (sibling === element) {\n          return `:nth-child(${counter})`;\n        }\n      }\n    }\n  }\n  return null;\n}\n","/**\n * Returns the Tag of the element\n * @param  { Object } element\n * @return { String }\n */\nexport function getTag(el) {\n  return el.tagName.toLowerCase().replace(/:/g, '\\\\:');\n}\n","/**\n * Checks if the selector is unique\n * @param  { Object } element\n * @param  { String } selector\n * @return { Array }\n */\nexport function isUnique(el, selector) {\n  if (!Boolean(selector)) return false;\n  const elems = el.ownerDocument.querySelectorAll(selector);\n  return elems.length === 1 && elems[0] === el;\n}\n","/**\n * Expose `unique`\n */\n\nimport { getID } from './getID';\nimport { getClassSelectors } from './getClasses';\nimport { getCombinations } from './getCombinations';\nimport { getAttributes } from './getAttributes';\nimport { getNthChild } from './getNthChild';\nimport { getTag } from './getTag';\nimport { isUnique } from './isUnique';\nimport { getParents } from './getParents';\n\n/**\n * Returns all the selectors of the elmenet\n * @param  { Object } element\n * @return { Object }\n */\nfunction getAllSelectors(el, selectors, attributesToIgnore) {\n  const funcs = {\n    Tag: getTag,\n    NthChild: getNthChild,\n    Attributes: (elem) => getAttributes(elem, attributesToIgnore),\n    Class: getClassSelectors,\n    ID: getID,\n  };\n\n  return selectors.reduce((res, next) => {\n    res[next] = funcs[next](el);\n    return res;\n  }, {});\n}\n\n/**\n * Tests uniqueNess of the element inside its parent\n * @param  { Object } element\n * @param { String } Selectors\n * @return { Boolean }\n */\nfunction testUniqueness(element, selector) {\n  try {\n    const { parentNode } = element;\n    const elements = parentNode.querySelectorAll(selector);\n    return elements.length === 1 && elements[0] === element;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tests all selectors for uniqueness and returns the first unique selector.\n * @param  { Object } element\n * @param  { Array } selectors\n * @return { String }\n */\nfunction getFirstUnique(element, selectors) {\n  return selectors.find(testUniqueness.bind(null, element));\n}\n\n/**\n * Checks all the possible selectors of an element to find one unique and return it\n * @param  { Object } element\n * @param  { Array } items\n * @param  { String } tag\n * @return { String }\n */\nfunction getUniqueCombination(element, items, tag) {\n  let combinations = getCombinations(items, 3),\n    firstUnique = getFirstUnique(element, combinations);\n\n  if (Boolean(firstUnique)) {\n    return firstUnique;\n  }\n\n  if (Boolean(tag)) {\n    combinations = combinations.map((combination) => tag + combination);\n    firstUnique = getFirstUnique(element, combinations);\n\n    if (Boolean(firstUnique)) {\n      return firstUnique;\n    }\n  }\n\n  return null;\n}\n\n/**\n * Returns a uniqueSelector based on the passed options\n * @param  { DOM } element\n * @param  { Array } options\n * @return { String }\n */\nfunction getUniqueSelector(element, selectorTypes, attributesToIgnore, excludeRegex) {\n  let foundSelector;\n\n  const elementSelectors = getAllSelectors(element, selectorTypes, attributesToIgnore);\n\n  if (excludeRegex && excludeRegex instanceof RegExp) {\n    elementSelectors.ID = excludeRegex.test(elementSelectors.ID) ? null : elementSelectors.ID;\n    elementSelectors.Class = elementSelectors.Class.filter((className) => !excludeRegex.test(className));\n  }\n\n  for (let selectorType of selectorTypes) {\n    const { ID, Tag, Class: Classes, Attributes, NthChild } = elementSelectors;\n    switch (selectorType) {\n      case 'ID':\n        if (Boolean(ID) && testUniqueness(element, ID)) {\n          return ID;\n        }\n        break;\n\n      case 'Tag':\n        if (Boolean(Tag) && testUniqueness(element, Tag)) {\n          return Tag;\n        }\n        break;\n\n      case 'Class':\n        if (Boolean(Classes) && Classes.length) {\n          foundSelector = getUniqueCombination(element, Classes, Tag);\n          if (foundSelector) {\n            return foundSelector;\n          }\n        }\n        break;\n\n      case 'Attributes':\n        if (Boolean(Attributes) && Attributes.length) {\n          foundSelector = getUniqueCombination(element, Attributes, Tag);\n          if (foundSelector) {\n            return foundSelector;\n          }\n        }\n        break;\n\n      case 'NthChild':\n        if (Boolean(NthChild)) {\n          return NthChild;\n        }\n    }\n  }\n  return '*';\n}\n\n/**\n * Generate unique CSS selector for given DOM element\n *\n * @param {Element} el\n * @return {String}\n * @api private\n */\n\nexport default function unique(el, options = {}) {\n  const {\n    selectorTypes = ['ID', 'Class', 'Tag', 'NthChild'],\n    attributesToIgnore = ['id', 'class', 'length'],\n    excludeRegex = null,\n  } = options;\n  const allSelectors = [];\n  const parents = getParents(el);\n\n  for (let elem of parents) {\n    const selector = getUniqueSelector(elem, selectorTypes, attributesToIgnore, excludeRegex);\n    if (Boolean(selector)) {\n      allSelectors.push(selector);\n    }\n  }\n\n  const selectors = [];\n  for (let it of allSelectors) {\n    selectors.unshift(it);\n    const selector = selectors.join(' > ');\n    if (isUnique(el, selector)) {\n      return selector;\n    }\n  }\n\n  return null;\n}\n","/**\n * Returns the Attribute selectors of the element\n * @param  { DOM Element } element\n * @param  { Array } array of attributes to ignore\n * @return { Array }\n */\nexport function getAttributes(el, attributesToIgnore = ['id', 'class', 'length']) {\n  const { attributes } = el;\n  const attrs = [...attributes];\n\n  return attrs.reduce((sum, next) => {\n    if (!(attributesToIgnore.indexOf(next.nodeName) > -1)) {\n      sum.push(`[${next.nodeName}=\"${next.value}\"]`);\n    }\n    return sum;\n  }, []);\n}\n","import { isElement } from './isElement';\n\n/**\n * Returns all the element and all of its parents\n * @param { DOM Element }\n * @return { Array of DOM elements }\n */\nexport function getParents(el) {\n  const parents = [];\n  let currentElement = el;\n  while (isElement(currentElement)) {\n    parents.push(currentElement);\n    currentElement = currentElement.parentNode;\n  }\n\n  return parents;\n}\n","/**\n * Utility function to get the bounding rectangle of an element.\n * @param {HTMLElement} el - The target element.\n * @returns {Object} An object containing x, y, width, and height.\n */\nfunction getElementBounds(el) {\n  const rect = el.getBoundingClientRect();\n  return {\n    x: window.pageXOffset + rect.left,\n    y: window.pageYOffset + rect.top,\n    width: el.offsetWidth,\n    height: el.offsetHeight,\n  };\n}\n\n/**\n * Class representing an overlay element.\n */\nclass ElementOverlay {\n  /**\n   * Create an ElementOverlay.\n   * @param {Object} options - Configuration options.\n   * @param {string} [options.className] - CSS class name for the overlay.\n   * @param {Object} [options.style] - Style overrides for the overlay.\n   */\n  constructor(options) {\n    // Create and style the overlay element.\n    this.overlay = document.createElement('div');\n    this.overlay.className = options.className || '_ext-element-overlay';\n    this.overlay.style.background = (options.style && options.style.background) || 'rgba(250, 240, 202, 0.2)';\n    this.overlay.style.borderColor = (options.style && options.style.borderColor) || '#F95738';\n    this.overlay.style.borderStyle = (options.style && options.style.borderStyle) || 'solid';\n    this.overlay.style.borderRadius = (options.style && options.style.borderRadius) || '1px';\n    this.overlay.style.borderWidth = (options.style && options.style.borderWidth) || '1px';\n    this.overlay.style.boxSizing = (options.style && options.style.boxSizing) || 'border-box';\n    this.overlay.style.cursor = (options.style && options.style.cursor) || 'crosshair';\n    this.overlay.style.position = (options.style && options.style.position) || 'absolute';\n    this.overlay.style.zIndex = (options.style && options.style.zIndex) || '2147483647';\n    this.overlay.style.margin = (options.style && options.style.margin) || '0px';\n    this.overlay.style.padding = (options.style && options.style.padding) || '0px';\n\n    // Create a container that will host a Shadow DOM.\n    this.shadowContainer = document.createElement('div');\n    this.shadowContainer.className = '_ext-element-overlay-container';\n    this.shadowContainer.style.position = 'absolute';\n    this.shadowContainer.style.top = '0px';\n    this.shadowContainer.style.left = '0px';\n    this.shadowContainer.style.margin = '0px';\n    this.shadowContainer.style.padding = '0px';\n    this.shadowRoot = this.shadowContainer.attachShadow({ mode: 'open' });\n  }\n\n  /**\n   * Adds the overlay to the DOM.\n   * @param {Node} parent - The parent element.\n   * @param {boolean} useShadowDOM - Whether to use Shadow DOM.\n   */\n  addToDOM(parent, useShadowDOM) {\n    this.usingShadowDOM = useShadowDOM;\n    if (useShadowDOM) {\n      parent.insertBefore(this.shadowContainer, parent.firstChild);\n      this.shadowRoot.appendChild(this.overlay);\n    } else {\n      parent.appendChild(this.overlay);\n    }\n  }\n\n  /**\n   * Removes the overlay from the DOM.\n   */\n  removeFromDOM() {\n    this.setBounds({ x: 0, y: 0, width: 0, height: 0 });\n    if (this.overlay.remove) {\n      this.overlay.remove();\n    } else if (this.overlay.parentNode) {\n      this.overlay.parentNode.removeChild(this.overlay);\n    }\n    if (this.usingShadowDOM) {\n      if (this.shadowContainer.remove) {\n        this.shadowContainer.remove();\n      } else if (this.shadowContainer.parentNode) {\n        this.shadowContainer.parentNode.removeChild(this.shadowContainer);\n      }\n    }\n  }\n\n  /**\n   * Enables pointer events on the overlay.\n   */\n  captureCursor() {\n    this.overlay.style.pointerEvents = 'auto';\n  }\n\n  /**\n   * Disables pointer events on the overlay.\n   */\n  ignoreCursor() {\n    this.overlay.style.pointerEvents = 'none';\n  }\n\n  /**\n   * Sets the position and size of the overlay.\n   * @param {Object} bounds - The bounding box.\n   * @param {number} bounds.x - The x-coordinate.\n   * @param {number} bounds.y - The y-coordinate.\n   * @param {number} bounds.width - The width.\n   * @param {number} bounds.height - The height.\n   */\n  setBounds(bounds) {\n    const { x, y, width, height } = bounds;\n    this.overlay.style.left = x + 'px';\n    this.overlay.style.top = y + 'px';\n    this.overlay.style.width = width + 'px';\n    this.overlay.style.height = height + 'px';\n  }\n}\n\n/**\n * Class representing an element picker that uses the overlay.\n */\nclass ElementPicker {\n  /**\n   * Create an ElementPicker.\n   * @param {Object} [overlayOptions] - Options to pass to ElementOverlay.\n   */\n  constructor(overlayOptions) {\n    this.active = false;\n    this.overlay = new ElementOverlay(overlayOptions || {});\n    this.handleMouseMove = this.handleMouseMove.bind(this);\n    this.handleClick = this.handleClick.bind(this);\n    this.tick = this.tick.bind(this);\n  }\n\n  /**\n   * Starts the element picking process.\n   * @param {Object} options - Picker options.\n   * @param {Node} [options.parentElement] - Parent element to attach the overlay.\n   * @param {boolean} [options.useShadowDOM=true] - Whether to use Shadow DOM.\n   * @param {Function} [options.onClick] - Callback invoked on click.\n   * @param {Function} [options.onHover] - Callback invoked on hover.\n   * @param {Function} [options.elementFilter] - Function to filter elements.\n   * @returns {boolean} True if started successfully, false if already active.\n   */\n  start(options) {\n    if (this.active) {\n      return false;\n    }\n    this.active = true;\n    this.options = options;\n\n    document.addEventListener('mousemove', this.handleMouseMove, true);\n    document.addEventListener('click', this.handleClick, true);\n\n    const parentElement = options.parentElement || document.body;\n    const useShadowDOM = options.useShadowDOM !== undefined ? options.useShadowDOM : true;\n    this.overlay.addToDOM(parentElement, useShadowDOM);\n    this.tick();\n\n    return true;\n  }\n\n  /**\n   * Stops the element picking process.\n   */\n  stop() {\n    this.active = false;\n    this.options = undefined;\n\n    document.removeEventListener('mousemove', this.handleMouseMove, true);\n    document.removeEventListener('click', this.handleClick, true);\n\n    this.overlay.removeFromDOM();\n    this.target = undefined;\n    this.mouseX = undefined;\n    this.mouseY = undefined;\n\n    if (this.tickReq) {\n      window.cancelAnimationFrame(this.tickReq);\n    }\n  }\n\n  /**\n   * Handles mouse move events.\n   * @param {MouseEvent} event - The mousemove event.\n   */\n  handleMouseMove(event) {\n    this.mouseX = event.clientX;\n    this.mouseY = event.clientY;\n  }\n\n  /**\n   * Handles click events.\n   * @param {MouseEvent} event - The click event.\n   */\n  handleClick(event) {\n    const clickedEl = document.elementFromPoint(event.clientX, event.clientY);\n    if (this.options && this.options.elementFilter && clickedEl && !this.options.elementFilter(clickedEl)) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n    event.stopImmediatePropagation();\n\n    if (this.target && this.options && this.options.onClick) {\n      this.options.onClick(this.target);\n    }\n  }\n\n  /**\n   * The tick function that continuously updates the target element.\n   */\n  tick() {\n    this.updateTarget();\n    this.tickReq = window.requestAnimationFrame(this.tick);\n  }\n\n  /**\n   * Updates the target element based on the current mouse position.\n   */\n  updateTarget() {\n    if (this.mouseX === undefined || this.mouseY === undefined) {\n      return;\n    }\n\n    // Temporarily ignore the overlay's pointer events to detect the underlying element.\n    this.overlay.ignoreCursor();\n    const elAtCursor = document.elementFromPoint(this.mouseX, this.mouseY);\n    const newTarget = elAtCursor;\n    this.overlay.captureCursor();\n\n    // If the target hasn't changed, do nothing.\n    if (!newTarget || newTarget === this.target) {\n      return;\n    }\n\n    // If an element filter is provided and the new target doesn't match, clear the target.\n    if (this.options && this.options.elementFilter) {\n      if (!this.options.elementFilter(newTarget)) {\n        this.target = undefined;\n        this.overlay.setBounds({ x: 0, y: 0, width: 0, height: 0 });\n        return;\n      }\n    }\n\n    this.target = newTarget;\n    const bounds = getElementBounds(newTarget);\n    this.overlay.setBounds(bounds);\n\n    if (this.options && this.options.onHover) {\n      this.options.onHover(newTarget);\n    }\n  }\n}\n\nexport default ElementPicker;\n","import unique from './unique-selector/src/unique-selector';\nimport ElementPicker from './ElementPicker';\n\nclass GleapAdminHelper {\n  picker = null;\n  onElementPicked = null;\n\n  stopPicker = () => {\n    if (this.picker) {\n      this.picker.stop();\n      this.picker = null;\n      return;\n    }\n  };\n\n  startPicker = () => {\n    this.stopPicker();\n    var self = this;\n\n    const style = {\n      borderColor: '#2142E7',\n      background: 'transparent',\n      borderWidth: '4px',\n      borderRadius: '5px',\n    };\n    this.picker = new ElementPicker({ style });\n    this.picker.start({\n      useShadowDOM: false,\n      onClick: (el) => {\n        try {\n          let selector;\n          // Walk a few ancestors so clicks on an inner icon/span inside an\n          // element tagged with `data-gleap-tour` still pick the tagged element.\n          // Bounded so a high-level layout wrapper carrying the attribute can't\n          // hijack clicks on an unrelated descendant.\n          const maxAncestorWalk = 3;\n          let anchor = null;\n          let cursor = el;\n          for (let i = 0; cursor && i <= maxAncestorWalk; i++) {\n            if (cursor.getAttribute && cursor.getAttribute('data-gleap-tour')) {\n              anchor = cursor;\n              break;\n            }\n            cursor = cursor.parentElement;\n          }\n          if (anchor) {\n            const tourId = anchor.getAttribute('data-gleap-tour');\n            selector = `[data-gleap-tour=\"${tourId}\"]`;\n          } else {\n            selector = unique(el);\n          }\n\n          self.onElementPicked && self.onElementPicked(selector);\n        } catch (e) {\n          console.error('Error while getting unique selector', e);\n        }\n      },\n      elementFilter: (el) => {\n        if (el.classList.contains('gleap-admin-collapse-ui') || el.closest('.gleap-admin-collapse-ui')) {\n          return false;\n        }\n        return true;\n      },\n    });\n  };\n\n  setMode = (mode) => {\n    this.mode = mode;\n    if (mode === 'navigate') {\n      this.stopPicker();\n    }\n    if (mode === 'picker') {\n      this.startPicker();\n    }\n  };\n}\n\nexport default GleapAdminHelper;\n","import { loadIcon } from './UI';\nimport GleapAdminHelper from './GleapAdminHelper';\nimport Gleap, { GleapModalManager, GleapProductTours, GleapBannerManager } from './Gleap';\n\nexport default class GleapAdminManager {\n  libraryInstance = null;\n  lastUrl = undefined;\n  injectedFrame = false;\n  gleapFrameContainer = null;\n  gleapCollapseUI = null;\n  injectedCollapseUI = false;\n  gleapFrame = null;\n  configData = null;\n  adminHelper = null;\n  status = 'navigate';\n  initialized = false;\n\n  // GleapAdminManager singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapAdminManager();\n    }\n\n    return this.instance;\n  }\n\n  logCurrentPage() {\n    const currentUrl = window.location.href;\n    if (currentUrl && currentUrl !== this.lastUrl) {\n      this.lastUrl = currentUrl;\n\n      this.sendMessageToTourBuilder({\n        name: 'page-changed',\n        data: {\n          page: currentUrl,\n        },\n      });\n    }\n  }\n\n  startPageListener() {\n    const self = this;\n    setInterval(function () {\n      self.logCurrentPage();\n    }, 1000);\n  }\n\n  initAdminHelper() {\n    const self = this;\n\n    // Disable product tours.\n    this.initialized = true;\n    GleapProductTours.getInstance().disable();\n    GleapBannerManager.getInstance().disable();\n    GleapModalManager.getInstance().disable();\n    Gleap.close();\n    Gleap.showFeedbackButton(false);\n\n    self.adminHelper = new GleapAdminHelper();\n\n    try {\n      self.adminHelper.onElementPicked = (selector) => {\n        self.toggleCollapseUI(true);\n        self.sendMessageToTourBuilder({\n          name: 'element-picked',\n          data: {\n            selector,\n          },\n        });\n      };\n    } catch (e) {\n      console.log(e);\n    }\n\n    self.injectFrame();\n    self.injectCollapseUI();\n    self.setFrameHeight('loading');\n  }\n\n  setFrameHeight(state) {\n    if (this.gleapFrameContainer) {\n      var height = '';\n      if (state === 'picker' || state === 'navigate') {\n        height = '65px';\n      } else if (state === 'editor') {\n        height = '100vh';\n      } else {\n        height = '0px';\n      }\n      this.gleapFrameContainer.style.height = height;\n    }\n  }\n\n  start() {\n    if (typeof window === 'undefined') {\n      return;\n    }\n\n    if (window.gleapAdminDisabled) {\n      return;\n    }\n\n    var self = this;\n\n    // Add window message listener.\n    window.addEventListener('message', (event) => {\n      if (event.origin !== 'https://app.gleap.io') {\n        return;\n      }\n\n      try {\n        const data = JSON.parse(event.data);\n\n        if (data.type === 'admin') {\n          if (data.name === 'load') {\n            self.configData = data.data;\n            self.initAdminHelper();\n          }\n\n          if (data.name === 'smartlink-search-result') {\n            this.sendMessageToTourBuilder({\n              name: 'smartlink-search-result',\n              data: data.data,\n            });\n          }\n\n          if (data.name === 'translate-complete') {\n            this.sendMessageToTourBuilder({\n              name: 'translate-complete',\n              data: data.data,\n            });\n          }\n        }\n\n        if (data.type === 'tourbuilder') {\n          if (data.name === 'loaddata') {\n            this.sendMessageToTourBuilder({\n              name: 'data',\n              data: {\n                ...self.configData,\n                currentPage: window.location.href,\n              },\n            });\n          }\n\n          if (data.name === 'highlight-element') {\n            // Cleanup.\n            document.querySelectorAll('.gleap-admin-highlight').forEach((el) => {\n              el.classList.remove('gleap-admin-highlight');\n            });\n\n            // Find the element and highlight it.\n            if (data?.data?.selector) {\n              const element = document.querySelector(data?.data?.selector);\n              if (element) {\n                element.classList.add('gleap-admin-highlight');\n              }\n            }\n          }\n\n          if (data.name === 'smartlink-search') {\n            this.sendMessage({\n              name: 'smartlink-search',\n              data: data.data,\n            });\n          }\n\n          if (data.name === 'product-tour-started') {\n            this.sendMessage({\n              name: 'product-tour-started',\n              data: data.data,\n            });\n          }\n\n          if (data.name === 'translate') {\n            this.sendMessage({\n              name: 'translate',\n              data: data.data,\n            });\n          }\n\n          if (data.name === 'save') {\n            this.sendMessage({\n              name: 'save',\n              data: data.data,\n            });\n          }\n\n          if (data.name === 'update-steps') {\n            this.sendMessage({\n              name: 'update-steps',\n              data: data.data,\n            });\n          }\n\n          if (data.name === 'click') {\n            try {\n              document.querySelector(data.data.selector).click();\n            } catch (e) {\n              console.log(e);\n            }\n          }\n\n          if (data.name === 'status-changed') {\n            self.status = data.data;\n            this.setFrameHeight(self.status);\n            self.adminHelper.stopPicker();\n\n            if (self.status === 'picker') {\n              self.adminHelper.startPicker();\n            }\n          }\n        }\n      } catch (exp) {}\n    });\n\n    this.sendMessage({\n      name: 'init',\n    });\n\n    this.startPageListener();\n  }\n\n  sendMessage(data) {\n    try {\n      if (window && window.opener) {\n        window.opener.postMessage(\n          JSON.stringify({\n            ...data,\n            type: 'admin',\n          }),\n          '*'\n        );\n      }\n    } catch (e) {}\n  }\n\n  sendMessageToTourBuilder(data) {\n    try {\n      if (this.gleapFrame && this.gleapFrame.contentWindow) {\n        this.gleapFrame.contentWindow.postMessage(\n          JSON.stringify({\n            ...data,\n            type: 'tourbuilder',\n          }),\n          '*'\n        );\n      }\n    } catch (e) {}\n  }\n\n  toggleCollapseUI = (onlyIfActive = false) => {\n    const COLLAPSE_UI_ACTIVE_CLASS = 'gleap-admin-collapse-ui-active';\n    const FRAME_CONTAINER_ACTIVE_CLASS = 'gleap-admin-frame-container-active';\n\n    // Helper function to check if an element has an active class\n    const isActive = (element, activeClass) => element && element.classList.contains(activeClass);\n\n    // Check if onlyIfActive is true and if the UI elements are already inactive\n    if (\n      onlyIfActive &&\n      (!isActive(this.gleapCollapseUI, COLLAPSE_UI_ACTIVE_CLASS) ||\n        !isActive(this.gleapFrameContainer, FRAME_CONTAINER_ACTIVE_CLASS))\n    ) {\n      return; // Return early without toggling the UI\n    }\n\n    // Toggle the UI elements\n    if (this.gleapCollapseUI) {\n      this.gleapCollapseUI.classList.toggle(COLLAPSE_UI_ACTIVE_CLASS);\n    }\n    if (this.gleapFrameContainer) {\n      this.gleapFrameContainer.classList.toggle(FRAME_CONTAINER_ACTIVE_CLASS);\n    }\n  };\n\n  injectCollapseUI = () => {\n    if (this.injectedCollapseUI) {\n      return;\n    }\n    this.injectedCollapseUI = true;\n\n    // Inject widget HTML.\n    var elem = document.createElement('div');\n    elem.className = 'gleap-admin-collapse-ui';\n    elem.innerHTML = `<div class=\"gleap-admin-collapse-ui-icon\">\n    ${loadIcon('arrowdown')}\n    </div>`;\n    document.body.appendChild(elem);\n\n    this.gleapCollapseUI = elem;\n\n    elem.addEventListener('click', (e) => {\n      e.stopImmediatePropagation();\n      e.stopPropagation();\n      e.preventDefault();\n\n      this.toggleCollapseUI();\n    });\n  };\n\n  injectFrame = () => {\n    if (this.injectedFrame) {\n      return;\n    }\n    this.injectedFrame = true;\n\n    // Inject widget HTML.\n    var elem = document.createElement('div');\n    elem.className = 'gleap-admin-frame-container';\n    elem.innerHTML = `<iframe src=\"https://app.gleap.io/${\n      this?.configData?.type === 'tooltips' ? 'tooltipbuilder' : 'producttourbuilder'\n    }\" class=\"gleap-admin-frame\" scrolling=\"no\" title=\"Gleap Admin Window\" allow=\"autoplay; encrypted-media; fullscreen;\" frameborder=\"0\"></iframe>`;\n    document.body.appendChild(elem);\n\n    this.gleapFrameContainer = elem;\n    this.gleapFrame = document.querySelector('.gleap-admin-frame');\n  };\n}\n","const GleapTours = (function () {\n  'use strict';\n  let currentConfig = {};\n  function configure(config = {}) {\n    currentConfig = {\n      animate: true,\n      allowClose: true,\n      overlayOpacity: 0.7,\n      smoothScroll: false,\n      disableActiveInteraction: false,\n      showProgress: false,\n      stagePadding: 10,\n      stageRadius: 5,\n      popoverOffset: 10,\n      showButtons: ['next', 'previous', 'close'],\n      disableButtons: [],\n      overlayColor: '#000',\n      ...config,\n    };\n  }\n  function getConfig(key) {\n    return key ? currentConfig[key] : currentConfig;\n  }\n  function easeInOutQuad(elapsed, initialValue, amountOfChange, duration) {\n    if ((elapsed /= duration / 2) < 1) {\n      return (amountOfChange / 2) * elapsed * elapsed + initialValue;\n    }\n    return (-amountOfChange / 2) * (--elapsed * (elapsed - 2) - 1) + initialValue;\n  }\n  function getFocusableElements(parentEls) {\n    const focusableQuery =\n      'a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type=\"text\"]:not([disabled]), input[type=\"radio\"]:not([disabled]), input[type=\"checkbox\"]:not([disabled]), select:not([disabled])';\n    return parentEls\n      .flatMap((parentEl) => {\n        const isParentFocusable = parentEl.matches(focusableQuery);\n        const focusableEls = Array.from(parentEl.querySelectorAll(focusableQuery));\n        return [...(isParentFocusable ? [parentEl] : []), ...focusableEls];\n      })\n      .filter((el) => {\n        return getComputedStyle(el).pointerEvents !== 'none' && isElementVisible(el);\n      });\n  }\n  function bringInView(element) {\n    if (!element || isElementInView(element)) {\n      return;\n    }\n    const shouldSmoothScroll = getConfig('smoothScroll');\n    element.scrollIntoView({\n      // Removing the smooth scrolling for elements which exist inside the scrollable parent\n      // This was causing the highlight to not properly render\n      behavior: !shouldSmoothScroll || hasScrollableParent(element) ? 'auto' : 'smooth',\n      inline: 'center',\n      block: 'center',\n    });\n  }\n  function hasScrollableParent(e) {\n    if (!e || !e.parentElement) {\n      return;\n    }\n    const parent = e.parentElement;\n    return parent.scrollHeight > parent.clientHeight;\n  }\n  function isElementInView(element) {\n    const rect = element.getBoundingClientRect();\n    return (\n      rect.top >= 0 &&\n      rect.left >= 0 &&\n      rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n      rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n    );\n  }\n  function isElementVisible(el) {\n    return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n  }\n  let currentState = {};\n  function setState(key, value) {\n    currentState[key] = value;\n  }\n  function getState(key) {\n    return key ? currentState[key] : currentState;\n  }\n  function resetState() {\n    currentState = {};\n  }\n  let registeredListeners = {};\n  function listen(hook, callback) {\n    registeredListeners[hook] = callback;\n  }\n  function emit(hook) {\n    var _a;\n    (_a = registeredListeners[hook]) == null ? void 0 : _a.call(registeredListeners);\n  }\n  function destroyEmitter() {\n    registeredListeners = {};\n  }\n  function transitionStage(elapsed, duration, from, to) {\n    let activeStagePosition = getState('__activeStagePosition');\n    const fromDefinition = activeStagePosition ? activeStagePosition : from.getBoundingClientRect();\n    const toDefinition = to.getBoundingClientRect();\n    const x = easeInOutQuad(elapsed, fromDefinition.x, toDefinition.x - fromDefinition.x, duration);\n    const y = easeInOutQuad(elapsed, fromDefinition.y, toDefinition.y - fromDefinition.y, duration);\n    const width = easeInOutQuad(elapsed, fromDefinition.width, toDefinition.width - fromDefinition.width, duration);\n    const height = easeInOutQuad(elapsed, fromDefinition.height, toDefinition.height - fromDefinition.height, duration);\n    activeStagePosition = {\n      x,\n      y,\n      width,\n      height,\n    };\n    renderOverlay(activeStagePosition);\n    setState('__activeStagePosition', activeStagePosition);\n  }\n  function trackActiveElement(element) {\n    if (!element) {\n      return;\n    }\n    const definition = element.getBoundingClientRect();\n    const activeStagePosition = {\n      x: definition.x,\n      y: definition.y,\n      width: definition.width,\n      height: definition.height,\n    };\n    setState('__activeStagePosition', activeStagePosition);\n    renderOverlay(activeStagePosition);\n  }\n  function refreshOverlay() {\n    const activeStagePosition = getState('__activeStagePosition');\n    const overlaySvg = getState('__overlaySvg');\n    if (!activeStagePosition) {\n      return;\n    }\n    if (!overlaySvg) {\n      console.warn('No stage svg found.');\n      return;\n    }\n    const windowX = window.innerWidth;\n    const windowY = window.innerHeight;\n    overlaySvg.setAttribute('viewBox', `0 0 ${windowX} ${windowY}`);\n  }\n  function mountOverlay(stagePosition) {\n    const overlaySvg = createOverlaySvg(stagePosition);\n    document.body.appendChild(overlaySvg);\n    onDriverClick(overlaySvg, (e) => {\n      const target = e.target;\n      if (target.tagName !== 'path') {\n        return;\n      }\n      emit('overlayClick');\n    });\n    setState('__overlaySvg', overlaySvg);\n  }\n  function renderOverlay(stagePosition) {\n    const overlaySvg = getState('__overlaySvg');\n    if (!overlaySvg) {\n      mountOverlay(stagePosition);\n      return;\n    }\n    const pathElement = overlaySvg.firstElementChild;\n    if ((pathElement == null ? void 0 : pathElement.tagName) !== 'path') {\n      throw new Error('no path element found in stage svg');\n    }\n    pathElement.setAttribute('d', generateStageSvgPathString(stagePosition));\n  }\n  function createOverlaySvg(stage) {\n    const windowX = window.innerWidth;\n    const windowY = window.innerHeight;\n    const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n    svg.classList.add('gleap-tour-overlay', 'gleap-tour-overlay-animated');\n    svg.setAttribute('viewBox', `0 0 ${windowX} ${windowY}`);\n    svg.setAttribute('xmlSpace', 'preserve');\n    svg.setAttribute('xmlnsXlink', 'http://www.w3.org/1999/xlink');\n    svg.setAttribute('version', '1.1');\n    svg.setAttribute('preserveAspectRatio', 'xMinYMin slice');\n    svg.style.fillRule = 'evenodd';\n    svg.style.clipRule = 'evenodd';\n    svg.style.strokeLinejoin = 'round';\n    svg.style.strokeMiterlimit = '2';\n    svg.style.zIndex = '10000';\n    svg.style.position = 'fixed';\n    svg.style.top = '0';\n    svg.style.left = '0';\n    svg.style.width = '100%';\n    svg.style.height = '100%';\n    const stagePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n    stagePath.setAttribute('d', generateStageSvgPathString(stage));\n    stagePath.style.fill = getConfig('overlayColor') || 'rgb(0,0,0)';\n    stagePath.style.opacity = `${getConfig('overlayOpacity')}`;\n    stagePath.style.pointerEvents = 'auto';\n    stagePath.style.cursor = 'auto';\n    svg.appendChild(stagePath);\n    return svg;\n  }\n  function generateStageSvgPathString(stage) {\n    const windowX = window.innerWidth;\n    const windowY = window.innerHeight;\n    const stagePadding = getConfig('stagePadding') || 0;\n    const stageRadius = getConfig('stageRadius') || 0;\n    const stageWidth = stage.width + stagePadding * 2;\n    const stageHeight = stage.height + stagePadding * 2;\n    const limitedRadius = Math.min(stageRadius, stageWidth / 2, stageHeight / 2);\n    const normalizedRadius = Math.floor(Math.max(limitedRadius, 0));\n    const highlightBoxX = stage.x - stagePadding + normalizedRadius;\n    const highlightBoxY = stage.y - stagePadding;\n    const highlightBoxWidth = stageWidth - normalizedRadius * 2;\n    const highlightBoxHeight = stageHeight - normalizedRadius * 2;\n    return `M${windowX},0L0,0L0,${windowY}L${windowX},${windowY}L${windowX},0Z\n    M${highlightBoxX},${highlightBoxY} h${highlightBoxWidth} a${normalizedRadius},${normalizedRadius} 0 0 1 ${normalizedRadius},${normalizedRadius} v${highlightBoxHeight} a${normalizedRadius},${normalizedRadius} 0 0 1 -${normalizedRadius},${normalizedRadius} h-${highlightBoxWidth} a${normalizedRadius},${normalizedRadius} 0 0 1 -${normalizedRadius},-${normalizedRadius} v-${highlightBoxHeight} a${normalizedRadius},${normalizedRadius} 0 0 1 ${normalizedRadius},-${normalizedRadius} z`;\n  }\n  function destroyOverlay() {\n    const overlaySvg = getState('__overlaySvg');\n    if (overlaySvg) {\n      overlaySvg.remove();\n    }\n  }\n  function mountDummyElement() {\n    const existingDummy = document.getElementById('gleap-tour-dummy-element');\n    if (existingDummy) {\n      return existingDummy;\n    }\n    let element = document.createElement('div');\n    element.id = 'gleap-tour-dummy-element';\n    element.style.width = '0';\n    element.style.height = '0';\n    element.style.pointerEvents = 'none';\n    element.style.opacity = '0';\n    element.style.position = 'fixed';\n    element.style.top = '50%';\n    element.style.left = '50%';\n    document.body.appendChild(element);\n    return element;\n  }\n  function highlight(step, attemptTime = 5000) {\n    const { element } = step;\n    let elemObj = element;\n    if (typeof elemObj === 'string') {\n      try {\n        elemObj = document.querySelector(element);\n      } catch (error) {\n        // This will escape colons within IDs but not affect pseudo-classes or other valid uses of colons\n        let refactoredElement = element.replace(/(#[^#\\s]+)/g, function (match) {\n          return match.replace(/:/g, '\\\\:');\n        });\n        elemObj = document.querySelector(refactoredElement);\n      }\n    }\n    if (element && !elemObj && attemptTime >= 0) {\n      setTimeout(() => {\n        hidePopover();\n        highlight(step, attemptTime - 100);\n      }, 100);\n\n      return;\n    }\n\n    if (!elemObj) {\n      // A step that declared a selector but couldn't find it should fail,\n      // not silently re-anchor to a centered dummy element.\n      if (step.element) {\n        try {\n          console.warn('[Gleap] Product tour selector did not match:', step.element);\n        } catch (e) {}\n        return getConfig('onElementNotFound')(step);\n      }\n      elemObj = mountDummyElement();\n    }\n\n    transferHighlight(elemObj, step);\n  }\n  function refreshActiveHighlight() {\n    var activeHighlight = getState('__activeElement');\n    const activeStep = getState('__activeStep');\n    if (!activeHighlight || !activeStep) {\n      return;\n    }\n\n    // Re-query the element if the cached reference is no longer in the DOM.\n    if (!document.body.contains(activeHighlight) && activeStep.element && typeof activeStep.element === 'string') {\n      try {\n        var freshEl = document.querySelector(activeStep.element);\n        if (!freshEl) {\n          var escaped = activeStep.element.replace(/(#[^#\\s]+)/g, function (match) {\n            return match.replace(/:/g, '\\\\:');\n          });\n          freshEl = document.querySelector(escaped);\n        }\n        if (freshEl) {\n          activeHighlight = freshEl;\n          setState('__activeElement', freshEl);\n          setState('activeElement', freshEl);\n          freshEl.classList.add('gleap-tour-active-element');\n        }\n      } catch (e) {}\n    }\n\n    trackActiveElement(activeHighlight);\n    refreshOverlay();\n    repositionPopover(activeHighlight, activeStep);\n  }\n  function transferHighlight(toElement, toStep) {\n    const duration = 400;\n    const start = Date.now();\n    const fromStep = getState('__activeStep');\n    const fromElement = getState('__activeElement') || toElement;\n    const isFirstHighlight = !fromElement || fromElement === toElement;\n    const isToDummyElement = toElement.id === 'gleap-tour-dummy-element';\n    const isFromDummyElement = fromElement.id === 'gleap-tour-dummy-element';\n    const isAnimatedTour = getConfig('animate');\n    const highlightStartedHook = toStep.onHighlightStarted || getConfig('onHighlightStarted');\n    const highlightedHook = (toStep == null ? void 0 : toStep.onHighlighted) || getConfig('onHighlighted');\n    const deselectedHook = (fromStep == null ? void 0 : fromStep.onDeselected) || getConfig('onDeselected');\n    const config = getConfig();\n    const state = getState();\n    if (!isFirstHighlight && deselectedHook) {\n      deselectedHook(isFromDummyElement ? void 0 : fromElement, fromStep, {\n        config,\n        state,\n      });\n    }\n    if (highlightStartedHook) {\n      highlightStartedHook(isToDummyElement ? void 0 : toElement, toStep, {\n        config,\n        state,\n      });\n    }\n    const hasDelayedPopover = !isFirstHighlight && isAnimatedTour;\n    let isPopoverRendered = false;\n    hidePopover();\n    setState('previousStep', fromStep);\n    setState('previousElement', fromElement);\n    setState('activeStep', toStep);\n    setState('activeElement', toElement);\n    const animate = () => {\n      const transitionCallback = getState('__transitionCallback');\n      if (transitionCallback !== animate) {\n        return;\n      }\n      const elapsed = Date.now() - start;\n      const timeRemaining = duration - elapsed;\n      const isHalfwayThrough = timeRemaining <= duration / 2;\n      if (toStep.popover && isHalfwayThrough && !isPopoverRendered && hasDelayedPopover) {\n        renderPopover(toElement, toStep);\n        isPopoverRendered = true;\n      }\n      if (getConfig('animate') && elapsed < duration) {\n        transitionStage(elapsed, duration, fromElement, toElement);\n      } else {\n        trackActiveElement(toElement);\n        if (highlightedHook) {\n          highlightedHook(isToDummyElement ? void 0 : toElement, toStep, {\n            config: getConfig(),\n            state: getState(),\n          });\n        }\n        setState('__transitionCallback', void 0);\n        setState('__previousStep', fromStep);\n        setState('__previousElement', fromElement);\n        setState('__activeStep', toStep);\n        setState('__activeElement', toElement);\n      }\n      window.requestAnimationFrame(animate);\n    };\n    setState('__transitionCallback', animate);\n    window.requestAnimationFrame(animate);\n    bringInView(toElement);\n    if (!hasDelayedPopover && toStep.popover) {\n      renderPopover(toElement, toStep);\n    }\n    fromElement.classList.remove('gleap-tour-active-element', 'gleap-tour-no-interaction');\n    fromElement.removeAttribute('aria-haspopup');\n    fromElement.removeAttribute('aria-expanded');\n    fromElement.removeAttribute('aria-controls');\n    const disableActiveInteraction = toStep.disableActiveInteraction ?? getConfig('disableActiveInteraction') ?? false;\n    if (disableActiveInteraction) {\n      toElement.classList.add('gleap-tour-no-interaction');\n    }\n    toElement.classList.add('gleap-tour-active-element');\n    toElement.setAttribute('aria-haspopup', 'dialog');\n    toElement.setAttribute('aria-expanded', 'true');\n    toElement.setAttribute('aria-controls', 'gleap-tour-popover-content');\n  }\n  function destroyHighlight() {\n    var _a;\n    (_a = document.getElementById('gleap-tour-dummy-element')) == null ? void 0 : _a.remove();\n    document.querySelectorAll('.gleap-tour-active-element').forEach((element) => {\n      element.classList.remove('gleap-tour-active-element', 'gleap-tour-no-interaction');\n      element.removeAttribute('aria-haspopup');\n      element.removeAttribute('aria-expanded');\n      element.removeAttribute('aria-controls');\n    });\n  }\n  function requireRefresh() {\n    const resizeTimeout = getState('__resizeTimeout');\n    if (resizeTimeout) {\n      window.cancelAnimationFrame(resizeTimeout);\n    }\n    setState('__resizeTimeout', window.requestAnimationFrame(refreshActiveHighlight));\n  }\n  function trapFocus(e) {\n    var _a;\n    const isActivated = getState('isInitialized');\n    if (!isActivated) {\n      return;\n    }\n    const isTabKey = e.key === 'Tab' || e.keyCode === 9;\n    if (!isTabKey) {\n      return;\n    }\n    const activeElement = getState('__activeElement');\n    const popoverEl = (_a = getState('popover')) == null ? void 0 : _a.wrapper;\n    const focusableEls = getFocusableElements([\n      ...(popoverEl ? [popoverEl] : []),\n      ...(activeElement ? [activeElement] : []),\n    ]);\n    const firstFocusableEl = focusableEls[0];\n    const lastFocusableEl = focusableEls[focusableEls.length - 1];\n    e.preventDefault();\n    if (e.shiftKey) {\n      const previousFocusableEl = focusableEls[focusableEls.indexOf(document.activeElement) - 1] || lastFocusableEl;\n      previousFocusableEl == null ? void 0 : previousFocusableEl.focus();\n    } else {\n      const nextFocusableEl = focusableEls[focusableEls.indexOf(document.activeElement) + 1] || firstFocusableEl;\n      nextFocusableEl == null ? void 0 : nextFocusableEl.focus();\n    }\n  }\n  function onKeyup(e) {\n    var _a;\n    const allowKeyboardControl = (_a = getConfig('allowKeyboardControl')) != null ? _a : true;\n    if (!allowKeyboardControl) {\n      return;\n    }\n    if (e.key === 'Escape') {\n      emit('escapePress');\n    } else if (e.key === 'ArrowRight') {\n      emit('arrowRightPress');\n    } else if (e.key === 'ArrowLeft') {\n      emit('arrowLeftPress');\n    }\n  }\n  function onDriverClick(element, listener, shouldPreventDefault) {\n    const listenerWrapper = (e, listener2) => {\n      const target = e.target;\n      if (!element.contains(target)) {\n        return;\n      }\n      if (!shouldPreventDefault || shouldPreventDefault(target)) {\n        e.preventDefault();\n        e.stopPropagation();\n        e.stopImmediatePropagation();\n      }\n      listener2 == null ? void 0 : listener2(e);\n    };\n    const useCapture = true;\n    document.addEventListener('pointerdown', listenerWrapper, useCapture);\n    document.addEventListener('mousedown', listenerWrapper, useCapture);\n    document.addEventListener('pointerup', listenerWrapper, useCapture);\n    document.addEventListener('mouseup', listenerWrapper, useCapture);\n    document.addEventListener(\n      'click',\n      (e) => {\n        listenerWrapper(e, listener);\n      },\n      useCapture\n    );\n  }\n  function initEvents() {\n    window.addEventListener('keyup', onKeyup, false);\n    window.addEventListener('keydown', trapFocus, false);\n    window.addEventListener('resize', requireRefresh);\n    window.addEventListener('scroll', requireRefresh);\n\n    const interval = setInterval(function () {\n      if (!getState('isInitialized')) return;\n      requireRefresh();\n    }, 1000);\n    setState('__positionInterval', interval);\n  }\n  function destroyEvents() {\n    window.removeEventListener('keyup', onKeyup);\n    window.removeEventListener('resize', requireRefresh);\n    window.removeEventListener('scroll', requireRefresh);\n\n    const interval = getState('__positionInterval');\n    if (interval) clearInterval(interval);\n  }\n  function hidePopover() {\n    const popover = getState('popover');\n    if (!popover) {\n      return;\n    }\n    popover.wrapper.style.display = 'none';\n  }\n  function renderPopover(element, step) {\n    var _a, _b;\n    let popover = getState('popover');\n    if (popover) {\n      document.body.removeChild(popover.wrapper);\n    }\n    popover = createPopover();\n    document.body.appendChild(popover.wrapper);\n    const {\n      title,\n      description,\n      showButtons,\n      disableButtons,\n      showProgress,\n      nextBtnText = getConfig('nextBtnText') || 'Next',\n      prevBtnText = getConfig('prevBtnText') || 'Previous',\n      progressText = getConfig('progressText') || '{current} of {total}',\n    } = step.popover || {};\n    popover.nextButton.innerHTML = nextBtnText;\n    popover.previousButton.innerHTML = prevBtnText;\n    popover.progress.innerHTML = progressText;\n    if (title) {\n      popover.title.innerHTML = title;\n      popover.title.style.display = 'block';\n    } else {\n      popover.title.style.display = 'none';\n    }\n    if (description) {\n      popover.description.innerHTML = description;\n      popover.description.style.display = 'block';\n    } else {\n      popover.description.style.display = 'none';\n    }\n    const showButtonsConfig = showButtons || getConfig('showButtons');\n    const showProgressConfig = showProgress || getConfig('showProgress') || false;\n    const showFooter =\n      (showButtonsConfig == null ? void 0 : showButtonsConfig.includes('next')) ||\n      (showButtonsConfig == null ? void 0 : showButtonsConfig.includes('previous')) ||\n      showProgressConfig;\n    popover.closeButton.style.display = showButtonsConfig.includes('close') ? 'block' : 'none';\n    if (showFooter) {\n      popover.footer.style.display = 'flex';\n      popover.progress.style.display = showProgressConfig ? 'block' : 'none';\n      popover.nextButton.style.display = showButtonsConfig.includes('next') ? 'block' : 'none';\n      popover.previousButton.style.display = showButtonsConfig.includes('previous') ? 'block' : 'none';\n    } else {\n      popover.footer.style.display = 'none';\n    }\n    const disabledButtonsConfig = disableButtons || getConfig('disableButtons') || [];\n    if (disabledButtonsConfig == null ? void 0 : disabledButtonsConfig.includes('next')) {\n      popover.nextButton.disabled = true;\n      popover.nextButton.classList.add('gleap-tour-popover-btn-disabled');\n    }\n    if (disabledButtonsConfig == null ? void 0 : disabledButtonsConfig.includes('previous')) {\n      popover.previousButton.disabled = true;\n      popover.previousButton.classList.add('gleap-tour-popover-btn-disabled');\n    }\n    if (disabledButtonsConfig == null ? void 0 : disabledButtonsConfig.includes('close')) {\n      popover.closeButton.disabled = true;\n      popover.closeButton.classList.add('gleap-tour-popover-btn-disabled');\n    }\n    const popoverWrapper = popover.wrapper;\n    popoverWrapper.style.display = 'block';\n    popoverWrapper.style.left = '';\n    popoverWrapper.style.top = '';\n    popoverWrapper.style.bottom = '';\n    popoverWrapper.style.right = '';\n    popoverWrapper.id = 'gleap-tour-popover-content';\n    popoverWrapper.setAttribute('role', 'dialog');\n    popoverWrapper.setAttribute('aria-labelledby', 'gleap-tour-popover-title');\n    popoverWrapper.setAttribute('aria-describedby', 'gleap-tour-popover-description');\n    const popoverArrow = popover.arrow;\n    popoverArrow.className = 'gleap-tour-popover-arrow';\n    const customPopoverClass = ((_a = step.popover) == null ? void 0 : _a.popoverClass) || getConfig('popoverClass') || '';\n    popoverWrapper.className = `gleap-tour-popover ${customPopoverClass}`.trim();\n    onDriverClick(\n      popover.wrapper,\n      (e) => {\n        var _a2, _b2, _c;\n        const target = e.target;\n        const onNextClick = ((_a2 = step.popover) == null ? void 0 : _a2.onNextClick) || getConfig('onNextClick');\n        const onPrevClick = ((_b2 = step.popover) == null ? void 0 : _b2.onPrevClick) || getConfig('onPrevClick');\n        const onCloseClick = ((_c = step.popover) == null ? void 0 : _c.onCloseClick) || getConfig('onCloseClick');\n        if (target.classList.contains('gleap-tour-popover-next-btn')) {\n          if (onNextClick) {\n            return onNextClick(element, step, {\n              config: getConfig(),\n              state: getState(),\n            });\n          } else {\n            return emit('nextClick');\n          }\n        }\n        if (target.classList.contains('gleap-tour-popover-prev-btn')) {\n          if (onPrevClick) {\n            return onPrevClick(element, step, {\n              config: getConfig(),\n              state: getState(),\n            });\n          } else {\n            return emit('prevClick');\n          }\n        }\n        if (target.classList.contains('gleap-tour-popover-close-btn')) {\n          if (onCloseClick) {\n            return onCloseClick(element, step, {\n              config: getConfig(),\n              state: getState(),\n            });\n          } else {\n            return emit('closeClick');\n          }\n        }\n        return void 0;\n      },\n      (target) => {\n        return (\n          !(popover == null ? void 0 : popover.description.contains(target)) &&\n          !(popover == null ? void 0 : popover.title.contains(target)) &&\n          typeof target.className === 'string' &&\n          target.className.includes('gleap-tour-popover')\n        );\n      }\n    );\n    setState('popover', popover);\n    const onPopoverRender = ((_b = step.popover) == null ? void 0 : _b.onPopoverRender) || getConfig('onPopoverRender');\n    if (onPopoverRender) {\n      onPopoverRender(popover, {\n        config: getConfig(),\n        state: getState(),\n      });\n    }\n    repositionPopover(element, step);\n    bringInView(popoverWrapper);\n    const isToDummyElement = element.classList.contains('gleap-tour-dummy-element');\n    const focusableElement = getFocusableElements([popoverWrapper, ...(isToDummyElement ? [] : [element])]);\n    if (focusableElement.length > 0) {\n      focusableElement[0].focus();\n    }\n  }\n  function getPopoverDimensions() {\n    const popover = getState('popover');\n    if (!(popover == null ? void 0 : popover.wrapper)) {\n      return;\n    }\n    const boundingClientRect = popover.wrapper.getBoundingClientRect();\n    const stagePadding = getConfig('stagePadding') || 0;\n    const popoverOffset = getConfig('popoverOffset') || 0;\n    return {\n      width: boundingClientRect.width + stagePadding + popoverOffset,\n      height: boundingClientRect.height + stagePadding + popoverOffset,\n      realWidth: boundingClientRect.width,\n      realHeight: boundingClientRect.height,\n    };\n  }\n  function calculateTopForLeftRight(alignment, config) {\n    const { elementDimensions, popoverDimensions, popoverPadding, popoverArrowDimensions } = config;\n    if (alignment === 'start') {\n      return Math.max(\n        Math.min(\n          elementDimensions.top - popoverPadding,\n          window.innerHeight - popoverDimensions.realHeight - popoverArrowDimensions.width\n        ),\n        popoverArrowDimensions.width\n      );\n    }\n    if (alignment === 'end') {\n      return Math.max(\n        Math.min(\n          elementDimensions.top -\n            (popoverDimensions == null ? void 0 : popoverDimensions.realHeight) +\n            elementDimensions.height +\n            popoverPadding,\n          window.innerHeight -\n            (popoverDimensions == null ? void 0 : popoverDimensions.realHeight) -\n            popoverArrowDimensions.width\n        ),\n        popoverArrowDimensions.width\n      );\n    }\n    if (alignment === 'center') {\n      return Math.max(\n        Math.min(\n          elementDimensions.top +\n            elementDimensions.height / 2 -\n            (popoverDimensions == null ? void 0 : popoverDimensions.realHeight) / 2,\n          window.innerHeight -\n            (popoverDimensions == null ? void 0 : popoverDimensions.realHeight) -\n            popoverArrowDimensions.width\n        ),\n        popoverArrowDimensions.width\n      );\n    }\n    return 0;\n  }\n  function calculateLeftForTopBottom(alignment, config) {\n    const { elementDimensions, popoverDimensions, popoverPadding, popoverArrowDimensions } = config;\n    if (alignment === 'start') {\n      return Math.max(\n        Math.min(\n          elementDimensions.left - popoverPadding,\n          window.innerWidth - popoverDimensions.realWidth - popoverArrowDimensions.width\n        ),\n        popoverArrowDimensions.width\n      );\n    }\n    if (alignment === 'end') {\n      return Math.max(\n        Math.min(\n          elementDimensions.left -\n            (popoverDimensions == null ? void 0 : popoverDimensions.realWidth) +\n            elementDimensions.width +\n            popoverPadding,\n          window.innerWidth -\n            (popoverDimensions == null ? void 0 : popoverDimensions.realWidth) -\n            popoverArrowDimensions.width\n        ),\n        popoverArrowDimensions.width\n      );\n    }\n    if (alignment === 'center') {\n      return Math.max(\n        Math.min(\n          elementDimensions.left +\n            elementDimensions.width / 2 -\n            (popoverDimensions == null ? void 0 : popoverDimensions.realWidth) / 2,\n          window.innerWidth -\n            (popoverDimensions == null ? void 0 : popoverDimensions.realWidth) -\n            popoverArrowDimensions.width\n        ),\n        popoverArrowDimensions.width\n      );\n    }\n    return 0;\n  }\n  function repositionPopover(element, step) {\n    const popover = getState('popover');\n    if (!popover) {\n      return;\n    }\n    const { align = 'start', side = 'left' } = (step == null ? void 0 : step.popover) || {};\n    const requiredAlignment = align;\n    const requiredSide = element.id === 'gleap-tour-dummy-element' ? 'over' : side;\n    const popoverPadding = getConfig('stagePadding') || 0;\n    const popoverDimensions = getPopoverDimensions();\n    const popoverArrowDimensions = popover.arrow.getBoundingClientRect();\n    const elementDimensions = element.getBoundingClientRect();\n    const topValue = elementDimensions.top - popoverDimensions.height;\n    let isTopOptimal = topValue >= 0;\n    const bottomValue = window.innerHeight - (elementDimensions.bottom + popoverDimensions.height);\n    let isBottomOptimal = bottomValue >= 0;\n    const leftValue = elementDimensions.left - popoverDimensions.width;\n    let isLeftOptimal = leftValue >= 0;\n    const rightValue = window.innerWidth - (elementDimensions.right + popoverDimensions.width);\n    let isRightOptimal = rightValue >= 0;\n    const noneOptimal = !isTopOptimal && !isBottomOptimal && !isLeftOptimal && !isRightOptimal;\n    let popoverRenderedSide = requiredSide;\n    if (requiredSide === 'top' && isTopOptimal) {\n      isRightOptimal = isLeftOptimal = isBottomOptimal = false;\n    } else if (requiredSide === 'bottom' && isBottomOptimal) {\n      isRightOptimal = isLeftOptimal = isTopOptimal = false;\n    } else if (requiredSide === 'left' && isLeftOptimal) {\n      isRightOptimal = isTopOptimal = isBottomOptimal = false;\n    } else if (requiredSide === 'right' && isRightOptimal) {\n      isLeftOptimal = isTopOptimal = isBottomOptimal = false;\n    }\n    if (requiredSide === 'over') {\n      const leftToSet = window.innerWidth / 2 - popoverDimensions.realWidth / 2;\n      const topToSet = window.innerHeight / 2 - popoverDimensions.realHeight / 2;\n      popover.wrapper.style.left = `${leftToSet}px`;\n      popover.wrapper.style.right = `auto`;\n      popover.wrapper.style.top = `${topToSet}px`;\n      popover.wrapper.style.bottom = `auto`;\n    } else if (noneOptimal) {\n      const leftValue2 = window.innerWidth / 2 - (popoverDimensions == null ? void 0 : popoverDimensions.realWidth) / 2;\n      const bottomValue2 = 10;\n      popover.wrapper.style.left = `${leftValue2}px`;\n      popover.wrapper.style.right = `auto`;\n      popover.wrapper.style.bottom = `${bottomValue2}px`;\n      popover.wrapper.style.top = `auto`;\n    } else if (isLeftOptimal) {\n      const leftToSet = Math.min(\n        leftValue,\n        window.innerWidth - (popoverDimensions == null ? void 0 : popoverDimensions.realWidth) - popoverArrowDimensions.width\n      );\n      const topToSet = calculateTopForLeftRight(requiredAlignment, {\n        elementDimensions,\n        popoverDimensions,\n        popoverPadding,\n        popoverArrowDimensions,\n      });\n      popover.wrapper.style.left = `${leftToSet}px`;\n      popover.wrapper.style.top = `${topToSet}px`;\n      popover.wrapper.style.bottom = `auto`;\n      popover.wrapper.style.right = 'auto';\n      popoverRenderedSide = 'left';\n    } else if (isRightOptimal) {\n      const rightToSet = Math.min(\n        rightValue,\n        window.innerWidth - (popoverDimensions == null ? void 0 : popoverDimensions.realWidth) - popoverArrowDimensions.width\n      );\n      const topToSet = calculateTopForLeftRight(requiredAlignment, {\n        elementDimensions,\n        popoverDimensions,\n        popoverPadding,\n        popoverArrowDimensions,\n      });\n      popover.wrapper.style.right = `${rightToSet}px`;\n      popover.wrapper.style.top = `${topToSet}px`;\n      popover.wrapper.style.bottom = `auto`;\n      popover.wrapper.style.left = 'auto';\n      popoverRenderedSide = 'right';\n    } else if (isTopOptimal) {\n      const topToSet = Math.min(topValue, window.innerHeight - popoverDimensions.realHeight - popoverArrowDimensions.width);\n      let leftToSet = calculateLeftForTopBottom(requiredAlignment, {\n        elementDimensions,\n        popoverDimensions,\n        popoverPadding,\n        popoverArrowDimensions,\n      });\n      popover.wrapper.style.top = `${topToSet}px`;\n      popover.wrapper.style.left = `${leftToSet}px`;\n      popover.wrapper.style.bottom = `auto`;\n      popover.wrapper.style.right = 'auto';\n      popoverRenderedSide = 'top';\n    } else if (isBottomOptimal) {\n      const bottomToSet = Math.min(\n        bottomValue,\n        window.innerHeight -\n          (popoverDimensions == null ? void 0 : popoverDimensions.realHeight) -\n          popoverArrowDimensions.width\n      );\n      let leftToSet = calculateLeftForTopBottom(requiredAlignment, {\n        elementDimensions,\n        popoverDimensions,\n        popoverPadding,\n        popoverArrowDimensions,\n      });\n      popover.wrapper.style.left = `${leftToSet}px`;\n      popover.wrapper.style.bottom = `${bottomToSet}px`;\n      popover.wrapper.style.top = `auto`;\n      popover.wrapper.style.right = 'auto';\n      popoverRenderedSide = 'bottom';\n    }\n    if (!noneOptimal) {\n      renderPopoverArrow(requiredAlignment, popoverRenderedSide, element);\n    } else {\n      popover.arrow.classList.add('gleap-tour-popover-arrow-none');\n    }\n  }\n  function renderPopoverArrow(alignment, side, element) {\n    const popover = getState('popover');\n    if (!popover) {\n      return;\n    }\n    const elementDimensions = element.getBoundingClientRect();\n    const popoverDimensions = getPopoverDimensions();\n    const popoverArrow = popover.arrow;\n    const popoverWidth = popoverDimensions.width;\n    const windowWidth = window.innerWidth;\n    const elementWidth = elementDimensions.width;\n    const elementLeft = elementDimensions.left;\n    const popoverHeight = popoverDimensions.height;\n    const windowHeight = window.innerHeight;\n    const elementTop = elementDimensions.top;\n    const elementHeight = elementDimensions.height;\n    popoverArrow.className = 'gleap-tour-popover-arrow';\n    let arrowSide = side;\n    let arrowAlignment = alignment;\n    if (side === 'top') {\n      if (elementLeft + elementWidth <= 0) {\n        arrowSide = 'right';\n        arrowAlignment = 'end';\n      } else if (elementLeft + elementWidth - popoverWidth <= 0) {\n        arrowSide = 'top';\n        arrowAlignment = 'start';\n      }\n      if (elementLeft >= windowWidth) {\n        arrowSide = 'left';\n        arrowAlignment = 'end';\n      } else if (elementLeft + popoverWidth >= windowWidth) {\n        arrowSide = 'top';\n        arrowAlignment = 'end';\n      }\n    } else if (side === 'bottom') {\n      if (elementLeft + elementWidth <= 0) {\n        arrowSide = 'right';\n        arrowAlignment = 'start';\n      } else if (elementLeft + elementWidth - popoverWidth <= 0) {\n        arrowSide = 'bottom';\n        arrowAlignment = 'start';\n      }\n      if (elementLeft >= windowWidth) {\n        arrowSide = 'left';\n        arrowAlignment = 'start';\n      } else if (elementLeft + popoverWidth >= windowWidth) {\n        arrowSide = 'bottom';\n        arrowAlignment = 'end';\n      }\n    } else if (side === 'left') {\n      if (elementTop + elementHeight <= 0) {\n        arrowSide = 'bottom';\n        arrowAlignment = 'end';\n      } else if (elementTop + elementHeight - popoverHeight <= 0) {\n        arrowSide = 'left';\n        arrowAlignment = 'start';\n      }\n      if (elementTop >= windowHeight) {\n        arrowSide = 'top';\n        arrowAlignment = 'end';\n      } else if (elementTop + popoverHeight >= windowHeight) {\n        arrowSide = 'left';\n        arrowAlignment = 'end';\n      }\n    } else if (side === 'right') {\n      if (elementTop + elementHeight <= 0) {\n        arrowSide = 'bottom';\n        arrowAlignment = 'start';\n      } else if (elementTop + elementHeight - popoverHeight <= 0) {\n        arrowSide = 'right';\n        arrowAlignment = 'start';\n      }\n      if (elementTop >= windowHeight) {\n        arrowSide = 'top';\n        arrowAlignment = 'start';\n      } else if (elementTop + popoverHeight >= windowHeight) {\n        arrowSide = 'right';\n        arrowAlignment = 'end';\n      }\n    } else;\n    if (!arrowSide) {\n      popoverArrow.classList.add('gleap-tour-popover-arrow-none');\n    } else {\n      popoverArrow.classList.add(`gleap-tour-popover-arrow-side-${arrowSide}`);\n      popoverArrow.classList.add(`gleap-tour-popover-arrow-align-${arrowAlignment}`);\n    }\n  }\n  function createPopover() {\n    const wrapper = document.createElement('div');\n    wrapper.classList.add('gleap-tour-popover');\n    const arrow = document.createElement('div');\n    arrow.classList.add('gleap-tour-popover-arrow');\n    const title = document.createElement('div');\n    title.id = 'gleap-tour-popover-title';\n    title.classList.add('gleap-tour-popover-title');\n    title.style.display = 'none';\n    title.innerText = 'Popover Title';\n    const description = document.createElement('div');\n    description.id = 'gleap-tour-popover-description';\n    description.classList.add('gleap-tour-popover-description');\n    description.style.display = 'none';\n    description.innerText = 'Popover description is here';\n    const closeButton = document.createElement('button');\n    closeButton.type = 'button';\n    closeButton.classList.add('gleap-tour-popover-close-btn');\n    closeButton.setAttribute('aria-label', 'Close');\n    closeButton.innerHTML = '&times;';\n    const footer = document.createElement('div');\n    footer.classList.add('gleap-tour-popover-footer');\n    const progress = document.createElement('span');\n    progress.classList.add('gleap-tour-popover-progress-text');\n    progress.innerText = '';\n    const footerButtons = document.createElement('span');\n    footerButtons.classList.add('gleap-tour-popover-navigation-btns');\n    const previousButton = document.createElement('button');\n    previousButton.type = 'button';\n    previousButton.classList.add('gleap-tour-popover-prev-btn');\n    previousButton.innerHTML = '&larr; Previous';\n    const nextButton = document.createElement('button');\n    nextButton.type = 'button';\n    nextButton.classList.add('gleap-tour-popover-next-btn');\n    nextButton.innerHTML = 'Next &rarr;';\n    footerButtons.appendChild(previousButton);\n    footerButtons.appendChild(nextButton);\n    footer.appendChild(progress);\n    footer.appendChild(footerButtons);\n    wrapper.appendChild(closeButton);\n    wrapper.appendChild(arrow);\n    wrapper.appendChild(title);\n    wrapper.appendChild(description);\n    wrapper.appendChild(footer);\n    return {\n      wrapper,\n      arrow,\n      title,\n      description,\n      footer,\n      previousButton,\n      nextButton,\n      closeButton,\n      footerButtons,\n      progress,\n    };\n  }\n  function destroyPopover() {\n    var _a;\n    const popover = getState('popover');\n    if (!popover) {\n      return;\n    }\n    (_a = popover.wrapper.parentElement) == null ? void 0 : _a.removeChild(popover.wrapper);\n  }\n  function driver(options = {}) {\n    configure(options);\n    function handleClose() {\n      if (!getConfig('allowClose')) {\n        return;\n      }\n      destroy();\n    }\n    function moveNext() {\n      const activeIndex = getState('activeIndex');\n      const steps = getConfig('steps') || [];\n      if (typeof activeIndex === 'undefined') {\n        return;\n      }\n      const nextStepIndex = activeIndex + 1;\n      if (steps[nextStepIndex]) {\n        drive(nextStepIndex);\n      } else {\n        destroy();\n      }\n    }\n    function movePrevious() {\n      const activeIndex = getState('activeIndex');\n      const steps = getConfig('steps') || [];\n      if (typeof activeIndex === 'undefined') {\n        return;\n      }\n      const previousStepIndex = activeIndex - 1;\n      if (steps[previousStepIndex]) {\n        drive(previousStepIndex);\n      } else {\n        destroy();\n      }\n    }\n    function moveTo(index) {\n      const steps = getConfig('steps') || [];\n      if (steps[index]) {\n        drive(index);\n      } else {\n        destroy();\n      }\n    }\n    function handleArrowLeft() {\n      var _a;\n      const isTransitioning = getState('__transitionCallback');\n      if (isTransitioning) {\n        return;\n      }\n      const activeIndex = getState('activeIndex');\n      const activeStep = getState('__activeStep');\n      const activeElement = getState('__activeElement');\n\n      if (activeStep.mode === 'CLICK') {\n        return;\n      }\n      if (typeof activeIndex === 'undefined' || typeof activeStep === 'undefined') {\n        return;\n      }\n      const currentStepIndex = getState('activeIndex');\n      if (typeof currentStepIndex === 'undefined') {\n        return;\n      }\n      const onPrevClick = ((_a = activeStep.popover) == null ? void 0 : _a.onPrevClick) || getConfig('onPrevClick');\n      if (onPrevClick) {\n        return onPrevClick(activeElement, activeStep, {\n          config: getConfig(),\n          state: getState(),\n        });\n      }\n      movePrevious();\n    }\n    function handleArrowRight() {\n      var _a;\n      const isTransitioning = getState('__transitionCallback');\n      if (isTransitioning) {\n        return;\n      }\n      const activeIndex = getState('activeIndex');\n      const activeStep = getState('__activeStep');\n      const activeElement = getState('__activeElement');\n\n      if (activeStep.mode === 'CLICK') {\n        return;\n      }\n      if (typeof activeIndex === 'undefined' || typeof activeStep === 'undefined') {\n        return;\n      }\n      const onNextClick = ((_a = activeStep.popover) == null ? void 0 : _a.onNextClick) || getConfig('onNextClick');\n      if (onNextClick) {\n        return onNextClick(activeElement, activeStep, {\n          config: getConfig(),\n          state: getState(),\n        });\n      }\n      moveNext();\n    }\n    function init() {\n      if (getState('isInitialized')) {\n        return;\n      }\n      setState('isInitialized', true);\n      document.body.classList.add('gleap-tour-active', getConfig('animate') ? 'gleap-tour-fade' : 'gleap-tour-simple');\n      initEvents();\n      listen('overlayClick', handleClose);\n      listen('escapePress', handleClose);\n      listen('arrowLeftPress', handleArrowLeft);\n      listen('arrowRightPress', handleArrowRight);\n    }\n    function drive(stepIndex = 0) {\n      var _a, _b, _c, _d, _e, _f, _g, _h;\n      const steps = getConfig('steps');\n      if (!steps) {\n        console.error('No steps to drive through');\n        destroy();\n        return;\n      }\n      if (!steps[stepIndex]) {\n        destroy();\n        return;\n      }\n      setState('__activeOnDestroyed', document.activeElement);\n      setState('activeIndex', stepIndex);\n      const currentStep = steps[stepIndex];\n      const hasNextStep = steps[stepIndex + 1];\n      const hasPreviousStep = steps[stepIndex - 1];\n      const doneBtnText =\n        ((_a = currentStep.popover) == null ? void 0 : _a.doneBtnText) || getConfig('doneBtnText') || 'Done';\n      const allowsClosing = getConfig('allowClose');\n      const showProgress =\n        typeof ((_b = currentStep.popover) == null ? void 0 : _b.showProgress) !== 'undefined'\n          ? (_c = currentStep.popover) == null\n            ? void 0\n            : _c.showProgress\n          : getConfig('showProgress');\n      const progressText =\n        ((_d = currentStep.popover) == null ? void 0 : _d.progressText) ||\n        getConfig('progressText') ||\n        '{{current}} of {{total}}';\n      const progressTextReplaced = progressText\n        .replace('{{current}}', `${stepIndex + 1}`)\n        .replace('{{total}}', `${steps.length}`);\n      const configuredButtons = ((_e = currentStep.popover) == null ? void 0 : _e.showButtons) || getConfig('showButtons');\n      const calculatedButtons = ['next', 'previous', ...(allowsClosing ? ['close'] : [])].filter((b) => {\n        return !(configuredButtons == null ? void 0 : configuredButtons.length) || configuredButtons.includes(b);\n      });\n      const onNextClick = ((_f = currentStep.popover) == null ? void 0 : _f.onNextClick) || getConfig('onNextClick');\n      const onPrevClick = ((_g = currentStep.popover) == null ? void 0 : _g.onPrevClick) || getConfig('onPrevClick');\n      const onCloseClick = ((_h = currentStep.popover) == null ? void 0 : _h.onCloseClick) || getConfig('onCloseClick');\n      highlight({\n        ...currentStep,\n        popover: {\n          showButtons: calculatedButtons,\n          nextBtnText: !hasNextStep ? doneBtnText : void 0,\n          disableButtons: [...(!hasPreviousStep ? ['previous'] : [])],\n          showProgress,\n          progressText: progressTextReplaced,\n          onNextClick: onNextClick\n            ? onNextClick\n            : () => {\n                if (!hasNextStep) {\n                  destroy();\n                } else {\n                  drive(stepIndex + 1);\n                }\n              },\n          onPrevClick: onPrevClick\n            ? onPrevClick\n            : () => {\n                drive(stepIndex - 1);\n              },\n          onCloseClick: onCloseClick\n            ? onCloseClick\n            : () => {\n                destroy();\n              },\n          ...((currentStep == null ? void 0 : currentStep.popover) || {}),\n        },\n      });\n    }\n    function destroy(withOnDestroyStartedHook = true) {\n      const activeElement = getState('__activeElement');\n      const activeStep = getState('__activeStep');\n      const activeOnDestroyed = getState('__activeOnDestroyed');\n      const onDestroyStarted = getConfig('onDestroyStarted');\n      if (withOnDestroyStartedHook && onDestroyStarted) {\n        const isActiveDummyElement =\n          !activeElement || (activeElement == null ? void 0 : activeElement.id) === 'gleap-tour-dummy-element';\n        onDestroyStarted(isActiveDummyElement ? void 0 : activeElement, activeStep, {\n          config: getConfig(),\n          state: getState(),\n        });\n        return;\n      }\n      const onDeselected = (activeStep == null ? void 0 : activeStep.onDeselected) || getConfig('onDeselected');\n      const onDestroyed = getConfig('onDestroyed');\n      document.body.classList.remove('gleap-tour-active', 'gleap-tour-fade', 'gleap-tour-simple');\n      destroyEvents();\n      destroyPopover();\n      destroyHighlight();\n      destroyOverlay();\n      destroyEmitter();\n      resetState();\n      if (activeElement && activeStep) {\n        const isActiveDummyElement = activeElement.id === 'gleap-tour-dummy-element';\n        if (onDeselected) {\n          onDeselected(isActiveDummyElement ? void 0 : activeElement, activeStep, {\n            config: getConfig(),\n            state: getState(),\n          });\n        }\n        if (onDestroyed) {\n          onDestroyed(isActiveDummyElement ? void 0 : activeElement, activeStep, {\n            config: getConfig(),\n            state: getState(),\n          });\n        }\n      }\n      if (activeOnDestroyed) {\n        activeOnDestroyed.focus();\n      }\n    }\n    return {\n      isActive: () => getState('isInitialized') || false,\n      refresh: requireRefresh,\n      drive: (stepIndex = 0) => {\n        init();\n        drive(stepIndex);\n      },\n      setConfig: configure,\n      setSteps: (steps) => {\n        resetState();\n        configure({\n          ...getConfig(),\n          steps,\n        });\n      },\n      getConfig,\n      getState,\n      getActiveIndex: () => getState('activeIndex'),\n      isFirstStep: () => getState('activeIndex') === 0,\n      isLastStep: () => {\n        const steps = getConfig('steps') || [];\n        const activeIndex = getState('activeIndex');\n        return activeIndex !== void 0 && activeIndex === steps.length - 1;\n      },\n      getActiveStep: () => getState('activeStep'),\n      getActiveElement: () => getState('activeElement'),\n      getPreviousElement: () => getState('previousElement'),\n      getPreviousStep: () => getState('previousStep'),\n      moveNext,\n      movePrevious,\n      moveTo,\n      hasNextStep: () => {\n        const steps = getConfig('steps') || [];\n        const activeIndex = getState('activeIndex');\n        return activeIndex !== void 0 && steps[activeIndex + 1];\n      },\n      hasPreviousStep: () => {\n        const steps = getConfig('steps') || [];\n        const activeIndex = getState('activeIndex');\n        return activeIndex !== void 0 && steps[activeIndex - 1];\n      },\n      highlight: (step) => {\n        init();\n        highlight({\n          ...step,\n          popover: step.popover\n            ? {\n                showButtons: [],\n                showProgress: false,\n                progressText: '',\n                ...step.popover,\n              }\n            : void 0,\n        });\n      },\n      destroy: () => {\n        destroy(false);\n      },\n    };\n  }\n  return driver;\n})({});\n\nexport default GleapTours;\n","import { GleapConfigManager, GleapTranslationManager } from './Gleap';\nimport { calculateContrast, loadIcon } from './UI';\n\nconst localStorageKey = 'gleap-tour-data';\nconst pointerContainerId = 'copilot-pointer-container';\nconst styleId = 'copilot-tour-styles';\nconst copilotJoinedContainerId = 'copilot-joined-container';\n\nfunction estimateReadTime(text) {\n  if (typeof window === 'undefined') return;\n\n  const wordsPerSecond = 3.6; // Average reading speed\n  const wordCount = text.split(/\\s+/).filter((word) => word.length > 0).length;\n  const readTimeInSeconds = Math.ceil(wordCount / wordsPerSecond);\n  return readTimeInSeconds + 1;\n}\n\nfunction htmlToPlainText(html) {\n  if (typeof window === 'undefined') return;\n\n  const tempDiv = document.createElement('div');\n  tempDiv.innerHTML = html;\n  return tempDiv.textContent || '';\n}\n\nfunction scrollToElement(element) {\n  if (typeof window === 'undefined') return;\n\n  if (element) {\n    element.scrollIntoView({\n      behavior: 'smooth',\n      block: 'center',\n      inline: 'center',\n    });\n  }\n}\n\nfunction performClickAnimation(posX, posY) {\n  if (typeof window === 'undefined') return;\n\n  const wave = document.createElement('div');\n  wave.className = 'click-wave';\n  wave.style.left = `${posX - 17}px`;\n  wave.style.top = `${posY - 17}px`;\n  document.body.appendChild(wave);\n  setTimeout(() => {\n    wave.remove();\n  }, 800);\n}\n\nfunction waitForElement(selector, timeout = 5000) {\n  if (typeof window === 'undefined') return;\n\n  const pollInterval = 100;\n  const maxAttempts = timeout / pollInterval;\n  let attempts = 0;\n  return new Promise((resolve, reject) => {\n    const interval = setInterval(() => {\n      const element = document.querySelector(selector);\n      if (element) {\n        clearInterval(interval);\n        resolve(element);\n      } else if (attempts >= maxAttempts) {\n        clearInterval(interval);\n        reject(new Error(`Element not found for selector: ${selector}`));\n      }\n      attempts++;\n    }, pollInterval);\n  });\n}\n\nfunction smoothScrollToY(yPosition) {\n  if (typeof window === 'undefined') return;\n\n  const viewportHeight = window.innerHeight;\n  const targetScrollPosition = yPosition - viewportHeight / 2;\n  window.scrollTo({\n    top: targetScrollPosition,\n    behavior: 'smooth',\n  });\n}\n\nasync function canPlayAudio() {\n  if (typeof window === 'undefined') return;\n\n  const audio = new Audio('data:audio/wav;base64,UklGRigAAABXQVZFZm10IBAAAAABAAEARKwAABCxAgAEABAAZGF0YQAAAAA=');\n  try {\n    await audio.play();\n    return true;\n  } catch (err) {\n    return false;\n  }\n}\n\n// Helper: Check if an element is fully visible in the viewport.\nfunction isElementFullyVisible(el) {\n  if (typeof window === 'undefined') return;\n\n  const rect = el.getBoundingClientRect();\n  return rect.top >= 0 && rect.left >= 0 && rect.bottom <= window.innerHeight && rect.right <= window.innerWidth;\n}\n\n// Helper: Get scrollable ancestors of an element.\nfunction getScrollableAncestors(el) {\n  if (typeof window === 'undefined') return;\n\n  let ancestors = [];\n  let current = el.parentElement;\n  while (current) {\n    const style = window.getComputedStyle(current);\n    if ((style.overflowY === 'auto' || style.overflowY === 'scroll') && current.scrollHeight > current.clientHeight) {\n      ancestors.push(current);\n    }\n    current = current.parentElement;\n  }\n  return ancestors;\n}\n\nexport default class GleapCopilotTours {\n  productTourData = undefined;\n  productTourId = undefined;\n  currentActiveIndex = undefined;\n  lastArrowPositionX = undefined;\n  lastArrowPositionY = undefined;\n  onCompleteCallback = undefined;\n  audioMuted = false;\n  currentAudio = undefined;\n\n  // Cached pointer container.\n  _pointerContainer = null;\n  // For scroll handling.\n  _scrollListeners = [];\n  _currentAnchor = null;\n  _currentStep = null;\n  _scrollDebounceTimer = null;\n\n  // GleapReplayRecorder singleton.\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapCopilotTours();\n    }\n    return this.instance;\n  }\n\n  constructor() {\n    const self = this;\n\n    if (typeof window !== 'undefined') {\n      this._scrollListeners = [];\n      this._currentAnchor = null;\n      this._currentStep = null;\n      this._scrollDebounceTimer = null;\n\n      window.addEventListener('resize', () => {\n        if (self.productTourId && self.currentActiveIndex >= 0 && self.productTourData && self.productTourData.steps) {\n          const steps = self.productTourData.steps;\n          const currentStep = steps[self.currentActiveIndex];\n          if (currentStep && currentStep.selector && currentStep.selector !== '') {\n            self.updatePointerPosition(document.querySelector(currentStep.selector), currentStep);\n          }\n        }\n      });\n    }\n  }\n\n  disable() {\n    this.disabled = true;\n\n    this.cleanup();\n  }\n\n  startWithConfig(tourId, config, onCompleteCallback = undefined) {\n    if (typeof window === 'undefined') return;\n    if (this.productTourId) return;\n    if (this.disabled) return;\n\n    this.productTourId = tourId;\n    this.productTourData = config;\n    this.currentActiveIndex = 0;\n    this.onCompleteCallback = onCompleteCallback;\n    this.start();\n  }\n\n  storeUncompletedTour() {\n    if (typeof window === 'undefined') return;\n    if (this.productTourId && this.productTourData) {\n      try {\n        let data = JSON.parse(\n          JSON.stringify({\n            tourData: this.productTourData,\n            tourId: this.productTourId,\n          })\n        );\n        data.tourData.steps = data.tourData.steps.slice(this.currentActiveIndex || 0, data.tourData.steps.length);\n        localStorage.setItem(localStorageKey, JSON.stringify(data));\n      } catch (e) {\n        // Optionally log error in development mode.\n      }\n    } else {\n      localStorage.removeItem(localStorageKey);\n    }\n  }\n\n  // Attach scroll listeners with a debounce to update the pointer position after scrolling stops.\n  attachScrollListeners(anchor, currentStep) {\n    if (typeof window === 'undefined') return;\n    if (!anchor) return;\n    const scrollableAncestors = getScrollableAncestors(anchor);\n    // Also include window.\n    scrollableAncestors.push(window);\n    scrollableAncestors.forEach((el) => {\n      const handler = () => {\n        clearTimeout(this._scrollDebounceTimer);\n        this._scrollDebounceTimer = setTimeout(() => {\n          this.updatePointerPosition(anchor, currentStep);\n        }, 150);\n      };\n      el.addEventListener('scroll', handler, { passive: true });\n      this._scrollListeners.push({ el, handler });\n    });\n  }\n\n  // Remove scroll listeners and clear debounce timer.\n  removeScrollListeners() {\n    if (typeof window === 'undefined') return;\n    if (this._scrollListeners && this._scrollListeners.length > 0) {\n      this._scrollListeners.forEach(({ el, handler }) => {\n        el.removeEventListener('scroll', handler);\n      });\n      this._scrollListeners = [];\n    }\n    if (this._scrollDebounceTimer) {\n      clearTimeout(this._scrollDebounceTimer);\n      this._scrollDebounceTimer = null;\n    }\n  }\n\n  // Updated pointer position:\n  // 1. Scroll the element into view.\n  // 2. After the element is fully visible (or after a maximum delay), update the pointer position to point towards the element.\n  updatePointerPosition(anchor, currentStep) {\n    if (typeof window === 'undefined') return;\n    try {\n      const container = this._pointerContainer || document.getElementById(pointerContainerId);\n      if (!container) return;\n\n      if (!anchor) {\n        container.style.position = 'fixed';\n        container.style.left = '50%';\n        container.style.top = '50%';\n        container.style.transform = 'translate(-50%, -50%)';\n        smoothScrollToY(window.innerHeight / 2);\n        this.removeScrollListeners();\n        this._currentAnchor = null;\n        this._currentStep = null;\n        return;\n      }\n\n      // Step 1: Scroll the element into view.\n      scrollToElement(anchor);\n\n      // Step 2: Poll until the element is fully visible (or after maximum polls).\n      const pollInterval = 100;\n      const maxPolls = 20;\n      let pollCount = 0;\n      const updateFinalPosition = () => {\n        if (isElementFullyVisible(anchor) || pollCount >= maxPolls) {\n          // Compute final target coordinates.\n          const anchorRect = anchor.getBoundingClientRect();\n          const targetX = anchorRect.left + anchorRect.width / 2;\n          const targetY = anchorRect.top + anchorRect.height / 2 + 10; // 10px downward offset.\n          container.style.position = 'fixed';\n          container.style.left = `${targetX}px`;\n          container.style.top = `${targetY}px`;\n          container.style.transform = 'translate(-50%, -50%)';\n\n          // Adjust container if too far right.\n          let containerWidthSpace = 350;\n          if (containerWidthSpace > window.innerWidth - 40) {\n            containerWidthSpace = window.innerWidth - 40;\n          }\n          if (targetX + containerWidthSpace > window.innerWidth - 20) {\n            container.classList.add('copilot-pointer-container-right');\n          } else {\n            container.classList.remove('copilot-pointer-container-right');\n          }\n\n          // Reattach scroll listeners if the target or step has changed.\n          if (this._currentAnchor !== anchor || this._currentStep !== currentStep) {\n            this.removeScrollListeners();\n            this._currentAnchor = anchor;\n            this._currentStep = currentStep;\n            this.attachScrollListeners(anchor, currentStep);\n          }\n        } else {\n          pollCount++;\n          setTimeout(updateFinalPosition, pollInterval);\n        }\n      };\n      updateFinalPosition();\n    } catch (e) {\n      // Optionally log errors.\n    }\n  }\n\n  cleanup() {\n    if (typeof window === 'undefined') return;\n    document.body.classList.add('gl-copilot-fade-out');\n    if (this.currentAudio) {\n      this.currentAudio.pause();\n    }\n    setTimeout(() => {\n      if (this._pointerContainer) {\n        this._pointerContainer.remove();\n        this._pointerContainer = null;\n      } else {\n        const container = document.getElementById(pointerContainerId);\n        if (container) container.remove();\n      }\n      const copilotInfoContainer = document.getElementById(copilotJoinedContainerId);\n      if (copilotInfoContainer) copilotInfoContainer.remove();\n      const styleNode = document.getElementById(styleId);\n      if (styleNode) styleNode.remove();\n      document.body.classList.remove('gl-copilot-fade-out');\n    }, 800);\n\n    this.productTourId = undefined;\n    this.productTourData = undefined;\n\n    this.removeScrollListeners();\n  }\n\n  toggleAudio(muted = false) {\n    this.audioMuted = muted;\n    if (this.currentAudio) {\n      this.currentAudio.muted = this.audioMuted;\n    }\n    document.querySelector(`.${copilotJoinedContainerId}-mute`).innerHTML = loadIcon(this.audioMuted ? 'unmute' : 'mute');\n  }\n\n  setupCopilotTour() {\n    if (typeof window === 'undefined') return;\n\n    const primaryColor = GleapConfigManager.getInstance().flowConfig?.color ?? '#485BFF';\n    const contrastColor = calculateContrast(primaryColor);\n\n    let styleNode = document.getElementById(styleId);\n    if (!styleNode) {\n      styleNode = document.createElement('style');\n      styleNode.id = styleId;\n      styleNode.type = 'text/css';\n      styleNode.textContent = `\n        #${pointerContainerId} {\n          position: absolute;\n          top: 0;\n          left: 0;\n          display: flex;\n          align-items: flex-start;\n          pointer-events: none;\n          z-index: 2147483610;\n          transition: all 0.5s ease;\n        }\n        .${pointerContainerId}-clickmode {\n          cursor: pointer;\n          pointer-events: all !important;\n        }\n        .${pointerContainerId}-clickmode #copilot-info-bubble-content {\n          display: flex !important;\n        }\n        .${pointerContainerId}-clickmode svg {\n          display: none !important;\n        }\n        #${pointerContainerId} svg {\n          width: 20px;\n          height: auto;\n          fill: none;\n        }\n        #copilot-info-bubble {\n          position: relative;\n        }\n        #copilot-info-bubble-content-container {\n          position: absolute;\n          top: 0px;\n          left: 0px;\n          min-width: min(300px, 80vw);\n          display: flex;\n          flex-direction: column;\n          align-items: flex-start;\n        }\n        .${pointerContainerId}-right #copilot-info-bubble-content-container {\n          left: auto !important;\n          right: 0px !important;\n          align-items: flex-end;\n        }\n        .${pointerContainerId}-right .copilot-info-bubble-content {\n          margin-right: 5px;\n        }\n        .${pointerContainerId}-right svg {\n          transform: scaleX(-1);\n        }\n        #copilot-info-bubble-content svg {\n          width: 16px;\n          height: 16px;\n          display: inline-block !important;\n          margin-left: 5px;\n        }\n        #copilot-info-bubble-content {\n          margin-top: 18px;\n          margin-left: 5px;\n          padding: 10px 15px;\n          border-radius: 20px;\n          background-color: black;\n          color: white;\n          font-family: Arial, sans-serif;\n          font-size: 14px;\n          box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);\n          max-width: 100%;\n          white-space: normal;\n          overflow-wrap: break-word;\n          word-break: normal;\n          hyphens: none;\n        }\n        .${pointerContainerId}-right #copilot-info-bubble-content {\n          margin-top: 30px;\n          margin-left: 0px;\n          margin-right: 5px;\n        }\n        .click-wave {\n          position: absolute;\n          width: 34px;\n          height: 34px;\n          border-radius: 50%;\n          background-color: rgba(0, 0, 0, 0.5);\n          pointer-events: none;\n          z-index: 2147483611;\n          animation: click-wave-animation 0.8s ease forwards;\n        }\n        @keyframes click-wave-animation {\n          0% {\n            transform: scale(0.2);\n            opacity: 1;\n          }\n          100% {\n            transform: scale(2);\n            opacity: 0;\n          }\n        }\n        @keyframes slideInFromTop {\n          0% {\n            transform: translateY(-100%);\n            opacity: 0;\n          }\n          100% {\n            transform: translateY(0);\n            opacity: 1;\n          }\n        }\n        .${copilotJoinedContainerId} {\n          position: fixed;\n          top: 20px;\n          right: 20px;\n          z-index: 2147483610;\n          background: #fff;\n          padding: 6px;\n          border-radius: 10px;\n          box-shadow: 0 0 20px 0 #C294F2;\n          display: flex;\n          align-items: center;\n          gap: 8px;\n          border: 1px solid rgba(192, 146, 242, 0.5);\n          animation: slideInFromTop 0.5s ease-out forwards;\n        }\n        .${copilotJoinedContainerId} span {\n          font-size: 13px;\n          color: #000;\n          font-family: sans-serif;\n        }\n        .${copilotJoinedContainerId}-avatar {\n          width: 24px;\n          height: 24px;\n          flex-shrink: 0;\n          border-radius: 6px;\n        }\n        .${copilotJoinedContainerId}-mute {\n          display: flex;\n          align-items: center;\n          justify-content: center;\n        }\n        .${copilotJoinedContainerId}-mute svg {\n          width: 20px;\n          height: auto;\n          cursor: pointer;\n          animation: pulsate 2s infinite;\n        }\n        .${copilotJoinedContainerId}-mute svg:hover {\n          opacity: 0.8;\n        }\n        .${copilotJoinedContainerId}-dismiss {\n          display: flex;\n          align-items: center;\n          justify-content: center;\n          padding-right: 3px;\n        }\n        .${copilotJoinedContainerId}-dismiss svg {\n          width: 15px;\n          height: auto;\n          cursor: pointer;\n        }\n        .${copilotJoinedContainerId}-dismiss svg:hover {\n          opacity: 0.8;\n        }\n        @keyframes pulsate {\n          0% {\n            transform: scale(1);\n            opacity: 1;\n          }\n          50% {\n            transform: scale(1.1);\n            opacity: 0.8;\n          }\n          100% {\n            transform: scale(1);\n            opacity: 1;\n          }\n        }\n        @keyframes glCoFadeIn {\n          0% {\n            opacity: 0;\n          }\n          100% {\n            opacity: 1;\n          }\n        }\n        @keyframes glCoFadeOut {\n          0% {\n            opacity: 1;\n          }\n          100% {\n            opacity: 0;\n          }\n        }\n\n        .gleap-audio-unmute-modal-overlay {\n          position: fixed;\n          top: 0;\n          left: 0;\n          width: 100vw;\n          height: 100vh;\n          background-color: rgba(0, 0, 0, 0.5);\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          z-index: 2147483620;\n        }\n\n        .gleap-audio-unmute-modal {\n          background-color: #fff;\n          padding: 20px;\n          border-radius: 8px;\n          box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);\n          text-align: center;\n          max-width: 90%;\n          width: 400px;\n        }\n\n        .gleap-audio-unmute-modal p {\n          margin-bottom: 20px;\n          font-size: 16px;\n          line-height: 22px;\n          font-weight: normal;\n        }\n\n        .gleap-audio-unmute-button {\n          background: ${primaryColor};\n          color: ${contrastColor};\n          outline: none;\n          border: none;\n          padding: 10px 14px;\n          border-radius: 12px;\n          font-size: 14px;\n          font-weight: bold;\n          cursor: pointer;\n        }\n\n        .gleap-audio-unmute-button:hover {\n          opacity: 0.8;\n        }\n\n        .gleap-tour-continue-button {\n          color: ${primaryColor};\n          text-decoration: none;\n          cursor: pointer;\n          font-size: 14px;\n          font-weight: bold;\n          border: none;\n          background: none;\n          padding: 0;\n          margin: 0;\n          margin-left: 20px;\n        }\n\n        .gleap-tour-continue-button:hover {\n          opacity: 0.8;\n        }\n\n        body.gl-copilot-fade-out::before,\n        body.gl-copilot-fade-out::after,\n        body.gl-copilot-fade-out #${copilotJoinedContainerId} {\n          animation: glCoFadeOut 0.8s ease-out forwards;\n        }\n        ${\n          (this.productTourData?.playVoice ?? true)\n            ? ''\n            : `\n          .${copilotJoinedContainerId}-mute {\n            display: none;\n          }\n        `\n        }\n        ${\n          this.productTourData.gradient\n            ? `body::before {\n          content: \"\";\n          position: fixed;\n          top: 0;\n          left: 0;\n          width: 100vw;\n          height: 100vh;\n          pointer-events: all;\n          z-index: 2147483609;\n          box-sizing: border-box;\n          border: 18px solid transparent;\n          filter: blur(25px);\n          border-image-slice: 1;\n          border-image-source: linear-gradient(45deg, #ED5587, #FBE6A9, #a6e3f8, #C294F2);\n          animation: glCoFadeIn 1.5s ease-out forwards;\n        }\n  \n        body::after {\n          content: \"\";\n          position: fixed;\n          top: 0;\n          left: 0;\n          width: 100vw;\n          height: 100vh;\n          pointer-events: all;\n          z-index: 2147483609;\n          opacity: 0.5;\n          box-sizing: border-box;\n          border: 3px solid transparent;\n          border-image-slice: 1;\n          border-image-source: linear-gradient(45deg, #ED5587, #FBE6A9, #a6e3f8, #C294F2);\n          animation: glCoFadeIn 1.5s ease-out forwards;\n        }`\n            : `body::after {\n          content: \"\";\n          position: fixed;\n          top: 0;\n          left: 0;\n          width: 100vw;\n          height: 100vh;\n          pointer-events: all;\n          z-index: 2147483609;\n          opacity: 0;\n        }`\n        }\n      `;\n      document.head.appendChild(styleNode);\n    }\n\n    const container = document.createElement('div');\n    container.id = pointerContainerId;\n    container.style.opacity = 0;\n    // Cache the pointer container.\n    this._pointerContainer = container;\n\n    const svgMouse = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n    svgMouse.setAttribute('viewBox', '0 0 380 476');\n    svgMouse.innerHTML =\n      '<path d=\"M352.595 268.315L352.581 268.302L352.566 268.29L78.6092 24.7278C71.6245 18.433 62.5487 15 53.2 15C32.1157 15 15 32.1157 15 53.2V424C15 444.34 31.4714 461 52 461C62.6797 461 72.8089 456.467 79.8863 448.38C79.8871 448.379 79.8879 448.378 79.8886 448.378L180.804 333.1H327.9C348.384 333.1 365 316.484 365 296C365 285.404 360.46 275.344 352.595 268.315Z\" fill=\"black\" stroke=\"white\" stroke-width=\"30\"/>';\n\n    const infoBubble = document.createElement('div');\n    infoBubble.id = 'copilot-info-bubble';\n    infoBubble.innerHTML = `<div id='copilot-info-bubble-content-container'><div id='copilot-info-bubble-content'></div></div>`;\n\n    const copilotInfoContainer = document.createElement('div');\n    copilotInfoContainer.id = copilotJoinedContainerId;\n    copilotInfoContainer.classList.add(copilotJoinedContainerId);\n    copilotInfoContainer.innerHTML = `\n      <img class=\"${copilotJoinedContainerId}-avatar\" src=\"${this.productTourData?.kaiAvatar}\" />\n      <span>${this.productTourData?.kaiSlug}</span>\n      <div class=\"${copilotJoinedContainerId}-mute\">\n        ${loadIcon(this.audioMuted ? 'unmute' : 'mute')}\n      </div>\n      ${\n        this.productTourData?.allowClose\n          ? `<div class=\"${copilotJoinedContainerId}-dismiss\">\n               ${loadIcon('dismiss')}\n             </div>`\n          : ''\n      }\n    `;\n    document.body.appendChild(copilotInfoContainer);\n\n    const self = this;\n\n    document.querySelector(`.${copilotJoinedContainerId}-mute`).addEventListener('click', () => {\n      this.toggleAudio(!this.audioMuted);\n    });\n\n    if (this.productTourData?.allowClose) {\n      document.querySelector(`.${copilotJoinedContainerId}-dismiss`).addEventListener('click', () => {\n        this.completeTour(false);\n      });\n    }\n\n    container.appendChild(svgMouse);\n    container.appendChild(infoBubble);\n    document.body.appendChild(container);\n  }\n\n  start() {\n    if (typeof window === 'undefined') return;\n    if (this.disabled) return;\n\n    const config = this.productTourData;\n    if (!config) return;\n    canPlayAudio().then((supported) => {\n      this.audioMuted = !supported;\n      this.setupCopilotTour();\n\n      if (this.audioMuted && config?.showUnmuteModal) {\n        this.showAudioUnmuteModal();\n      } else {\n        setTimeout(() => {\n          this.renderNextStep();\n        }, 1500);\n      }\n    });\n  }\n\n  showAudioUnmuteModal() {\n    // Create the overlay element\n    const modalOverlay = document.createElement('div');\n    modalOverlay.classList.add('gleap-audio-unmute-modal-overlay');\n\n    // Create the modal container element\n    const modal = document.createElement('div');\n    modal.classList.add('gleap-audio-unmute-modal');\n\n    // Create and add the modal message\n    const message = document.createElement('p');\n    message.textContent = this.productTourData?.unmuteModalTitle;\n    modal.appendChild(message);\n\n    // Create the \"Unmute Audio\" button\n    const unmuteButton = document.createElement('button');\n    unmuteButton.classList.add('gleap-audio-unmute-button');\n    unmuteButton.textContent = this.productTourData?.unmuteModalButton;\n    unmuteButton.addEventListener('click', () => {\n      this.toggleAudio(false);\n      if (modalOverlay.parentNode) {\n        modalOverlay.parentNode.removeChild(modalOverlay);\n      }\n      setTimeout(() => {\n        this.renderNextStep();\n      }, 1000);\n    });\n    modal.appendChild(unmuteButton);\n\n    // Create the \"Start Anyway\" button\n    const startAnywayButton = document.createElement('button');\n    startAnywayButton.classList.add('gleap-tour-continue-button');\n    startAnywayButton.textContent = this.productTourData?.unmuteModalContinue;\n    startAnywayButton.addEventListener('click', () => {\n      if (modalOverlay.parentNode) {\n        modalOverlay.parentNode.removeChild(modalOverlay);\n      }\n      setTimeout(() => {\n        this.renderNextStep();\n      }, 1000);\n    });\n    modal.appendChild(startAnywayButton);\n\n    // Build the modal and attach it to the DOM\n    modalOverlay.appendChild(modal);\n    document.body.appendChild(modalOverlay);\n  }\n\n  completeTour(success = true) {\n    if (typeof window === 'undefined') return;\n    this.cleanup();\n    if (this.onCompleteCallback) {\n      this.onCompleteCallback(success);\n    }\n  }\n\n  renderNextStep() {\n    if (typeof window === 'undefined') return;\n    if (this.disabled) return;\n\n    const self = this;\n    const config = this.productTourData;\n    const steps = config.steps;\n    if (this.currentActiveIndex >= steps.length) {\n      setTimeout(() => {\n        this.completeTour();\n      }, 500);\n      return;\n    }\n    const currentStep = steps[this.currentActiveIndex];\n    const handleStep = (element) => {\n      this._pointerContainer.style.display = 'flex';\n      if (currentStep.selector && currentStep.selector.length > 0 && !element) {\n        this.completeTour(false);\n        return;\n      }\n      const gotToNextStep = () => {\n        if (currentStep.mode === 'INPUT' && element) {\n          function proceedClickmode() {\n            document.querySelector(`#${pointerContainerId}`).classList.remove('copilot-pointer-container-clickmode');\n            element.classList.remove('gleap-input-highlight');\n            document.getElementById(pointerContainerId).style.display = 'none';\n            self.currentActiveIndex++;\n            self.storeUncompletedTour();\n            self.renderNextStep();\n          }\n          const inputModeType = currentStep.inputType ?? 'default';\n          if (inputModeType === 'default') {\n            function handleInputEvent(e) {\n              if (e?.target?.value?.length === 0) return;\n              const cursor = document.getElementById(`copilot-info-bubble-content`);\n              if (!cursor) return;\n              cursor.innerHTML = `${GleapTranslationManager.translateText(\n                'next'\n              )} <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\">\n  <path fill=\"currentColor\" d=\"M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z\"/>\n</svg>`;\n              cursor.addEventListener('click', proceedClickmode, {\n                once: true,\n              });\n              element.classList.add('gleap-input-highlight');\n              document.querySelector(`#${pointerContainerId}`).classList.add('copilot-pointer-container-clickmode');\n              element.removeEventListener('input', handleInputEvent);\n            }\n            element.addEventListener('input', handleInputEvent, {\n              once: false,\n            });\n            if (element.hasAttribute('contenteditable')) {\n              element.addEventListener('keyup', handleInputEvent, {\n                once: false,\n              });\n            }\n            element.addEventListener(\n              'blur',\n              () => {\n                element.focus();\n              },\n              { once: true }\n            );\n            element.focus();\n          } else {\n            const inputValue = currentStep.inputValue ?? '';\n            let index = 0;\n            function typeCharacter() {\n              if (index < inputValue.length) {\n                element.value += inputValue[index];\n                index++;\n                setTimeout(typeCharacter, 100);\n              } else {\n                setTimeout(() => {\n                  proceedClickmode();\n                }, 1200);\n              }\n            }\n            typeCharacter();\n          }\n          return;\n        }\n        self.currentActiveIndex++;\n        self.storeUncompletedTour();\n        if (currentStep.mode === 'CLICK' && element) {\n          const rect = element.getBoundingClientRect();\n          const scrollX = window.scrollX || 0;\n          const scrollY = window.scrollY || 0;\n          performClickAnimation(rect.left + rect.width / 2 + scrollX, rect.top + rect.height / 2 + scrollY);\n          element.click();\n        }\n        self.renderNextStep();\n      };\n\n      this.updatePointerPosition(element, currentStep);\n      const message = currentStep?.message ? htmlToPlainText(currentStep.message) : '🤔';\n      document.getElementById(`copilot-info-bubble-content`).textContent = message;\n      this._pointerContainer.style.opacity = 1;\n      const readTime = estimateReadTime(message);\n      const continueWithNoAudio = () => {\n        this.currentAudio = undefined;\n        setTimeout(() => {\n          gotToNextStep();\n        }, readTime * 1000);\n      };\n      if (currentStep.voice && currentStep.voice.length > 0) {\n        this.currentAudio = new Audio(currentStep.voice);\n        if (this.audioMuted) {\n          this.currentAudio.muted = true;\n        }\n        this.currentAudio.addEventListener('ended', () => {\n          setTimeout(() => {\n            gotToNextStep();\n          }, 1000);\n        });\n        this.currentAudio\n          .play()\n          .then(() => {})\n          .catch((error) => {\n            continueWithNoAudio();\n          });\n      } else {\n        continueWithNoAudio();\n      }\n    };\n\n    const elementPromise = currentStep.selector ? waitForElement(currentStep.selector) : Promise.resolve(null);\n    elementPromise.then(handleStep).catch(() => handleStep(null));\n  }\n}\n","import { loadIcon } from './UI';\nimport GleapTours from './GleapTours';\nimport Gleap, { GleapEventManager, GleapSession } from './Gleap';\nimport GleapCopilotTours from './GleapCopilotTours';\n\nconst localStorageKey = 'gleap-tour-data';\n\nexport default class GleapProductTours {\n  productTourData = undefined;\n  productTourId = undefined;\n  unmuted = false;\n  currentActiveIndex = undefined;\n  gleapTourObj = undefined;\n  disabled = false;\n\n  // GleapReplayRecorder singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new GleapProductTours();\n      return this.instance;\n    } else {\n      return this.instance;\n    }\n  }\n\n  disable() {\n    if (this.gleapTourObj) {\n      this.gleapTourObj.destroy();\n    }\n\n    // Disable copilot tours.\n    GleapCopilotTours.getInstance().disable();\n\n    this.gleapTourObj = undefined;\n    this.disabled = true;\n  }\n\n  constructor() {\n    const self = this;\n\n    if (typeof window !== 'undefined') {\n      const beforeUnloadListener = (event) => {\n        if (\n          !self?.disabled &&\n          self?.productTourId &&\n          self?.productTourData &&\n          self?.productTourData?.tourType !== 'cobrowse'\n        ) {\n          self.storeUncompletedTour();\n        }\n      };\n\n      if (typeof window !== 'undefined') {\n        window.addEventListener('beforeunload', beforeUnloadListener);\n      }\n    }\n  }\n\n  startWithConfig(tourId, config, delay = 0, manually = false) {\n    // Prevent multiple tours from being started.\n    if (this.productTourId || this.disabled) {\n      return;\n    }\n\n    this.productTourId = tourId;\n    this.productTourData = config;\n    this.currentActiveIndex = 0;\n\n    if (manually) {\n      this.start();\n    } else {\n      const self = this;\n\n      // Validate product tour.\n      GleapSession.getInstance()\n        .validateProductTour(tourId)\n        .then(() => {\n          if (delay > 0) {\n            return setTimeout(() => {\n              self.start();\n            }, delay);\n          } else {\n            return this.start();\n          }\n        })\n        .catch((error) => {\n          console.log('Product tour is not live. Cleaning up...');\n          console.error(error);\n\n          self.onComplete(false);\n        });\n    }\n  }\n\n  onComplete(success = true) {\n    const comData = {\n      tourId: this.productTourId,\n    };\n\n    if (success) {\n      GleapEventManager.notifyEvent('productTourCompleted', comData);\n      Gleap.trackEvent(`tour-${this.productTourId}-completed`, comData);\n    } else {\n      GleapEventManager.notifyEvent('productTourQuit', comData);\n      Gleap.trackEvent(`tour-${this.productTourId}-quit`, comData);\n    }\n\n    // Clear data.\n    if (this.gleapTourObj) {\n      this.gleapTourObj.destroy();\n    }\n\n    this.gleapTourObj = undefined;\n    this.productTourData = undefined;\n    this.productTourId = undefined;\n    this.currentActiveIndex = undefined;\n    this.clearUncompletedTour();\n  }\n\n  loadUncompletedTour() {\n    try {\n      const data = JSON.parse(localStorage.getItem(localStorageKey));\n      if (data?.tourData && data?.tourId) {\n        return data;\n      }\n    } catch (e) {}\n\n    return null;\n  }\n\n  storeUncompletedTour() {\n    if (this.productTourId && this.productTourData) {\n      try {\n        let data = JSON.parse(\n          JSON.stringify({\n            tourData: this.productTourData,\n            tourId: this.productTourId,\n          })\n        );\n\n        data.tourData.steps = data.tourData.steps.slice(this.currentActiveIndex || 0, data.tourData.steps.length);\n\n        localStorage.setItem(localStorageKey, JSON.stringify(data));\n      } catch (e) {}\n    } else {\n      this.clearUncompletedTour();\n    }\n  }\n\n  clearUncompletedTour() {\n    try {\n      localStorage.removeItem(localStorageKey);\n    } catch (e) {}\n  }\n\n  start() {\n    const config = this.productTourData;\n    if (!config) {\n      return;\n    }\n\n    if (config.tourType === 'cobrowse') {\n      return GleapCopilotTours.getInstance().startWithConfig(this.productTourId, config, (success) => {\n        this.onComplete(success);\n      });\n    }\n\n    this.unmuted = false;\n    const steps = config.steps;\n    const self = this;\n\n    var driverSteps = [];\n\n    for (let i = 0; i < steps.length; i++) {\n      const step = steps[i];\n\n      const isClickMode = step.mode === 'CLICK';\n      const isInputMode = step.mode === 'INPUT';\n      const isInteractionMode = step.mode === 'INTERACTION';\n\n      var message = '';\n      var hasSender = false;\n\n      if (step.type === 'video-pointer') {\n        message = `<div class=\"gleap-tour-video\">\n              <video class=\"gleap-tour-video-obj\" muted autoplay>\n                <source src=\"${step.videoUrl}\" type=\"video/mp4\">\n              </video>\n              <div class=\"gleap-tour-video-playpause\">${loadIcon('unmute')}</div>\n            </div>`;\n      } else {\n        var senderHTML = ``;\n\n        if (config.sender && config.sender.firstName) {\n          hasSender = true;\n          senderHTML = `<div class=\"gleap-tour-sender\">\n                <div class=\"gleap-tour-sender-image\" style=\"background-image: url('${config.sender.profileImageUrl}');\"></div>\n                <div class=\"gleap-tour-sender-name\">${config.sender.firstName}</div>\n              </div>`;\n        }\n\n        message = `${senderHTML}<div class=\"gleap-tour-message\">${step.message}</div>`;\n      }\n\n      const disableInteraction = !isClickMode && !isInputMode && !isInteractionMode;\n\n      var driverStep = {\n        disableActiveInteraction: disableInteraction,\n        mode: step.mode,\n        popover: {\n          description: message,\n          popoverClass: `gleap-tour-popover-${step.type} ${\n            !hasSender && 'gleap-tour-popover-no-sender'\n          } ${config.allowClose && 'gleap-tour-popover-can-close'}`,\n          ...(isClickMode\n            ? {\n                showButtons: [],\n              }\n            : {}),\n        },\n      };\n      if (step.selector && step.selector.length > 0) {\n        driverStep.element = step.selector;\n      }\n      driverSteps.push(driverStep);\n    }\n\n    var buttons = ['next', 'close'];\n\n    if (config.backButton) {\n      buttons.push('previous');\n    }\n\n    function onDocumentClick(evnt) {\n      try {\n        var gleapTourPopover = document.querySelector('.gleap-tour-popover');\n        if (gleapTourPopover && !gleapTourPopover.contains(evnt.target)) {\n          const stepIndex = self.gleapTourObj.getActiveIndex();\n          const step = steps[stepIndex];\n          const element = self.gleapTourObj.getActiveElement();\n\n          if (step?.mode === 'CLICK' && evnt?.target !== element) {\n            const isInsideElement = element.contains(evnt?.target);\n            if (!isInsideElement) {\n              // Ignore clicks outside of the actual element.\n              return;\n            }\n          }\n\n          // Store next step index.\n          self.currentActiveIndex = (self.currentActiveIndex || 0) + 1;\n          self.storeUncompletedTour();\n\n          if (\n            (element && element.tagName === 'INPUT') ||\n            step.mode === 'INPUT' ||\n            step.mode === 'INTERACTION' ||\n            evnt?.target?.id.includes('tooltip-svg')\n          ) {\n            // Prevent.\n          } else {\n            self.gleapTourObj.moveNext();\n          }\n        }\n      } catch (e) {}\n    }\n\n    this.gleapTourObj = GleapTours({\n      showProgress: true,\n      allowKeyboardControl: false,\n      steps: driverSteps,\n      showProgress: steps.length > 1,\n      allowClose: config.allowClose,\n      nextBtnText: config.nextText,\n      doneBtnText: config.doneText,\n      prevBtnText: config.prevText,\n      showButtons: buttons,\n      onHighlightStarted: (element, step, config) => {\n        this.currentActiveIndex = config?.state?.activeIndex;\n        this.storeUncompletedTour();\n      },\n      onElementNotFound: (step) => {\n        document.removeEventListener('click', onDocumentClick);\n\n        this.onComplete(false);\n      },\n      onDestroyStarted: () => {\n        if (!this.gleapTourObj.hasNextStep()) {\n          // Mark as completed.\n          this.onComplete(true);\n        } else {\n          // Mark as quit.\n          this.onComplete(false);\n        }\n\n        document.removeEventListener('click', onDocumentClick);\n      },\n      onPopoverRender: (popoverElement) => {\n        // Fix for images and videos.\n        if (popoverElement) {\n          const mediaElements = document.querySelectorAll(\n            '.gleap-tour-popover-description img, .gleap-tour-popover-description video'\n          );\n\n          const performRequentialRefresh = () => {\n            setTimeout(() => {\n              this.gleapTourObj.refresh();\n            }, 500);\n            setTimeout(() => {\n              this.gleapTourObj.refresh();\n            }, 750);\n          };\n\n          for (let i = 0; i < mediaElements.length; i++) {\n            const mediaElement = mediaElements[i];\n            if (mediaElement.tagName === 'IMG') {\n              mediaElement.addEventListener('load', () => {\n                performRequentialRefresh();\n              });\n              mediaElement.addEventListener('error', () => {\n                performRequentialRefresh();\n              });\n            } else if (mediaElement.tagName === 'VIDEO') {\n              mediaElement.addEventListener('canplaythrough', () => {\n                performRequentialRefresh();\n              });\n              mediaElement.addEventListener('error', () => {\n                performRequentialRefresh();\n              });\n            }\n          }\n        }\n\n        const playingClass = 'gleap-tour-video--playing';\n        const playPauseContainer = document.querySelector('.gleap-tour-video-playpause');\n\n        const videoElement = document.querySelector('.gleap-tour-video-obj');\n        if (videoElement) {\n          const videoContainer = videoElement.closest('.gleap-tour-video');\n\n          if (self.unmuted) {\n            if (videoElement) {\n              videoElement.pause();\n              videoElement.muted = false;\n              videoElement.play();\n              videoContainer.classList.add(playingClass);\n            }\n          }\n\n          videoElement.addEventListener('ended', function () {\n            playPauseContainer.innerHTML = loadIcon('replay');\n            playPauseContainer.classList.add('gleap-tour-video-svg--fullscreen');\n            videoContainer.classList.remove(playingClass);\n          });\n\n          videoElement.addEventListener('play', function () {\n            playPauseContainer.classList.remove('gleap-tour-video-svg--fullscreen');\n          });\n\n          if (playPauseContainer) {\n            playPauseContainer.addEventListener('click', () => clickVideo());\n          }\n\n          const clickVideo = () => {\n            if (videoElement.muted) {\n              self.unmuted = true;\n\n              videoElement.pause();\n              videoElement.currentTime = 0;\n              videoElement.muted = false;\n              videoElement.play();\n\n              playPauseContainer.innerHTML = loadIcon('mute');\n              videoContainer.classList.add(playingClass);\n            } else if (videoElement.paused) {\n              videoElement.muted = false;\n              videoElement.play();\n\n              playPauseContainer.innerHTML = loadIcon('mute');\n              videoContainer.classList.add(playingClass);\n            } else {\n              videoElement.pause();\n              playPauseContainer.innerHTML = loadIcon('unmute');\n              videoContainer.classList.remove(playingClass);\n            }\n          };\n        }\n      },\n    });\n    this.gleapTourObj.drive();\n\n    document.addEventListener('click', onDocumentClick, true);\n  }\n}\n","import AgentNetworkManager from './AgentNetworkManager';\n\n/**\n * Headless agent chat manager with streaming support.\n *\n * Framework-agnostic state manager for AI agent conversations.\n * Uses SSE streaming for real-time token-by-token responses.\n *\n * @example\n * const chat = Gleap.createAgentChat({\n *   agentId: 'abc123',\n *   onChange: ({ messages, isExecuting }) => { ... },\n * });\n * chat.sendMessage('Hello!');\n */\nclass GleapAgentChat {\n  constructor(options = {}) {\n    this._agentId = options.agentId || 'kai';\n    this._context = options.context || null;\n    this._onChange = options.onChange || null;\n    this._onError = options.onError || null;\n    this._onReplyReceived = options.onReplyReceived || null;\n    this._onConversationCreated = options.onConversationCreated || null;\n    this._onToken = options.onToken || null;\n\n    this._messages = [];\n    this._conversationId = options.conversationId || null;\n    this._isExecuting = false;\n    this._error = null;\n    this._destroyed = false;\n    this._abortController = null;\n\n    try {\n      this._networkManager = AgentNetworkManager.getInstance();\n    } catch (e) {\n      this._networkManager = null;\n    }\n  }\n\n  // --- Public API ---\n\n  /**\n   * Send a message to the agent (streaming).\n   * @param {string} content\n   * @returns {Promise<void>}\n   */\n  async sendMessage(content) {\n    const trimmed = (content || '').trim();\n    if (!trimmed || this._isExecuting || this._destroyed) return;\n\n    // Add user message optimistically\n    this._messages = [...this._messages, {\n      id: `user-${Date.now()}`,\n      role: 'user',\n      content: trimmed,\n      createdAt: new Date().toISOString(),\n    }];\n\n    // Add empty streaming assistant message\n    const streamingId = `stream-${Date.now()}`;\n    this._messages = [...this._messages, {\n      id: streamingId,\n      role: 'assistant',\n      content: '',\n      createdAt: new Date().toISOString(),\n      isStreaming: true,\n    }];\n\n    this._isExecuting = true;\n    this._error = null;\n    this._notify();\n\n    // For Kai mode, send full message history since there's no server-side conversation persistence\n    const isKai = this._agentId === 'kai';\n    const messages = isKai\n      ? this._messages\n          .filter((m) => !m.isStreaming && m.content)\n          .map((m) => ({ role: m.role, content: m.content }))\n      : [{ role: 'user', content: trimmed }];\n\n    const body = { messages };\n    if (this._conversationId) body.conversationId = this._conversationId;\n    if (this._context) body.additionalContext = this._context;\n\n    this._abortController = new AbortController();\n    const isNewConversation = !this._conversationId;\n    // Track by index — stable even when id changes\n    const streamingIdx = this._messages.length - 1;\n\n    await this._networkManager.streamAgent(this._agentId, body, {\n      onMeta: (data) => {\n        if (this._destroyed) return;\n        if (data.conversationId) {\n          this._conversationId = data.conversationId;\n          this._networkManager._invalidateMessagesCache(data.conversationId);\n          if (isNewConversation && this._onConversationCreated) {\n            this._onConversationCreated(data.conversationId);\n          }\n        }\n        if (data.runId && this._messages[streamingIdx]) {\n          this._messages[streamingIdx] = { ...this._messages[streamingIdx], id: data.runId };\n        }\n      },\n\n      onToken: (data) => {\n        if (this._destroyed) return;\n        const msg = this._messages[streamingIdx];\n        if (msg) {\n          msg.content += data.content || '';\n        }\n        this._notify();\n        if (this._onToken) this._onToken(data);\n      },\n\n      onDone: (data) => {\n        if (this._destroyed) return;\n        const msg = this._messages[streamingIdx];\n        if (msg) {\n          msg.isStreaming = false;\n          if (data.response && !msg.content) msg.content = data.response;\n        }\n        this._isExecuting = false;\n        this._abortController = null;\n        this._notify();\n        if (this._onReplyReceived) this._onReplyReceived(data);\n      },\n\n      onError: (data) => {\n        if (this._destroyed) return;\n        const msg = this._messages[streamingIdx];\n        if (msg && !msg.content) {\n          this._messages.splice(streamingIdx, 1);\n        } else if (msg) {\n          msg.isStreaming = false;\n        }\n        this._isExecuting = false;\n        this._error = data;\n        this._abortController = null;\n        this._notify();\n        if (this._onError) this._onError(data);\n      },\n\n      onToolStart: () => {},\n      onToolEnd: () => {},\n    }, this._abortController.signal);\n  }\n\n  /** Cancel the current streaming request. */\n  cancelStream() {\n    if (this._abortController) {\n      this._abortController.abort();\n      this._abortController = null;\n    }\n    // Finalize any streaming message\n    this._messages = this._messages.map((m) => m.isStreaming ? { ...m, isStreaming: false } : m);\n    // Remove empty streaming messages\n    this._messages = this._messages.filter((m) => m.content || m.role === 'user');\n    this._isExecuting = false;\n    this._notify();\n  }\n\n  clearMessages() {\n    this._messages = [];\n    this._conversationId = null;\n    this._isExecuting = false;\n    this._error = null;\n    this.cancelStream();\n    AgentNetworkManager.getInstance().clearCache();\n    this._notify();\n  }\n\n  setContext(context) { this._context = context; }\n\n  getState() {\n    return {\n      messages: this._messages,\n      isExecuting: this._isExecuting,\n      error: this._error,\n      conversationId: this._conversationId,\n    };\n  }\n\n  destroy() {\n    this.cancelStream();\n    this._destroyed = true;\n    this._onChange = null;\n    this._onError = null;\n    this._onReplyReceived = null;\n    this._onConversationCreated = null;\n    this._onToken = null;\n  }\n\n  // --- Private ---\n\n  _notify() {\n    if (this._onChange && !this._destroyed) {\n      this._onChange(this.getState());\n    }\n  }\n}\n\nexport default GleapAgentChat;\n","import { injectStyledCSS } from './UI';\nimport GleapNetworkIntercepter from './GleapNetworkIntercepter';\nimport { fixGleapHeight, gleapDataParser, runFunctionWhenDomIsReady } from './GleapHelper';\nimport GleapSession from './GleapSession';\nimport GleapStreamedEvent from './GleapStreamedEvent';\nimport GleapConfigManager from './GleapConfigManager';\nimport GleapFeedback from './GleapFeedback';\nimport GleapFrameManager from './GleapFrameManager';\nimport GleapMetaDataManager from './GleapMetaDataManager';\nimport GleapConsoleLogManager from './GleapConsoleLogManager';\nimport GleapClickListener from './GleapClickListener';\nimport GleapFeedbackButtonManager from './GleapFeedbackButtonManager';\nimport GleapCustomDataManager from './GleapCustomDataManager';\nimport GleapEventManager from './GleapEventManager';\nimport GleapCustomActionManager from './GleapCustomActionManager';\nimport GleapReplayRecorder from './GleapReplayRecorder';\nimport GleapMarkerManager from './GleapMarkerManager';\nimport GleapTranslationManager from './GleapTranslationManager';\nimport GleapShortcutListener from './GleapShortcutListener';\nimport GleapPreFillManager from './GleapPreFillManager';\nimport GleapNotificationManager from './GleapNotificationManager';\nimport GleapAiChatbarManager from './GleapAiChatbarManager';\nimport GleapAgentToolManager from './GleapAgentToolManager';\nimport GleapBannerManager from './GleapBannerManager';\nimport GleapModalManager from './GleapModalManager';\nimport GleapAudioManager from './GleapAudioManager';\nimport GleapTagManager from './GleapTagManager';\nimport GleapAdminManager from './GleapAdminManager';\nimport GleapProductTours from './GleapProductTours';\nimport { checkPageFilter, checkPageRules } from './GleapPageFilter';\nimport { registerGleapChecklist } from './GleapChecklist';\nimport ChecklistNetworkManager from './ChecklistNetworkManager';\nimport { registerGleapAgentComponents } from './GleapAgentConversation';\nimport AgentNetworkManager from './AgentNetworkManager';\nimport GleapAgentChat from './GleapAgentChat';\nimport { parseSSEStream, dispatchSSEEvent } from './GleapSSEParser';\n\nif (\n  typeof window !== 'undefined' &&\n  typeof HTMLCanvasElement !== 'undefined' &&\n  HTMLCanvasElement.prototype &&\n  HTMLCanvasElement.prototype.__originalGetContext === undefined\n) {\n  HTMLCanvasElement.prototype.__originalGetContext = HTMLCanvasElement.prototype.getContext;\n  HTMLCanvasElement.prototype.getContext = function (type, options) {\n    return this.__originalGetContext(type, {\n      ...options,\n      preserveDrawingBuffer: true,\n    });\n  };\n}\n\nif (typeof customElements !== 'undefined' && typeof HTMLElement !== 'undefined' && typeof window !== 'undefined') {\n  registerGleapChecklist();\n  registerGleapAgentComponents();\n}\n\nclass Gleap {\n  static invoked = true;\n  static silentCrashReportSent = false;\n  initialized = false;\n  offlineMode = false;\n  disablePageTracking = false;\n  disableInAppNotifications = false;\n  disableQueryParams = false;\n\n  // Global data\n  globalData = {\n    screenRecordingData: null,\n    webReplay: null,\n    snapshotPosition: {\n      x: 0,\n      y: 0,\n    },\n  };\n\n  // Gleap singleton\n  static instance;\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new Gleap();\n      return this.instance;\n    } else {\n      return this.instance;\n    }\n  }\n\n  /**\n   * Main constructor\n   */\n  constructor() {\n    if (typeof window !== 'undefined') {\n      // Make sure all instances are ready.\n      GleapMetaDataManager.getInstance();\n      GleapConsoleLogManager.getInstance().start();\n      GleapClickListener.getInstance().start();\n      GleapAdminManager.getInstance().start();\n    }\n  }\n\n  /**\n   * Sets the development environment\n   * @param {*} environment\n   */\n  static setEnvironment(environment) {\n    GleapMetaDataManager.getInstance().environment = environment;\n  }\n\n  /**\n   * Set tags to be submitted with each ticket.\n   * @param {*} tags\n   */\n  static setTags(tags) {\n    GleapTagManager.getInstance().setTags(tags);\n  }\n\n  /**\n   * Sets a custom URL handler.\n   * @param {*} urlHandler\n   */\n  static setUrlHandler(urlHandler) {\n    GleapFrameManager.getInstance().setUrlHandler(urlHandler);\n  }\n\n  /**\n   * Active the Gleap offline mode.\n   * @param {*} offlineMode\n   */\n  static setOfflineMode(offlineMode) {\n    const instance = this.getInstance();\n    instance.offlineMode = offlineMode;\n  }\n\n  /**\n   * Disable the in-app notifications.\n   * @param {*} disableInAppNotifications\n   */\n  static setDisableInAppNotifications(disableInAppNotifications) {\n    const instance = this.getInstance();\n    instance.disableInAppNotifications = disableInAppNotifications;\n  }\n\n  /**\n   * Disable the default page tracking.\n   * @param {*} disablePageTracking\n   */\n  static setDisablePageTracking(disablePageTracking) {\n    const instance = this.getInstance();\n    instance.disablePageTracking = disablePageTracking;\n  }\n\n  /**\n   * Revert console log overwrite.\n   */\n  static disableConsoleLogOverwrite() {\n    GleapConsoleLogManager.getInstance().stop();\n  }\n\n  /**\n   * Set frontend-side tools that AI agents (including Kai) can call.\n   * @deprecated Define Frontend tools on your AI agent in the Gleap dashboard\n   * and register their handlers via Gleap.registerAgentTool(name, handler)\n   * instead. setAiTools tools only return a static response to the AI.\n   * @param {Array} tools - Tool definitions with name, description, response, parameters.\n   */\n  static setAiTools(tools) {\n    GleapAgentToolManager.getInstance().setAgentTools(tools);\n    GleapAiChatbarManager.getInstance().sendAgentToolsUpdate();\n    GleapFrameManager.getInstance().sendConfigUpdate();\n  }\n\n  /**\n   * Attaches external network logs.\n   */\n  static attachNetworkLogs(networkLogs) {\n    GleapNetworkIntercepter.getInstance().externalRequests = gleapDataParser(networkLogs);\n  }\n\n  /**\n   * Add entry to logs.\n   * @param {*} message\n   * @param {*} logLevel\n   * @returns\n   */\n  static log(message, logLevel = 'INFO') {\n    GleapConsoleLogManager.getInstance().addLog(message, logLevel);\n  }\n\n  /**\n   * Initializes the SDK\n   * @param {*} sdkKey\n   */\n  static initialize(sdkKey) {\n    const instance = this.getInstance();\n    if (instance.initialized) {\n      console.warn('Gleap already initialized.');\n      return;\n    }\n\n    instance.initialized = true;\n\n    // Start capturing the session replay as early as possible. Capture is\n    // otherwise only kicked off once the config round-trip finishes, which\n    // leaves a window (slow network, uncached first visit) where a user can\n    // open feedback before the recorder is running and submit an empty replay.\n    // If this project has web replays disabled, applyConfig() stops the\n    // recorder again. That transient buffer can't reach a ticket: the feedback\n    // widget (the only thing that emits 'flow-started', which is what snapshots\n    // the buffer) is injected after the config has loaded, i.e. after the stop.\n    try {\n      GleapReplayRecorder.getInstance().startIfNotRunning();\n    } catch (error) {}\n\n    try {\n      fixGleapHeight();\n    } catch (error) {}\n\n    // Start session\n    const sessionInstance = GleapSession.getInstance();\n    sessionInstance.sdkKey = sdkKey;\n    sessionInstance.setOnSessionReady(() => {\n      // Run auto configuration.\n      setTimeout(() => {\n        GleapConfigManager.getInstance()\n          .start()\n          .then(() => {\n            GleapStreamedEvent.getInstance().start();\n\n            runFunctionWhenDomIsReady(() => {\n              // Inject the widget buttons\n              GleapFeedbackButtonManager.getInstance().injectFeedbackButton();\n\n              // Inject the notification container\n              GleapNotificationManager.getInstance().injectNotificationUI();\n\n              // Check for uncompleted tour.\n              Gleap.checkForUncompletedTour();\n\n              // Check for URL params.\n              Gleap.checkForUrlParams();\n\n              // Notify event.\n              GleapEventManager.notifyEvent('initialized');\n            });\n          })\n          .catch(function (err) {\n            console.warn('Failed to initialize Gleap.');\n          });\n      }, 0);\n    });\n    sessionInstance.startSession();\n  }\n\n  static openURL(url, newTab = false) {\n    GleapFrameManager.getInstance().urlHandler(url, newTab);\n  }\n\n  static disableQueryParams(disableQueryParams = true) {\n    this.getInstance().disableQueryParams = disableQueryParams;\n  }\n\n  static checkForUrlParams() {\n    if (this.getInstance().disableQueryParams) {\n      console.log('Query params are disabled.');\n      return;\n    }\n\n    if (typeof window === 'undefined' || !window.location.search) {\n      return;\n    }\n\n    try {\n      const urlParams = new URLSearchParams(window.location.search);\n\n      const widget = urlParams.get('gleap_widget');\n      if (widget && widget.length > 0) {\n        Gleap.open();\n      }\n\n      const conversationFlow = urlParams.get('gleap_conversation');\n      if (conversationFlow && conversationFlow.length > 0) {\n        if (conversationFlow === 'true') {\n          Gleap.startConversation(true);\n        } else {\n          Gleap.startBot(conversationFlow, true);\n        }\n      }\n\n      const feedbackFlow = urlParams.get('gleap_feedback');\n      if (feedbackFlow && feedbackFlow.length > 0) {\n        Gleap.startFeedbackFlow(feedbackFlow);\n      }\n      const surveyFlow = urlParams.get('gleap_survey');\n      const surveyFlowFormat = urlParams.get('gleap_survey_format');\n      if (surveyFlow && surveyFlow.length > 0) {\n        Gleap.showSurvey(surveyFlow, surveyFlowFormat === 'survey_full' ? 'survey_full' : 'survey');\n      }\n      const tourId = urlParams.get('gleap_tour');\n      if (tourId && tourId.length > 0) {\n        var tourDelay = parseInt(urlParams.get('gleap_tour_delay'));\n        if (isNaN(tourDelay)) {\n          tourDelay = 2;\n        }\n\n        setTimeout(() => {\n          Gleap.startProductTour(tourId);\n        }, tourDelay * 1000);\n      }\n    } catch (exp) {}\n  }\n\n  /**\n   * Destroy\n   * @returns\n   */\n  static destroy() {\n    GleapReplayRecorder.getInstance().stop();\n    GleapStreamedEvent.getInstance().stop();\n    GleapFrameManager.getInstance().destroy();\n    GleapFeedbackButtonManager.getInstance().destroy();\n    GleapNotificationManager.getInstance().clearAllNotifications(true);\n    GleapAiChatbarManager.getInstance().destroy();\n    GleapSession.getInstance().clearSession(0, false);\n    GleapBannerManager.getInstance().removeBannerUI();\n\n    // Reset the initialized flag and clear the instance\n    this.instance = null;\n  }\n\n  /**\n   * Close any open banner.\n   */\n  static closeBanner() {\n    GleapBannerManager.getInstance().removeBannerUI();\n  }\n\n  /**\n   * Close any open modal.\n   */\n  static closeModal() {\n    GleapModalManager.getInstance().hideModal();\n  }\n\n  /**\n   * Show the AI bar.\n   */\n  static showAiChatbar() {\n    const instance = GleapAiChatbarManager.getInstance();\n    instance.manuallyHidden = false;\n    instance.manuallyShown = true;\n    instance.show();\n  }\n\n  /**\n   * Hide the AI search.\n   */\n  static hideAiChatbar() {\n    const instance = GleapAiChatbarManager.getInstance();\n    instance.manuallyHidden = true;\n    instance.manuallyShown = false;\n    instance.hide();\n  }\n\n  /**\n   * Start an agent conversation in the inline chatbar.\n   * @param {string} agentId - The agent ID to converse with.\n   * @param {object} [options] - Optional config: { context?, initialQuestion?, initialMessage? }\n   *   - initialQuestion: a customer question delivered into the conversation and answered by the agent.\n   *   - initialMessage: a greeting shown first from the agent (e.g. \"Hey, how can I help you\").\n   *   Also accepts a plain context object for backward compatibility.\n   */\n  static startAgent(agentId, options) {\n    try {\n      GleapAiChatbarManager.getInstance().showWithAgent(agentId, options);\n    } catch (e) {}\n  }\n\n  /**\n   * Set the AI quick actions.\n   * @param {Array<string>} quickActions\n   */\n  static setAiChatbarQuickActions(quickActions) {\n    GleapAiChatbarManager.getInstance().setQuickActions(quickActions);\n  }\n\n  /**\n   * Set the AI chatbar placeholder.\n   * @param {string} placeholder\n   */\n  static setAiChatbarPlaceholder(placeholder) {\n    GleapAiChatbarManager.getInstance().setPlaceholder(placeholder);\n  }\n\n  /**\n   * Enable or disable Gleap session tracking through cookies.\n   * @param {*} useCookies\n   */\n  static setUseCookies(useCookies) {\n    GleapSession.getInstance().useCookies = useCookies;\n  }\n\n  static disableLocalStorage() {\n    GleapSession.getInstance().localStorageDisabled = true;\n  }\n\n  /**\n   * Indentifies the user session\n   * @param {string} userId\n   * @param {*} userData\n   */\n  static identify(userId, userData, userHash) {\n    return GleapSession.getInstance().identifySession(userId, gleapDataParser(userData), userHash);\n  }\n\n  /**\n   * Updates the contact data.\n   * @param {*} userData\n   */\n  static updateContact(userData) {\n    return GleapSession.getInstance().updateSession(gleapDataParser(userData));\n  }\n\n  /**\n   * Clears the current contact.\n   */\n  static clearIdentity() {\n    GleapSession.getInstance().clearSession();\n  }\n\n  /**\n   * Returns the current user session\n   */\n  static getIdentity() {\n    return GleapSession.getInstance().getSession();\n  }\n\n  /**\n   * Returns whether the user is identified or not.\n   */\n  static isUserIdentified() {\n    const session = GleapSession.getInstance().session;\n    if (session && session.userId && session.userId.length > 0) {\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Widget opened status\n   * @returns {boolean} isOpened\n   */\n  static isOpened() {\n    return GleapFrameManager.getInstance().isOpened();\n  }\n\n  /**\n   * Hides any open Gleap dialogs.\n   */\n  static hide() {\n    GleapFrameManager.getInstance().hideWidget();\n  }\n\n  /**\n   * Sets the maximum network request count.\n   */\n  static setMaxNetworkRequests(maxRequests) {\n    GleapNetworkIntercepter.getInstance().setMaxRequests(maxRequests);\n  }\n\n  /**\n   * Sets the maximum network request count.\n   */\n  static startNetworkLogger() {\n    GleapNetworkIntercepter.getInstance().start();\n  }\n\n  /**\n   * Sets the network logger blacklist.\n   * @param {Array} networkLogBlacklist\n   */\n  static setNetworkLogsBlacklist(networkLogBlacklist) {\n    GleapNetworkIntercepter.getInstance().setBlacklist(networkLogBlacklist);\n  }\n\n  /**\n   * Sets the network logger props to ignore.\n   * @param {Array} filters\n   */\n  static setNetworkLogPropsToIgnore(filters) {\n    GleapNetworkIntercepter.getInstance().setFilters(filters);\n  }\n\n  /**\n   * Set custom replay options.\n   * @param {*} options\n   */\n  static setReplayOptions(options) {\n    GleapReplayRecorder.getInstance().setOptions(options);\n  }\n\n  /**\n   * Closes any open Gleap dialogs.\n   * @param {boolean} resetRoutes\n   */\n  static close(resetRoutes = false) {\n    GleapFrameManager.getInstance().hideWidget(resetRoutes);\n  }\n\n  /**\n   * Starts the Gleap flow.\n   */\n  static open() {\n    GleapFrameManager.getInstance().setAppMode('widget');\n    GleapFrameManager.getInstance().showWidget();\n  }\n\n  /**\n   * Track a custom event\n   * @param {string} name\n   * @param {any} data\n   */\n  static trackEvent(name, data) {\n    GleapStreamedEvent.getInstance().logEvent(name, data);\n  }\n\n  /**\n   * Logs a custom event\n   * @param {string} name\n   * @param {any} data\n   * @deprecated Please use trackEvent instead.\n   */\n  static logEvent(name, data) {\n    GleapStreamedEvent.getInstance().logEvent(name, data);\n  }\n\n  /**\n   * Prefills a specific form field.\n   * @param {*} key\n   * @param {*} value\n   */\n  static preFillForm(data) {\n    const cleanedData = gleapDataParser(data);\n    GleapPreFillManager.getInstance().formPreFill = cleanedData;\n    GleapFrameManager.getInstance().sendMessage(\n      {\n        name: 'prefill-form-data',\n        data: cleanedData,\n      },\n      true\n    );\n  }\n\n  /**\n   * Register events for Gleap.\n   * @param {*} eventName\n   * @param {*} callback\n   */\n  static on(eventName, callback) {\n    GleapEventManager.on(eventName, callback);\n  }\n\n  /**\n   * Enable or disable shortcuts\n   * @param {boolean} enabled\n   */\n  static enableShortcuts(enabled) {\n    if (enabled) {\n      GleapShortcutListener.getInstance().start();\n    } else {\n      GleapShortcutListener.getInstance().stop();\n    }\n  }\n\n  /**\n   * Show or hide the feedback button\n   * @param {*} show\n   * @returns\n   */\n  static showFeedbackButton(show) {\n    GleapFeedbackButtonManager.getInstance().toggleFeedbackButton(show);\n  }\n\n  /**\n   * Sets the app version code.\n   * @param {string} appVersionCode\n   */\n  static setAppVersionCode(appVersionCode) {\n    GleapMetaDataManager.setAppVersionCode(appVersionCode);\n  }\n\n  /**\n   * Sets the app version code.\n   * @param {string} appVersionCode\n   */\n  static setAppBuildNumber(appBuildNumber) {\n    GleapMetaDataManager.setAppBuildNumber(appBuildNumber);\n  }\n\n  /**\n   * Set a custom ws api url.\n   * @param {string} wsApiUrl\n   */\n  static setWSApiUrl(wsApiUrl) {\n    GleapSession.getInstance().wsApiUrl = wsApiUrl;\n  }\n\n  /**\n   * Set a custom api url.\n   * @param {string} apiUrl\n   */\n  static setApiUrl(apiUrl) {\n    GleapSession.getInstance().apiUrl = apiUrl;\n  }\n\n  /**\n   * Set a custom banner url.\n   * @param {string} bannerUrl\n   */\n  static setBannerUrl(bannerUrl) {\n    GleapBannerManager.getInstance().setBannerUrl(bannerUrl);\n  }\n\n  /**\n   * Set a custom modal url.\n   * @param {string} modalUrl\n   */\n  static setModalUrl(modalUrl) {\n    GleapModalManager.getInstance().setModalUrl(modalUrl);\n  }\n\n  /**\n   * Set a custom frame api url.\n   * @param {string} frameUrl\n   */\n  static setFrameUrl(frameUrl) {\n    GleapFrameManager.getInstance().frameUrl = frameUrl;\n  }\n\n  /**\n   * This method is used to set ticket attributes programmatically.\n   * @param {*} key The key of the attribute you want to add.\n   * @param {*} value The value to set.\n   */\n  static setTicketAttribute(key, value) {\n    GleapCustomDataManager.getInstance().setTicketAttribute(key, value);\n  }\n\n  /**\n   * This method is used to unset ticket attributes programmatically.\n   * @param {*} key The key of the attribute you want to unset.\n   */\n  static unsetTicketAttribute(key) {\n    GleapCustomDataManager.getInstance().unsetTicketAttribute(key);\n  }\n\n  /**\n   * This method is used to clear ticket attributes programmatically.\n   */\n  static clearTicketAttributes() {\n    GleapCustomDataManager.getInstance().clearTicketAttributes();\n  }\n\n  /**\n   * Set custom data that will be attached to the bug-report.\n   * @param {*} data\n   */\n  static attachCustomData(data) {\n    GleapCustomDataManager.getInstance().attachCustomData(data);\n  }\n\n  /**\n   * Add one key value pair to the custom data object\n   * @param {*} key The key of the custom data entry you want to add.\n   * @param {*} value The custom data you want to add.\n   */\n  static setCustomData(key, value) {\n    GleapCustomDataManager.getInstance().setCustomData(key, value);\n  }\n\n  /**\n   * Remove one key value pair of the custom data object\n   * @param {*} key The key of the custom data entry you want to remove.\n   */\n  static removeCustomData(key) {\n    GleapCustomDataManager.getInstance().removeCustomData(key);\n  }\n\n  /**\n   * Clear the custom data\n   */\n  static clearCustomData() {\n    GleapCustomDataManager.getInstance().clearCustomData();\n  }\n\n  /**\n   * Play or mute the sound.\n   * @param {*} play\n   */\n  static playSound(play) {\n    GleapAudioManager.playSound(play);\n  }\n\n  /**\n   * Show or hide the notification badge count.\n   * @param {boolean} showNotificationBadge show or hide the notification badge\n   *\n   */\n  static showTabNotificationBadge(showNotificationBadge) {\n    const notificationInstance = GleapNotificationManager.getInstance();\n    notificationInstance.showNotificationBadge = showNotificationBadge;\n    notificationInstance.updateTabBarNotificationCount();\n  }\n\n  /**\n   * Override the browser language.\n   * @param {string} language country code with two letters\n   */\n  static setLanguage(language) {\n    GleapTranslationManager.getInstance().setOverrideLanguage(language);\n\n    if (Gleap.getInstance().initialized) {\n      setTimeout(() => {\n        Gleap.getInstance().softReInitialize();\n\n        // Update language for contact.\n        Gleap.updateContact({\n          lang: language,\n        });\n      }, 1000);\n    }\n  }\n\n  /**\n   * Register a callback for agent tool executions.\n   * @deprecated Use Gleap.registerAgentTool(name, handler) with a\n   * dashboard-defined Frontend tool instead.\n   * @param {function} callback - Called with { name, params, result, message, toolCallId } when any tool finishes.\n   */\n  static registerAgentToolAction(callback) {\n    GleapAgentToolManager.getInstance().registerAgentToolAction(callback);\n  }\n\n  /**\n   * Register the handler for a Frontend tool defined on an AI agent in the\n   * Gleap dashboard. The agent calls the handler with the configured\n   * parameters and waits for its return value (string or JSON — JSON is\n   * stringified). Thrown errors are caught and reported back to the AI.\n   * @param {string} name - The tool's runtime name (shown in the dashboard, e.g. 'create-workflow').\n   * @param {function} handler - async (params) => string | object\n   */\n  static registerAgentTool(name, handler) {\n    GleapAgentToolManager.getInstance().registerAgentTool(name, handler);\n  }\n\n  /**\n   * Register custom action\n   * @param {*} action\n   */\n  static registerCustomAction(customAction) {\n    GleapCustomActionManager.registerCustomAction(customAction);\n  }\n\n  /**\n   * Triggers a custom action\n   * @param {*} actionName\n   */\n  static triggerCustomAction(name) {\n    GleapCustomActionManager.triggerCustomAction(name);\n  }\n\n  /**\n   * Sets a custom color scheme.\n   * @param {string} primaryColor\n   */\n  static setStyles(\n    primaryColor,\n    headerColor,\n    buttonColor,\n    backgroundColor = '#ffffff',\n    borderRadius = 20,\n    buttonX = 20,\n    buttonY = 20,\n    buttonStyle = GleapFeedbackButtonManager.FEEDBACK_BUTTON_BOTTOM_LEFT\n  ) {\n    runFunctionWhenDomIsReady(() => {\n      injectStyledCSS(primaryColor, headerColor, buttonColor, borderRadius, backgroundColor, buttonX, buttonY, buttonStyle);\n    });\n  }\n\n  /**\n   * Sends a silent feedback report\n   * @param {*} formData\n   * @param {*} priority\n   * @param {*} excludeData\n   */\n  static sendSilentCrashReport(\n    description = '',\n    priority = 'MEDIUM',\n    excludeData = {\n      screenshot: true,\n      replays: true,\n      attachments: true,\n    }\n  ) {\n    return Gleap.sendSilentCrashReportWithFormData(\n      {\n        description,\n      },\n      priority,\n      excludeData\n    );\n  }\n\n  /**\n   * Sends a silent feedback report\n   * @param {*} formData\n   * @param {*} priority\n   * @param {*} excludeData\n   */\n  static sendSilentCrashReportWithFormData(\n    formData,\n    priority = 'MEDIUM',\n    excludeData = {\n      screenshot: true,\n      replays: true,\n      attachments: true,\n    }\n  ) {\n    if (this.silentCrashReportSent) {\n      return;\n    }\n\n    this.silentCrashReportSent = true;\n    setTimeout(() => {\n      this.silentCrashReportSent = false;\n    }, 10000);\n\n    const excludeDataCleaned = excludeData ? gleapDataParser(excludeData) : {};\n    const sessionInstance = GleapSession.getInstance();\n    if (!sessionInstance.ready) {\n      return;\n    }\n\n    var newFormData = formData ? formData : {};\n    if (sessionInstance.session.email) {\n      newFormData.reportedBy = sessionInstance.session.email;\n    }\n\n    const feedback = new GleapFeedback('CRASH', priority, newFormData, true, excludeDataCleaned);\n    feedback\n      .sendFeedback()\n      .then(() => {})\n      .catch((error) => {});\n  }\n\n  /**\n   * Shows a survey manually.\n   * @param {*} actionType\n   * @param {*} format\n   */\n  static showSurvey(actionType, format = 'survey') {\n    Gleap.startFeedbackFlowWithOptions(\n      actionType,\n      {\n        hideBackButton: true,\n        format,\n      },\n      true\n    );\n  }\n\n  /**\n   * Starts a classic feedback form.\n   */\n  static startClassicForm(formId, showBackButton) {\n    Gleap.startFeedbackFlowWithOptions(formId, {\n      hideBackButton: !showBackButton,\n    });\n  }\n\n  /**\n   * Starts the bug reporting flow.\n   */\n  static startFeedbackFlow(feedbackFlow, showBackButton) {\n    Gleap.startFeedbackFlowWithOptions(feedbackFlow, {\n      hideBackButton: !showBackButton,\n    });\n  }\n\n  /**\n   * Starts the bug reporting flow.\n   */\n  static startFeedbackFlowWithOptions(feedbackFlow, options = {}, isSurvey = false) {\n    const { autostartDrawing, hideBackButton, format } = options;\n    const sessionInstance = GleapSession.getInstance();\n    if (!sessionInstance.ready) {\n      return;\n    }\n\n    // Initially set scroll position\n    Gleap.getInstance().setGlobalDataItem('snapshotPosition', {\n      x: window.scrollX,\n      y: window.scrollY,\n    });\n\n    var action = 'start-feedbackflow';\n    if (isSurvey) {\n      action = 'start-survey';\n    }\n\n    GleapFrameManager.getInstance().setAppMode(isSurvey ? format : 'widget');\n\n    GleapFrameManager.getInstance().sendMessage(\n      {\n        name: action,\n        data: {\n          flow: feedbackFlow,\n          hideBackButton: hideBackButton,\n          format,\n        },\n      },\n      true\n    );\n\n    if (autostartDrawing) {\n      GleapFrameManager.getInstance().showDrawingScreen('screenshot');\n    } else {\n      GleapFrameManager.getInstance().showWidget();\n    }\n  }\n\n  /**\n   * Opens the conversations overview.\n   */\n  static openConversations(showBackButton = true) {\n    GleapFrameManager.getInstance().setAppMode('widget');\n\n    GleapFrameManager.getInstance().sendMessage(\n      {\n        name: 'open-conversations',\n        data: {\n          hideBackButton: !showBackButton,\n        },\n      },\n      true\n    );\n\n    GleapFrameManager.getInstance().showWidget();\n  }\n\n  /**\n   * Opens a conversation\n   */\n  static openConversation(shareToken, showBackButton = true) {\n    if (!shareToken) {\n      return;\n    }\n\n    GleapFrameManager.getInstance().setAppMode('widget');\n\n    GleapFrameManager.getInstance().sendMessage(\n      {\n        name: 'open-conversation',\n        data: {\n          shareToken,\n          hideBackButton: !showBackButton,\n        },\n      },\n      true\n    );\n\n    GleapFrameManager.getInstance().showWidget();\n  }\n\n  /**\n   * Starts a new conversation\n   */\n  static startConversation(showBackButton = true) {\n    Gleap.startBot('', showBackButton);\n  }\n\n  /**\n   * Starts a new conversation and attaches the bot with the given id.\n   */\n  static startBot(botId, showBackButton = true) {\n    GleapFrameManager.getInstance().setAppMode('widget');\n    GleapFrameManager.getInstance().sendMessage(\n      {\n        name: 'start-bot',\n        data: {\n          botId: botId ? botId : '',\n          hideBackButton: !showBackButton,\n        },\n      },\n      true\n    );\n\n    GleapFrameManager.getInstance().showWidget();\n  }\n\n  /**\n   * Starts a new conversation and attaches the bot with the given id.\n   */\n  static askAI(question, showBackButton = true) {\n    GleapFrameManager.getInstance().setAppMode('widget');\n    GleapFrameManager.getInstance().sendMessage(\n      {\n        name: 'ask-ai',\n        data: {\n          question,\n          hideBackButton: !showBackButton,\n        },\n      },\n      true\n    );\n\n    GleapFrameManager.getInstance().showWidget();\n  }\n\n  /**\n   * Send a message to an agent programmatically.\n   * @param {string} agentId\n   * @param {string} message\n   * @param {{ conversationId?: string, additionalContext?: object }} [options={}]\n   * @returns {Promise<{ runId: string, status: string, response: string, conversationId?: string }>}\n   */\n  static sendAgentMessage(agentId, message, options = {}) {\n    if (!agentId || !message) {\n      return Promise.reject(new Error('agentId and message are required.'));\n    }\n\n    const body = {\n      messages: [{ role: 'user', content: message.trim() }],\n    };\n    if (options.conversationId) body.conversationId = options.conversationId;\n    if (options.additionalContext) body.additionalContext = options.additionalContext;\n\n    // Stream under the hood, collect and return full response\n    return new Promise((resolve, reject) => {\n      let fullResponse = '';\n      let conversationId = options.conversationId || null;\n      let runId = null;\n\n      AgentNetworkManager.getInstance().streamAgent(agentId, body, {\n        onMeta: (data) => {\n          if (data.conversationId) conversationId = data.conversationId;\n          if (data.runId) runId = data.runId;\n        },\n        onToken: (data) => {\n          fullResponse += data.content || '';\n          if (options.onToken) options.onToken(data);\n        },\n        onDone: (data) => {\n          resolve({\n            runId: runId || data?.runId,\n            status: data?.status || 'completed',\n            response: fullResponse || data?.response || '',\n            conversationId,\n          });\n        },\n        onError: (data) => { reject(data); },\n        onToolStart: () => {},\n        onToolEnd: () => {},\n      });\n    });\n  }\n\n  /**\n   * Clear agent conversation state from the cache.\n   */\n  static clearAgentConversation() {\n    AgentNetworkManager.getInstance().clearCache();\n  }\n\n  /**\n   * Create a headless agent chat instance.\n   * Framework-agnostic state manager for AI agent conversations.\n   * @param {object} options\n   * @returns {GleapAgentChat}\n   */\n  static createAgentChat(options) {\n    return new GleapAgentChat(options);\n  }\n\n  /**\n   * Opens a help center collection\n   */\n  static openHelpCenterCollection(collectionId, showBackButton = true) {\n    if (!collectionId) {\n      return;\n    }\n\n    GleapFrameManager.getInstance().setAppMode('widget');\n\n    GleapFrameManager.getInstance().sendMessage(\n      {\n        name: 'open-help-collection',\n        data: {\n          collectionId,\n          hideBackButton: !showBackButton,\n        },\n      },\n      true\n    );\n\n    GleapFrameManager.getInstance().showWidget();\n  }\n\n  /**\n   * Opens a help article\n   */\n  static openHelpCenterArticle(articleId, showBackButton = true) {\n    if (!articleId) {\n      return;\n    }\n\n    GleapFrameManager.getInstance().setAppMode('widget');\n\n    GleapFrameManager.getInstance().sendMessage(\n      {\n        name: 'open-help-article',\n        data: {\n          articleId,\n          hideBackButton: !showBackButton,\n        },\n      },\n      true\n    );\n\n    GleapFrameManager.getInstance().showWidget();\n  }\n\n  /**\n   * Opens the help center.\n   */\n  static openHelpCenter(showBackButton = true) {\n    GleapFrameManager.getInstance().setAppMode('widget');\n\n    GleapFrameManager.getInstance().sendMessage(\n      {\n        name: 'open-helpcenter',\n        data: {\n          hideBackButton: !showBackButton,\n        },\n      },\n      true\n    );\n\n    GleapFrameManager.getInstance().showWidget();\n  }\n\n  /**\n   * Search for news articles in the help center\n   */\n  static searchHelpCenter(term, showBackButton = true) {\n    if (!term) {\n      return;\n    }\n\n    GleapFrameManager.getInstance().setAppMode('widget');\n\n    GleapFrameManager.getInstance().sendMessage(\n      {\n        name: 'open-helpcenter-search',\n        data: {\n          term,\n          hideBackButton: !showBackButton,\n        },\n      },\n      true\n    );\n\n    GleapFrameManager.getInstance().showWidget();\n  }\n\n  /**\n   * Opens a news article\n   */\n  static openNewsArticle(id, showBackButton = true) {\n    if (!id) {\n      return;\n    }\n\n    GleapFrameManager.getInstance().setAppMode('widget');\n\n    GleapFrameManager.getInstance().sendMessage(\n      {\n        name: 'open-news-article',\n        data: {\n          id,\n        },\n      },\n      true\n    );\n\n    GleapFrameManager.getInstance().showWidget();\n  }\n\n  /**\n   * Open the checklists overview.\n   */\n  static openChecklists(showBackButton = true) {\n    GleapFrameManager.getInstance().setAppMode('widget');\n\n    GleapFrameManager.getInstance().sendMessage(\n      {\n        name: 'open-checklists',\n        data: {},\n      },\n      true\n    );\n\n    GleapFrameManager.getInstance().showWidget();\n  }\n\n  /**\n   * Starts a new checklist and opens it.\n   */\n  static startChecklist(outboundId, showBackButton = true, sharedKey = undefined) {\n    if (!outboundId) {\n      return false;\n    }\n\n    GleapFrameManager.getInstance().setAppMode('widget');\n    GleapFrameManager.getInstance().sendMessage(\n      {\n        name: 'start-checklist',\n        data: {\n          outboundId: outboundId,\n          hideBackButton: !showBackButton,\n          ...(sharedKey ? { sharedKey: sharedKey } : {}),\n        },\n      },\n      true\n    );\n\n    GleapFrameManager.getInstance().showWidget();\n\n    return true;\n  }\n\n  /**\n   * Open an existing checklist.\n   */\n  static openChecklist(checklistId, showBackButton = true) {\n    if (!checklistId) {\n      return;\n    }\n\n    GleapFrameManager.getInstance().setAppMode('widget');\n    GleapFrameManager.getInstance().sendMessage(\n      {\n        name: 'open-checklist',\n        data: {\n          id: checklistId,\n          hideBackButton: !showBackButton,\n        },\n      },\n      true\n    );\n\n    GleapFrameManager.getInstance().showWidget();\n  }\n\n  /**\n   * Gets the full checklist data by validating the outbound ID and fetching the data.\n   * @param {string} outboundId - The outbound checklist ID to get data for.\n   * @param {string} [sharedKey] - Optional shared key for the checklist.\n   * @returns {Promise<object>} A promise that resolves with the full checklist data.\n   *\n   * Available events for checklist updates (use Gleap.on() to listen):\n   * - 'checklist-loaded': Fired when a checklist is initially loaded\n   * - 'checklist-update': Fired when checklist data is updated\n   * - 'checklist-step-completed': Fired when a step is marked as completed\n   * - 'checklist-completed': Fired when the entire checklist is completed\n   */\n  static getChecklistData(outboundId, sharedKey) {\n    if (!outboundId) {\n      return Promise.reject(new Error('outboundId is required'));\n    }\n\n    const networkManager = ChecklistNetworkManager.getInstance();\n\n    // First validate the checklist to get the internal ID\n    return networkManager.validateChecklist(outboundId, sharedKey).then((internalId) => {\n      // Then fetch the full checklist data\n      return networkManager.fetchChecklist(internalId);\n    });\n  }\n\n  /**\n   * Opens the news overview.\n   */\n  static openNews(showBackButton = true) {\n    GleapFrameManager.getInstance().setAppMode('widget');\n\n    GleapFrameManager.getInstance().sendMessage(\n      {\n        name: 'open-news',\n        data: {\n          hideBackButton: !showBackButton,\n        },\n      },\n      true\n    );\n\n    GleapFrameManager.getInstance().showWidget();\n  }\n\n  /**\n   * Opens the feature requests overview.\n   */\n  static openFeatureRequests(showBackButton = true) {\n    GleapFrameManager.getInstance().setAppMode('widget');\n\n    GleapFrameManager.getInstance().sendMessage(\n      {\n        name: 'open-feature-requests',\n        data: {},\n      },\n      true\n    );\n\n    GleapFrameManager.getInstance().showWidget();\n  }\n\n  isLiveMode() {\n    if (this.offlineMode === true) {\n      return false;\n    }\n\n    var hostname = window.location.hostname;\n    const isLocalHost =\n      ['localhost', '127.0.0.1', '0.0.0.0', '', '::1'].includes(hostname) ||\n      hostname.startsWith('192.168.') ||\n      hostname.startsWith('10.0.') ||\n      hostname.endsWith('.local') ||\n      !hostname.includes('.');\n    return !isLocalHost;\n  }\n\n  softReInitialize() {\n    GleapFrameManager.getInstance().destroy();\n    GleapConfigManager.getInstance()\n      .start()\n      .then(() => {\n        // Update the feedback button.\n        GleapFeedbackButtonManager.getInstance().refresh();\n\n        // Inject the notification container\n        GleapNotificationManager.getInstance().injectNotificationUI();\n      })\n      .catch(function (err) {\n        console.warn('Failed to initialize Gleap.');\n      });\n  }\n\n  /**\n   * Performs an action.\n   * @param {*} action\n   */\n  performActions(actions) {\n    for (let i = 0; i < actions.length; i++) {\n      const action = actions[i];\n      if (action && action.actionType) {\n        if ((action.pageRules?.length > 0 || action.pageFilter) && window && window.location) {\n          const passed = checkPageRules(window.location.href, action);\n\n          if (!passed) {\n            continue;\n          }\n        }\n\n        if (action.actionType === 'notification') {\n          if (action?.data?.checklist?.popupType === 'widget') {\n            Gleap.openChecklist(action.data.checklist.id, true);\n          } else {\n            if (!this.disableInAppNotifications) {\n              Gleap.showNotification(action);\n            }\n          }\n        } else if (action.actionType === 'banner') {\n          Gleap.showBanner(action);\n        } else if (action.actionType === 'modal') {\n          Gleap.showModal(action);\n        } else if (action.actionType === 'tour') {\n          Gleap.startProductTourWithConfig(action.outbound, action.data, false);\n        } else {\n          Gleap.showSurvey(action.actionType, action.format);\n        }\n      }\n    }\n  }\n\n  static startProductTour(tourId, checkStartUrl = false) {\n    const self = this;\n    GleapSession.getInstance()\n      .startProductTourConfig(tourId)\n      .then((config) => {\n        if (checkStartUrl && config?.startURL && !window?.location?.href?.includes(config?.baseURL)) {\n          window.location.href = `${config.startURL}?gleap_tour=${tourId}&gleap_tour_delay=1`;\n          return;\n        }\n\n        self.startProductTourWithConfig(tourId, config, true);\n      })\n      .catch((error) => {});\n  }\n\n  static checkForUncompletedTour() {\n    const tourData = GleapProductTours.getInstance().loadUncompletedTour();\n    if (tourData) {\n      GleapProductTours.getInstance().startWithConfig(tourData.tourId, tourData.tourData, 500);\n    }\n  }\n\n  static startProductTourWithConfig(tourId, config, manually = false) {\n    GleapProductTours.getInstance().startWithConfig(tourId, config, 0, manually);\n  }\n\n  static showBanner(data) {\n    try {\n      GleapBannerManager.getInstance().showBanner(data);\n    } catch (e) {}\n  }\n\n  static showModal(data) {\n    try {\n      GleapModalManager.getInstance().showModal(data);\n    } catch (e) {}\n  }\n\n  static showNotification(data) {\n    GleapNotificationManager.getInstance().showNotification(data);\n  }\n\n  /**\n   * Sets a global data value\n   * @param {*} key\n   * @param {*} value\n   */\n  setGlobalDataItem(key, value) {\n    this.globalData[key] = value;\n  }\n\n  /**\n   * Gets a global data value\n   * @param {*} key\n   * @returns\n   */\n  getGlobalDataItem(key) {\n    return this.globalData[key];\n  }\n\n  /**\n   * Takes the current replay and assigns it to the global data array.\n   */\n  takeCurrentReplay() {\n    const replayData = GleapReplayRecorder.getInstance().getReplayData();\n\n    // Only attach the replay when it actually captured something. A stopped or\n    // not-yet-started recorder returns an empty buffer (no startDate, no\n    // events); attaching that produces a ticket that advertises a web replay\n    // but plays back blank. Leaving webReplay null keeps the ticket honest.\n    const hasReplayData =\n      replayData &&\n      replayData.startDate &&\n      Array.isArray(replayData.events) &&\n      replayData.events.length > 0;\n\n    this.setGlobalDataItem('webReplay', hasReplayData ? replayData : null);\n  }\n}\n\n// Check for unperformed Gleap actions.\nif (typeof window !== 'undefined') {\n  const GleapActions = window.GleapActions;\n  if (GleapActions && GleapActions.length > 0) {\n    for (var i = 0; i < GleapActions.length; i++) {\n      const GLAction = GleapActions[i];\n      if (GLAction && GLAction.e && Gleap[GLAction.e]) {\n        Gleap[GLAction.e].apply(Gleap, GLAction.a);\n      }\n    }\n  }\n}\n\nconst handleGleapLink = (href) => {\n  try {\n    const urlParts = href.split('/');\n    const type = urlParts[2];\n    if (type === 'article') {\n      const identifier = urlParts[3];\n      Gleap.openHelpCenterArticle(identifier, true);\n    }\n\n    if (type === 'collection') {\n      const identifier = urlParts[3];\n      Gleap.openHelpCenterCollection(identifier, true);\n    }\n\n    if (type === 'flow') {\n      const identifier = urlParts[3];\n      Gleap.startFeedbackFlow(identifier, true);\n    }\n\n    if (type === 'survey') {\n      const identifier = urlParts[3];\n      Gleap.showSurvey(identifier);\n    }\n\n    if (type === 'bot') {\n      const identifier = urlParts[3];\n      Gleap.startBot(identifier, true);\n    }\n\n    if (type === 'news') {\n      const identifier = urlParts[3];\n      Gleap.openNewsArticle(identifier, true);\n    }\n\n    if (type === 'checklist') {\n      const identifier = urlParts[3];\n      Gleap.startChecklist(identifier, true, urlParts[4]);\n    }\n\n    if (type === 'tour') {\n      const identifier = urlParts[3];\n      Gleap.startProductTour(identifier);\n    }\n  } catch (e) {\n    console.error('Failed to handle Gleap link: ', href);\n  }\n};\n\nexport {\n  GleapNetworkIntercepter,\n  GleapAudioManager,\n  GleapNotificationManager,\n  GleapAiChatbarManager,\n  GleapBannerManager,\n  GleapModalManager,\n  GleapPreFillManager,\n  GleapShortcutListener,\n  GleapMarkerManager,\n  GleapTranslationManager,\n  GleapReplayRecorder,\n  GleapFeedback,\n  GleapConsoleLogManager,\n  GleapCustomActionManager,\n  GleapEventManager,\n  GleapCustomDataManager,\n  GleapFeedbackButtonManager,\n  GleapClickListener,\n  GleapSession,\n  GleapStreamedEvent,\n  GleapConfigManager,\n  GleapFrameManager,\n  GleapMetaDataManager,\n  GleapTagManager,\n  GleapProductTours,\n  GleapAdminManager,\n  GleapAgentToolManager,\n  AgentNetworkManager,\n  GleapAgentChat,\n  parseSSEStream,\n  dispatchSSEEvent,\n  handleGleapLink,\n};\n\nexport default Gleap;\n","/**\n * Gleap Checklist Web Component\n *\n * Displays an interactive checklist fetched from the Gleap API.\n * Allows users to view steps, mark them as done, trigger actions,\n * and automatically updates based on external events. Includes localization support\n * via GleapTranslationManager.\n *\n * Waits for a Gleap session to be available before initializing and\n * reloads when the session changes (via 'session-updated' event).\n *\n * @element gleap-checklist\n *\n * @attr {string} checklistId - The outbound ID of the checklist to display. Required.\n * @attr {boolean} [info=true] - Whether to display the info section (title, description, sender).\n * @attr {boolean} [progressbar=true] - Whether to display the progress bar.\n * @attr {boolean} [dark=false] - Apply dark mode styling.\n * @attr {boolean} [floating=false] - When set to \"true\", shows a small bubble that expands on click.\n *\n * @cssprop --color-bg - Background color.\n * @cssprop --color-font-title - Title text color.\n * @cssprop --color-font-text - Body text color.\n * @cssprop --color-font-light - Lighter text color.\n * @cssprop --color-primary - Primary accent color.\n * @cssprop --color-primary-light - Light primary color shade.\n * @cssprop --color-primary-contrast - Text color for primary buttons.\n * @cssprop --color-border - Border color.\n * @cssprop --color-gray-light - Light gray background/border color.\n * @cssprop --color-gray-lighter - Even lighter gray background.\n * @cssprop --color-gray-dark - Darker gray text/icon color.\n * @cssprop --color-success - Success color (e.g., for completed items).\n * @cssprop --color-success-light - Contrast color for success elements.\n * @cssprop --radius-sm - Small border radius.\n * @cssprop --radius-lg - Large border radius.\n * @cssprop --radius-full - Full (pill) border radius.\n * @cssprop --shadow-sm - Small box shadow.\n * @cssprop --shadow-md - Medium box shadow.\n * @cssprop --animation-duration - Duration for animations (e.g., accordion).\n * @cssprop --animation-timing - Timing function for animations.\n */\nimport ChecklistNetworkManager from './ChecklistNetworkManager';\nimport Gleap, { GleapConfigManager, GleapSession, GleapTranslationManager, GleapEventManager } from './Gleap';\n\nexport const registerGleapChecklist = () => {\n  if (typeof customElements !== 'undefined' && typeof HTMLElement !== 'undefined' && typeof window !== 'undefined') {\n    class GleapChecklist extends HTMLElement {\n      /** @private {number} */\n      activeStep = -1;\n      /** @private {object|null} */\n      checklistData = null;\n      /** @private {boolean} */\n      _isInitialLoad = false;\n      /** @private {boolean} */\n      _initialActiveSet = false;\n      /** @private {boolean} Flag indicating if the component has loaded data at least once. */\n      _hasLoaded = false;\n      /** @private {boolean} Flag indicating if a Gleap session is currently considered active by the component. */\n      _isSessionReady = false;\n\n      /** @private {Function} */\n      _boundHandleChecklistUpdate = this.handleChecklistUpdate.bind(this);\n      /** @private {Function} */\n      _boundHandleSessionUpdate = this.handleSessionUpdate.bind(this);\n\n      constructor() {\n        super();\n        this.attachShadow({ mode: 'open' });\n        // Ensure NetworkManager instance is created only if Gleap is available\n        try {\n          if (typeof GleapSession !== 'undefined' && typeof ChecklistNetworkManager !== 'undefined') {\n            this._networkManager = ChecklistNetworkManager.getInstance();\n          } else {\n            this._networkManager = null;\n          }\n        } catch (e) {\n          this._networkManager = null;\n        }\n        // Bind click handlers for floating mode.\n        this._boundFloatingLauncherClick = this.handleFloatingLauncherClick.bind(this);\n        this._boundFloatingCloseClick = this.handleFloatingCloseClick.bind(this);\n        this._floatingHideTimeout = null;\n      }\n\n      // --- Observed Attributes ---\n      static get observedAttributes() {\n        return ['checklistId', 'info', 'progressbar', 'dark', 'floating', 'sharedKey'];\n      }\n\n      // --- Lifecycle Callbacks ---\n      connectedCallback() {\n        window.addEventListener('checkListUpdate', this._boundHandleChecklistUpdate);\n        window.addEventListener('session-updated', this._boundHandleSessionUpdate);\n        window.addEventListener('resize', (this._boundResizeHandler = this.handleResize.bind(this)));\n        this._checkSessionAndLoad();\n      }\n\n      disconnectedCallback() {\n        window.removeEventListener('checkListUpdate', this._boundHandleChecklistUpdate);\n        window.removeEventListener('session-updated', this._boundHandleSessionUpdate);\n        window.removeEventListener('resize', this._boundResizeHandler);\n        this.removeFloatingClickListeners();\n        if (this._floatingHideTimeout) {\n          clearTimeout(this._floatingHideTimeout);\n          this._floatingHideTimeout = null;\n        }\n        this.checklistData = null;\n        this.activeStep = -1;\n        this._hasLoaded = false;\n        this._isSessionReady = false;\n        this._initialActiveSet = false;\n        this.renderResponse();\n      }\n\n      handleResize() {\n        this.updateActiveTaskMaxHeight();\n      }\n\n      attributeChangedCallback(name, oldValue, newValue) {\n        if (oldValue !== newValue) {\n          if (name === 'checklistId' && this._isSessionReady) {\n            this.loadChecklist();\n          } else if (name !== 'checklistId' && this._hasLoaded) {\n            if (this.checklistData) {\n              this.renderChecklist(this.checklistData);\n            }\n          }\n        }\n      }\n\n      // --- Session Handling ---\n      _checkSessionAndLoad() {\n        const gleapSessionInstance = this._getGleapSessionInstance();\n        const hasChecklistId = this.getAttribute('checklistId');\n\n        if (gleapSessionInstance.ready && hasChecklistId) {\n          this._isSessionReady = true;\n          this._networkManager = ChecklistNetworkManager.getInstance();\n          this.loadChecklist();\n        } else {\n          this._isSessionReady = false;\n          this._hasLoaded = false;\n          this.checklistData = null;\n          this.activeStep = -1;\n          this._initialActiveSet = false;\n          this.renderResponse();\n        }\n      }\n\n      handleSessionUpdate() {\n        this._checkSessionAndLoad();\n      }\n\n      _getGleapSessionInstance() {\n        try {\n          return typeof GleapSession !== 'undefined' ? GleapSession.getInstance() : null;\n        } catch (e) {\n          return null;\n        }\n      }\n\n      // --- Getters for Configuration ---\n      get infoEnabled() {\n        const attr = this.getAttribute('info');\n        return attr === null || attr.toLowerCase() !== 'false';\n      }\n\n      get progressbarEnabled() {\n        const attr = this.getAttribute('progressbar');\n        return attr === null || attr.toLowerCase() !== 'false';\n      }\n\n      get floatingEnabled() {\n        return this.getAttribute('floating') === 'true';\n      }\n\n      // --- Translation Helpers ---\n      _translate(key, defaultValue = '') {\n        return GleapTranslationManager.translateText(key) || defaultValue;\n      }\n\n      _translateWithVars(key, vars, defaultValue = '') {\n        return GleapTranslationManager.translateTextWithVars(key, vars) || defaultValue;\n      }\n\n      // --- SVG Icons ---\n      getCheckIcon() {\n        return `<svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style=\"display: block;\">\n                    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M20.7071 5.29289C21.0976 5.68342 21.0976 6.31658 20.7071 6.70711L9.70711 17.7071C9.31658 18.0976 8.68342 18.0976 8.29289 17.7071L3.29289 12.7071C2.90237 12.3166 2.90237 11.6834 3.29289 11.2929C3.68342 10.9024 4.31658 10.9024 4.70711 11.2929L9 15.5858L19.2929 5.29289C19.6834 4.90237 20.3166 4.90237 20.7071 5.29289Z\" fill=\"currentColor\"/>\n                  </svg>`;\n      }\n\n      // --- Data Loading and Handling ---\n      loadChecklist() {\n        if (!this._isSessionReady || !this._networkManager) {\n          return;\n        }\n        const checklistId = this.getAttribute('checklistId');\n        if (checklistId) {\n          this.activeStep = -1;\n          this._initialActiveSet = false;\n          this.validateChecklist(checklistId);\n        } else {\n          this.renderResponse();\n          this.checklistData = null;\n          this._hasLoaded = false;\n        }\n      }\n\n      getQueryParams() {\n        const gleapSessionInstance = this._getGleapSessionInstance();\n        if (!gleapSessionInstance?.session) {\n          return '';\n        }\n        const session = gleapSessionInstance.session;\n        let lang = 'en';\n        try {\n          if (typeof GleapTranslationManager !== 'undefined') {\n            lang = GleapTranslationManager.getInstance().getActiveLanguage() || 'en';\n          }\n        } catch (e) {}\n        return `gleapId=${session.gleapId || ''}&gleapHash=${session.gleapHash || ''}&lang=${lang}`;\n      }\n\n      makeRequest(method, url, data, callback) {\n        const gleapSessionInstance = this._getGleapSessionInstance();\n        if (!gleapSessionInstance?.session) {\n          const mockXhr = {\n            readyState: 4,\n            status: 0,\n            responseText: 'Session unavailable',\n            _isMock: true,\n          };\n          callback(mockXhr);\n          return;\n        }\n        const xhr = new XMLHttpRequest();\n        xhr.open(method, url);\n        try {\n          gleapSessionInstance.injectSession(xhr);\n        } catch (e) {}\n        if (data) {\n          xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');\n        }\n        xhr.onreadystatechange = () => {\n          if (xhr.readyState === 4) {\n            callback(xhr);\n          }\n        };\n        xhr.onerror = () => {\n          callback(xhr);\n        };\n        xhr.send(data ? JSON.stringify(data) : null);\n      }\n\n      validateChecklist(outboundId) {\n        if (!this._isSessionReady || !this._networkManager) {\n          return;\n        }\n        this.checklistData = null;\n        this._hasLoaded = false;\n        this.renderResponse();\n        const sharedKey = this.getAttribute('sharedKey');\n\n        this._networkManager\n          .validateChecklist(outboundId, sharedKey)\n          .then((internalId) => {\n            if (!this.isConnected || !this._isSessionReady || !internalId) {\n              return;\n            }\n            this.fetchChecklist(internalId);\n          })\n          .catch((error) => {\n            this.renderResponse();\n            this.checklistData = null;\n            this._hasLoaded = false;\n          });\n      }\n\n      fetchChecklist(checklistId) {\n        if (!this._isSessionReady || !this._networkManager) {\n          return;\n        }\n        this._isInitialLoad = !this._hasLoaded;\n        this._networkManager\n          .fetchChecklist(checklistId)\n          .then((data) => {\n            if (!this.isConnected || !this._isSessionReady || !data) {\n              this._hasLoaded = false;\n              this.checklistData = null;\n              this._checkSessionAndLoad();\n              return;\n            }\n            this.checklistData = data;\n            this._hasLoaded = true;\n            if (data.status === 'done') {\n              this.renderResponse();\n              return;\n            }\n            if (this._isInitialLoad && !this._initialActiveSet) {\n              const steps = data.outbound?.config?.steps || [];\n              const completedSteps = data.completedSteps || [];\n              const firstIncompleteIndex = steps.findIndex((step) => !completedSteps.includes(step.id));\n              this.activeStep = firstIncompleteIndex >= 0 ? firstIncompleteIndex : -1;\n              if (this.activeStep !== -1) {\n                this._initialActiveSet = true;\n              }\n            }\n            this.renderChecklist(this.checklistData);\n\n            // Notify external listeners about the initial checklist load\n            GleapEventManager.notifyEvent('checklist-loaded', {\n              checklistId: this.checklistData.id,\n              outboundId: this.checklistData.outbound?.id,\n              completedSteps: this.checklistData.completedSteps,\n              status: this.checklistData.status,\n              data: this.checklistData,\n            });\n          })\n          .catch((error) => {\n            this.renderResponse();\n            this.checklistData = null;\n            this._hasLoaded = false;\n          });\n      }\n\n      updateChecklist(id, data) {\n        const gleapSessionInstance = this._getGleapSessionInstance();\n        if (!gleapSessionInstance?.session) {\n          return;\n        }\n        const apiUrl = gleapSessionInstance.apiUrl;\n        if (!apiUrl) {\n          return;\n        }\n        const session = gleapSessionInstance.session;\n        const gleapId = session?.gleapId ?? '';\n        const gleapHash = session?.gleapHash ?? '';\n        let lang = 'en';\n        try {\n          if (typeof GleapTranslationManager !== 'undefined') {\n            lang = GleapTranslationManager.getInstance().getActiveLanguage() || 'en';\n          }\n        } catch (e) {}\n        let url = `${apiUrl}/outbound/checklists/${id}`;\n        if (data.checkedStep) {\n          url += `/increment/${data.checkedStep}`;\n        }\n        url += `?gleapId=${gleapId}&gleapHash=${gleapHash}&lang=${lang}`;\n        this.makeRequest('PUT', url, data, (xhr) => {\n          if (xhr._isMock) return;\n          if (!(xhr.status === 200 || xhr.status === 204)) {\n            // Update failed\n          }\n        });\n      }\n\n      // --- External Update Handling ---\n      handleChecklistUpdate(event) {\n        if (!this._hasLoaded || !this.checklistData) {\n          return;\n        }\n        const updateData = event.detail;\n        if (!updateData || updateData.id !== this.checklistData.id) {\n          return;\n        }\n        const previousCompletedSteps = [...(this.checklistData.completedSteps || [])];\n        let dataChanged = false;\n        let activeStepCompleted = false;\n        const currentlyActiveStepIndex = this.activeStep;\n        if (\n          updateData.completedSteps &&\n          JSON.stringify(updateData.completedSteps) !== JSON.stringify(previousCompletedSteps)\n        ) {\n          this.checklistData.completedSteps = [...updateData.completedSteps];\n          dataChanged = true;\n          if (currentlyActiveStepIndex !== -1) {\n            const activeStepId = this.checklistData.outbound?.config?.steps?.[currentlyActiveStepIndex]?.id;\n            if (\n              activeStepId &&\n              this.checklistData.completedSteps.includes(activeStepId) &&\n              !previousCompletedSteps.includes(activeStepId)\n            ) {\n              activeStepCompleted = true;\n            }\n          }\n        }\n        if (updateData.status && updateData.status !== this.checklistData.status) {\n          this.checklistData.status = updateData.status;\n          dataChanged = true;\n        }\n        if (activeStepCompleted) {\n          const steps = this.checklistData.outbound?.config?.steps || [];\n          let nextActiveStep = -1;\n          for (let i = currentlyActiveStepIndex + 1; i < steps.length; i++) {\n            if (!this.checklistData.completedSteps.includes(steps[i].id)) {\n              nextActiveStep = i;\n              break;\n            }\n          }\n          if (this.activeStep !== nextActiveStep) {\n            this.setActiveStep(nextActiveStep);\n          }\n          dataChanged = true;\n        }\n        if (dataChanged) {\n          this.renderChecklist(this.checklistData);\n\n          // Notify external listeners about the checklist update\n          GleapEventManager.notifyEvent('checklist-update', {\n            checklistId: this.checklistData.id,\n            outboundId: this.checklistData.outbound?.id,\n            completedSteps: this.checklistData.completedSteps,\n            status: this.checklistData.status,\n            data: this.checklistData,\n          });\n        }\n      }\n\n      // --- Floating (Click-based) Listeners ---\n      handleFloatingLauncherClick(event) {\n        event.stopPropagation();\n\n        if (this.checklistData.status === 'done') {\n          return;\n        }\n\n        const tasks = this.shadowRoot.querySelector('.checklist-tasks');\n        if (tasks) {\n          tasks.style.display = tasks.style.display === 'block' ? 'none' : 'block';\n        }\n      }\n\n      handleFloatingCloseClick(event) {\n        event.stopPropagation();\n        const tasks = this.shadowRoot.querySelector('.checklist-tasks');\n        if (tasks) {\n          tasks.style.display = 'none';\n        }\n      }\n\n      addFloatingClickListeners() {\n        const launcher = this.shadowRoot.querySelector('.checklist-floating-launcher');\n        if (launcher) {\n          launcher.addEventListener('click', this._boundFloatingLauncherClick);\n        }\n        const header = this.shadowRoot.querySelector('.checklist-floating-header');\n        if (header) {\n          header.addEventListener('click', this._boundFloatingCloseClick);\n        }\n      }\n\n      removeFloatingClickListeners() {\n        const launcher = this.shadowRoot.querySelector('.checklist-floating-launcher');\n        if (launcher) {\n          launcher.removeEventListener('click', this._boundFloatingLauncherClick);\n        }\n        const header = this.shadowRoot.querySelector('.checklist-floating-header');\n        if (header) {\n          header.removeEventListener('click', this._boundFloatingCloseClick);\n        }\n      }\n\n      // --- Rendering Logic ---\n      renderResponse() {\n        this.shadowRoot.innerHTML = '';\n      }\n\n      /**\n       * Renders the floating launcher. When called with the default class (\"checklist-floating\")\n       * it shows a chevron icon; when called with \"checklist-floating-header\" it shows a close icon.\n       */\n      renderFloatingLauncher(outbound, className = 'checklist-floating', renderDoneState = false) {\n        const steps = outbound.config?.steps || [];\n        const completedSteps = this.checklistData?.completedSteps || [];\n        let progress = 0;\n        if (this.progressbarEnabled && steps.length > 0) {\n          const totalSteps = steps.length;\n          const doneSteps = completedSteps.length;\n          progress = totalSteps > 0 ? (doneSteps / totalSteps) * 100 : 0;\n        }\n\n        // Determine the next incomplete step\n        const nextIncompleteStep = steps.find((step) => !completedSteps.includes(step.id));\n        let titleText =\n          steps.length > 0\n            ? nextIncompleteStep\n              ? nextIncompleteStep.title ||\n                this._translateWithVars(\n                  'stepDefaultTitle',\n                  { index: steps.indexOf(nextIncompleteStep) + 1 },\n                  `Step ${steps.indexOf(nextIncompleteStep) + 1}`\n                )\n              : ''\n            : outbound.subject || '';\n\n        let subtitleText =\n          steps.length > 0 ? (nextIncompleteStep ? nextIncompleteStep.description || '' : '') : outbound.message || '';\n\n        if (renderDoneState) {\n          titleText = outbound.config?.successTitle || '';\n          subtitleText = outbound.config?.successMessage || '';\n          progress = 100;\n        }\n\n        const circumference = 2 * Math.PI * 7;\n        const computedOffset = circumference - (progress / 100) * circumference;\n\n        const isHeader = className === 'checklist-floating-header';\n        const icon = isHeader\n          ? `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n               <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n               <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n             </svg>`\n          : `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n               <polyline points=\"6 9 12 15 18 9\"></polyline>\n             </svg>`;\n\n        return `\n          <div part=\"${className}\" class=\"${\n            isHeader ? 'checklist-floating-header' : 'checklist-floating-launcher'\n          } ${renderDoneState ? 'checklist-floating-launcher--done' : ''}\">\n            <div class=\"floating-header\">\n              <div class=\"floating-circular-progress\">\n                <svg viewBox=\"0 0 20 20\">\n                  <circle class=\"track\" cx=\"10\" cy=\"10\" r=\"7\"></circle>\n                  <circle class=\"progress\" cx=\"10\" cy=\"10\" r=\"7\" stroke-dasharray=\"${circumference.toFixed(\n                    2\n                  )}\" stroke-dashoffset=\"${computedOffset.toFixed(2)}\"></circle>\n                </svg>\n              </div>\n              <div class=\"floating-title\">${titleText}</div>\n              ${renderDoneState ? '' : `<span class=\"floating-icon\">${icon}</span>`}\n            </div>\n            <div class=\"floating-subtitle\">${subtitleText}</div>\n          </div>\n        `;\n      }\n\n      renderInfoSection(outbound) {\n        if (!this.infoEnabled || !outbound) return '';\n        const subject = outbound.subject || this._translate('checklistDefaultTitle', 'Checklist');\n        const message = outbound.message || '';\n        let senderHtml = '';\n        if (outbound.sender?.profileImageUrl) {\n          senderHtml = `\n            <div part=\"sender\" class=\"checklists-sender\">\n              <img part=\"sender-image\" src=\"${outbound.sender.profileImageUrl}\" alt=\"${\n                outbound.sender.firstName || 'Sender'\n              }'s profile picture\" style=\"object-fit: cover;\" />\n              <span part=\"sender-name\">${outbound.sender.firstName || ''}</span>\n            </div>`;\n        }\n        return `\n          <div part=\"info\" class=\"checklists-info\">\n            ${subject ? `<div part=\"info-title\" class=\"checklists-title\">${subject}</div>` : ''}\n            ${message ? `<div part=\"info-description\" class=\"checklists-description\">${message}</div>` : ''}\n            ${senderHtml}\n          </div>`;\n      }\n\n      renderProgressSection(steps = [], completedSteps = []) {\n        if (!this.progressbarEnabled || !steps.length) return '';\n        const totalSteps = steps.length;\n        const doneSteps = completedSteps.length;\n        const progress = totalSteps > 0 ? (doneSteps / totalSteps) * 100 : 0;\n        let duration = 0;\n        steps.forEach((step) => {\n          if (!completedSteps.includes(step.id) && step.duration > 0) {\n            duration += step.duration;\n          }\n        });\n        const progressLabel = this._translateWithVars(\n          'taskProgress',\n          { a: doneSteps, b: totalSteps },\n          `${doneSteps} of ${totalSteps} done`\n        );\n        const durationLabel =\n          duration > 0 ? this._translateWithVars('aboutMinutes', { a: duration }, `About ${duration} min left`) : '';\n        return `\n          <div part=\"progress-labels\" class=\"checklist-progress-labels\">\n            <div part=\"progress-label-primary\" class=\"checklist-progress-label\">${progressLabel}</div>\n            ${\n              durationLabel\n                ? `<div part=\"progress-label-secondary\" class=\"checklist-progress-label\">${durationLabel}</div>`\n                : ''\n            }\n          </div>\n          <div part=\"progress-bar\" class=\"checklist-progress-bar\">\n            <div part=\"progress-bar-progress\" class=\"checklist-progress-bar-progress\" style=\"width: ${progress}%;\"></div>\n          </div>`;\n      }\n\n      renderTasks(steps = [], completedSteps = []) {\n        if (!steps || steps.length === 0) return `<p>${this._translate('noStepsDefined', 'No steps defined.')}</p>`;\n        return steps\n          .map((step, index) => {\n            const isTaskDone = completedSteps.includes(step.id);\n            const isActive = this.activeStep === index;\n            const badge = isTaskDone\n              ? `<span part=\"task-badge\" class=\"checklist-task-header--badge checklist-task-header--badge-done\">${this.getCheckIcon()}</span>`\n              : `<span part=\"task-badge\" class=\"checklist-task-header--badge\">${index + 1}</span>`;\n            const stepTitle =\n              step.title || this._translateWithVars('stepDefaultTitle', { index: index + 1 }, `Step ${index + 1}`);\n            const stepDescription = step.description || '';\n            const actionButtonText = step.actionTitle || this._translate('actionDefaultTitle', 'Action');\n            const actionHtml =\n              step.action && step.action !== 'none'\n                ? `<div part=\"task-action\" class=\"checklist-task-body-action\" data-action-index=\"${index}\">\n                      <button type=\"button\" class=\"action-button form-send-button\">${actionButtonText}</button>\n                   </div>`\n                : '';\n            const markDoneLabel = this._translate('markAsDone', 'Mark as done');\n            const markDoneHtml =\n              step.allowMarkDone && !isTaskDone\n                ? `<div part=\"task-mark-done\" class=\"checklist-task-body-markdone\" data-markdone-index=\"${index}\">\n                      ${this.getCheckIcon()}\n                      <div class=\"checklist-task-body-markdone-label\">${markDoneLabel}</div>\n                   </div>`\n                : '';\n            const taskClasses = [\n              'checklist-task',\n              isTaskDone ? 'checklist-task--done' : '',\n              isActive ? 'checklist-task--active' : '',\n            ]\n              .filter(Boolean)\n              .join(' ');\n            return `\n              <div part=\"task\" class=\"${taskClasses}\" data-task-index=\"${index}\">\n                <div part=\"task-header\" class=\"checklist-task-header\" role=\"button\" aria-expanded=\"${isActive}\" aria-controls=\"task-body-${index}\">\n                  ${badge}\n                  <div part=\"task-header-title\" class=\"checklist-task-header--title\">${stepTitle}</div>\n                  <span part=\"task-header-chevron\" class=\"checklist-task-header--chevron\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                      <polyline points=\"6 9 12 15 18 9\"></polyline>\n                    </svg>\n                  </span>\n                </div>\n                <div part=\"task-body\" class=\"checklist-task-body\" id=\"task-body-${index}\">\n                  <div part=\"task-body-inner\" class=\"checklist-task-body-inner\">\n                    ${\n                      stepDescription\n                        ? `<div part=\"task-body-content\" class=\"checklist-task-body-content\">${stepDescription}</div>`\n                        : ''\n                    }\n                    ${actionHtml}\n                    ${markDoneHtml}\n                  </div>\n                </div>\n              </div>`;\n          })\n          .join('');\n      }\n\n      renderChecklist(data) {\n        if (!this._hasLoaded || !data || !data.outbound) {\n          this._checkSessionAndLoad();\n          return;\n        }\n        const { outbound } = data;\n        const steps = outbound.config?.steps || [];\n        const completedSteps = data.completedSteps || [];\n        const isDone = data.status === 'done' || (steps.length > 0 && completedSteps.length >= steps.length);\n        let content = '';\n        if (isDone) {\n          const successTitle = outbound.config?.successTitle || '';\n          const successMessage = outbound.config?.successMessage || '';\n          if (this.floatingEnabled) {\n            content = this.renderFloatingLauncher(outbound, 'checklist-floating-launcher', true);\n          } else {\n            content = `\n              <div part=\"content\" class=\"checklists-content checklists-content--done\">\n                <div part=\"success-icon\" class=\"checklists-success-icon\">\n                  <span part=\"success-icon-circle\" class=\"checklists-success-icon--circle\">${this.getCheckIcon()}</span>\n                </div>\n                <div part=\"success-title\" class=\"checklists-title\">${successTitle}</div>\n                <div part=\"success-description\" class=\"checklists-description\">${successMessage}</div>\n              </div>`;\n          }\n          if (this.activeStep !== -1) this.activeStep = -1;\n        } else {\n          content = `\n            <div part=\"content\" class=\"checklists-content\">\n              ${!this.floatingEnabled ? this.renderInfoSection(outbound) : ''}\n              ${!this.floatingEnabled ? this.renderProgressSection(steps, completedSteps) : ''}\n              ${this.floatingEnabled ? this.renderFloatingLauncher(outbound) : ''}\n              <div part=\"tasks\" class=\"checklist-tasks\">\n                ${this.floatingEnabled ? this.renderFloatingLauncher(outbound, 'checklist-floating-header') : ''}\n                ${this.renderTasks(steps, completedSteps)}\n              </div>\n            </div>`;\n        }\n\n        const flowConfig = GleapConfigManager.getInstance().getFlowConfig();\n        const primaryColor = flowConfig.color ? flowConfig.color : '#485BFF';\n\n        const styles = `\n          <style>\n            :host {\n              display: block;\n              --color-bg: #ffffff;\n              --color-font-title: #1f2937;\n              --color-font-text: #4b5563;\n              --color-font-light: #6b7280;\n              --color-primary: ${primaryColor};\n              --color-primary-light: ${primaryColor}22;\n              --color-primary-contrast: #ffffff;\n              --color-border: #e5e7eb;\n              --color-gray-light: #f3f4f6;\n              --color-gray-lighter: #f9fafb;\n              --color-gray-dark: #6b7280;\n              --color-success: #10b981;\n              --color-success-light: #ffffff;\n              --radius-sm: 4px;\n              --radius-lg: 12px;\n              --radius-full: 9999px;\n              --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);\n              --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.08), 0 2px 4px -2px rgba(0, 0, 0, 0.08);\n              --shadow-lg: rgba(0, 0, 0, 0.2) 0px 7px 29px 0px;\n              --animation-duration: 0.2s;\n              --animation-timing: ease-in-out;\n              font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n              box-sizing: border-box;\n            }\n            :host([dark]) {\n              --color-bg: #1f2937;\n              --color-font-title: #f9fafb;\n              --color-font-text: #d1d5db;\n              --color-font-light: #9ca3af;\n              --color-primary: ${primaryColor};\n              --color-primary-light: ${primaryColor}22;\n              --color-primary-contrast: #ffffff;\n              --color-border: #374151;\n              --color-gray-light: #374151;\n              --color-gray-lighter: #111827;\n              --color-gray-dark: #9ca3af;\n              --color-success: #34d399;\n              --color-success-light: #1f2937;\n            }\n            *, *:before, *:after { box-sizing: inherit; }\n            .checklists-content { color: var(--color-font-text); }\n            .checklists-content--done { text-align: center; }\n            .checklists-info { margin-bottom: 24px; text-align: center; }\n            .checklists-title { font-size: 1.25rem; font-weight: 600; margin-bottom: 8px; color: var(--color-font-title); }\n            .checklists-description { font-size: 0.9rem; margin-bottom: 16px; color: var(--color-font-text); line-height: 1.5; }\n            .checklists-sender { display: flex; align-items: center; justify-content: center; gap: 8px; }\n            .checklists-sender img { width: 28px; height: 28px; border-radius: var(--radius-full); object-fit: cover; }\n            .checklists-sender span { font-size: 0.875rem; color: var(--color-font-light); font-weight: 500; }\n            .checklists-success-icon { margin-bottom: 16px; line-height: 0; }\n            .checklists-success-icon--circle { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: var(--radius-full); background-color: var(--color-success); color: var(--color-success-light); font-size: 22px; }\n            .checklist-progress-labels { display: flex; justify-content: space-between; margin-bottom: 8px; }\n            .checklist-progress-label { font-size: 0.75rem; color: var(--color-font-light); font-weight: 500; }\n            .checklist-progress-bar { width: 100%; height: 6px; background-color: var(--color-gray-light); border-radius: var(--radius-full); overflow: hidden; margin-bottom: 20px; }\n            .checklist-progress-bar-progress { height: 100%; background-color: var(--color-primary); transition: width var(--animation-duration) var(--animation-timing); border-radius: var(--radius-full); }\n            .checklist-tasks { display: flex; flex-direction: column; gap: 12px; }\n            .checklist-task { border: 1px solid var(--color-border); border-radius: var(--radius-lg); background-color: var(--color-bg); box-shadow: var(--shadow-sm); overflow: hidden; transition: background-color var(--animation-duration) var(--animation-timing), border-color var(--animation-duration) var(--animation-timing); }\n            .checklist-task-header { display: flex; align-items: center; padding: 15px 20px; cursor: pointer; gap: 12px; position: relative; }\n            .checklist-task-header:hover { background: var(--color-gray-lighter); }\n            .checklist-task-header:hover .checklist-task-header--chevron {\n              color: var(--color-font-title);\n            }\n            .checklist-task-header--badge { display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: var(--radius-full); background-color: var(--color-primary-light); color: var(--color-primary); font-size: 0.875rem; font-weight: 600; flex-shrink: 0; transition: background-color var(--animation-duration) var(--animation-timing), color var(--animation-duration) var(--animation-timing); line-height: 1; }\n            .checklist-task-header--badge svg { width: 16px; height: 16px; }\n            .checklist-task-header--title { flex-grow: 1; font-size: 0.9rem; font-weight: 500; color: var(--color-font-title); transition: font-weight var(--animation-duration) var(--animation-timing), color var(--animation-duration) var(--animation-timing), text-decoration var(--animation-duration) var(--animation-timing); }\n            .checklist-task-header--chevron { color: var(--color-font-light); transition: transform var(--animation-duration) var(--animation-timing); flex-shrink: 0; margin-left: auto; }\n            .checklist-task-header--chevron svg { display: block; width: 18px; height: 18px; }\n            .checklist-task-body {\n              overflow: hidden;\n              transition: max-height var(--animation-duration) var(--animation-timing), opacity var(--animation-duration) var(--animation-timing);\n              max-height: 0;\n              opacity: 0;\n            }\n            .checklist-task--active .checklist-task-body {\n              max-height: var(--task-body-active-height, 200px);\n              opacity: 1;\n            }\n            .checklist-task-body-inner { padding: 4px 16px 20px 60px; font-size: 0.875rem; color: var(--color-font-text); line-height: 1.5; }\n            .checklist-task-body-content { margin-bottom: 16px; }\n            .checklist-task-body-content p:first-child { margin-top: 0; }\n            .checklist-task-body-content p:last-child { margin-bottom: 0; }\n            .checklist-task-body-content iframe { width: 100%; height: 315px; object-fit: contain; border: none; }\n            .checklist-task-body-action { margin-top: 16px; }\n            .action-button { display: inline-flex; align-items: center; justify-content: center; background-color: var(--color-primary); color: var(--color-primary-contrast); padding: 10px 18px; font-size: 0.875rem; font-weight: 500; border-radius: var(--radius-lg); border: none; text-align: center; cursor: pointer; transition: background-color var(--animation-duration) var(--animation-timing), box-shadow var(--animation-duration) var(--animation-timing); box-shadow: var(--shadow-sm); }\n            .action-button:hover { background-color: color-mix(in srgb, var(--color-primary) 90%, black); box-shadow: var(--shadow-md); }\n            .action-button:focus { outline: 2px solid color-mix(in srgb, var(--color-primary) 50%, transparent); outline-offset: 2px; }\n            .checklist-task-body-markdone { margin-top: 20px; border-top: 1px solid var(--color-border); padding: 16px 0 0px 0; display: flex; align-items: center; cursor: pointer; color: var(--color-primary); transition: color var(--animation-duration) var(--animation-timing); }\n            .checklist-task-body-markdone:hover { color: color-mix(in srgb, var(--color-primary) 80%, black); }\n            .checklist-task-body-markdone svg { width: 18px; height: 18px; margin-right: 6px; flex-shrink: 0; font-size: 18px; }\n            .checklist-task-body-markdone-label { font-size: 0.875rem; font-weight: 500; line-height: 1; }\n            .checklist-task--active .checklist-task-header--title { font-weight: 600; }\n            .checklist-task--active .checklist-task-header--chevron { transform: rotate(180deg); }\n            .checklist-task--active .checklist-task-header:hover { background: linear-gradient(180deg, var(--color-gray-lighter), transparent); }\n            .checklist-task--done { background-color: var(--color-gray-lighter); border-color: var(--color-gray-light); box-shadow: none; }\n            .checklist-task--done .checklist-task-header--badge { background-color: var(--color-success); color: var(--color-success-light); }\n            .checklist-task--done .checklist-task-header--title { color: var(--color-font-light); }\n            .checklist-task--done .checklist-task-body-inner { color: var(--color-font-light); }\n            .checklist-task--done .checklist-task-header--title {\n              text-decoration: line-through;\n            }\n  \n            /* -------------------------\n               Floating style addition\n               Only applies if floating=\"true\"\n               ------------------------- */\n            :host([floating=\"true\"]) .checklists-content {\n              position: relative;\n            }\n            :host([floating=\"true\"]) .checklist-tasks {\n              position: absolute;\n              bottom: 0;\n              left: 0;\n              z-index: 1000;\n              max-height: 90vh;\n              display: none;\n              padding: 0px;\n              min-width: min(380px, 90vw);\n              background-color: var(--color-bg);\n              border-radius: var(--radius-lg);\n              box-shadow: var(--shadow-lg);\n              overflow: hidden;\n            }\n            :host([floating=\"true\"]) .checklist-task {\n              border-radius: 0px;\n              border: none;\n              box-shadow: none;\n              border-bottom: 1px solid var(--color-border);\n            }\n            :host([floating=\"true\"]) .checklist-task:last-child {\n              border-bottom: none;\n            }\n            :host([floating=\"true\"]) .checklist-task--done {\n              background-color: transparent;\n            }\n            :host([floating=\"true\"]) .checklist-task-header:hover {\n              background: linear-gradient(180deg, var(--color-gray-lighter), transparent);\n            }\n  \n            /* -------------------------\n               Floating Launcher Styles\n               ------------------------- */\n            .checklist-floating-launcher {\n              padding: 12px;\n              background-color: var(--color-bg);\n              border: 1px solid var(--color-border);\n              border-radius: var(--radius-lg);\n              box-shadow: var(--shadow-md);\n              transition: transform 0.3s ease;\n              cursor: pointer;\n            }\n            .checklist-floating-launcher--done {\n              cursor: default !important;\n            }\n            .checklist-floating-header {\n              padding: 20px;\n              padding-bottom: 16px;\n              border-bottom: 1px solid var(--color-border);\n              cursor: pointer;\n            }\n            .checklist-floating-header:hover .floating-icon,\n            .checklist-floating-launcher:hover .floating-icon {\n              color: var(--color-font-title);\n            }\n            .floating-header {\n              display: flex;\n              align-items: center;\n              justify-content: flex-start;\n            }\n            .floating-title {\n              font-size: 0.875rem;\n              font-weight: 600;\n              color: var(--color-font-title);\n              max-width: calc(100% - 32px);\n              display: -webkit-box;\n              -webkit-line-clamp: 1;\n              -webkit-box-orient: vertical;\n              overflow: hidden;\n            }\n            .floating-subtitle {\n              font-size: 0.875rem;\n              color: var(--color-font-text);\n              margin-top: 8px;\n              max-width: 100%;\n              display: -webkit-box;\n              -webkit-line-clamp: 1;\n              -webkit-box-orient: vertical;\n              overflow: hidden;\n            }\n            .floating-circular-progress {\n              width: 26px;\n              height: 26px;\n              margin-right: 6px;\n            }\n            .floating-circular-progress svg {\n              width: 100%;\n              height: 100%;\n              transform: rotate(-90deg);\n            }\n            .floating-circular-progress .track {\n              fill: none;\n              stroke: var(--color-gray-light);\n              stroke-width: 3;\n            }\n            .floating-circular-progress .progress {\n              fill: none;\n              stroke: var(--color-primary);\n              stroke-width: 3;\n              stroke-linecap: round;\n              transition: stroke-dashoffset var(--animation-duration) var(--animation-timing);\n            }\n            .checklist-floating-launcher--done .floating-circular-progress .progress {\n              stroke: var(--color-success);\n            }\n            .floating-icon {\n              margin-left: auto;\n              color: var(--color-font-light);\n            }\n          </style>\n        `;\n        this.shadowRoot.innerHTML = styles + content;\n        this.addTaskEventListeners();\n        if (this.floatingEnabled) {\n          this.addFloatingClickListeners();\n        }\n        if (this.activeStep !== -1) {\n          this.toggleTask(this.activeStep, true);\n        }\n      }\n\n      updateActiveTaskMaxHeight() {\n        if (this.activeStep !== -1) {\n          const taskBodyInner = this.shadowRoot.querySelector(\n            `.checklist-task[data-task-index=\"${this.activeStep}\"] .checklist-task-body-inner`\n          );\n          const container = this.shadowRoot.querySelector(\n            `.checklist-task[data-task-index=\"${this.activeStep}\"] .checklist-task-body`\n          );\n          if (taskBodyInner && container) {\n            const height = taskBodyInner.offsetHeight;\n            container.style.setProperty('--task-body-active-height', `${height}px`);\n          }\n        }\n      }\n\n      // --- Event Listener Setup ---\n      addTaskEventListeners() {\n        const tasks = this.shadowRoot.querySelectorAll('.checklist-task');\n        tasks.forEach((task) => {\n          const header = task.querySelector('.checklist-task-header');\n          const index = parseInt(task.getAttribute('data-task-index'), 10);\n          if (header) {\n            header.addEventListener('click', () => {\n              const newActiveStep = this.activeStep === index ? -1 : index;\n              this.setActiveStep(newActiveStep);\n            });\n          }\n          const markDoneBtn = task.querySelector('.checklist-task-body-markdone');\n          if (markDoneBtn) {\n            markDoneBtn.addEventListener('click', (e) => {\n              e.stopPropagation();\n              if (!this.checklistData?.outbound?.config?.steps) return;\n              const step = this.checklistData.outbound.config.steps[index];\n              if (!step) return;\n              const previouslyActiveStep = this.activeStep;\n              if (!this.checklistData.completedSteps) this.checklistData.completedSteps = [];\n              if (!this.checklistData.completedSteps.includes(step.id)) {\n                this.checklistData.completedSteps.push(step.id);\n                const allSteps = this.checklistData.outbound.config.steps;\n                let nextActiveStep = -1;\n                if (previouslyActiveStep === index) {\n                  for (let i = index + 1; i < allSteps.length; i++) {\n                    if (!this.checklistData.completedSteps.includes(allSteps[i].id)) {\n                      nextActiveStep = i;\n                      break;\n                    }\n                  }\n                  this.setActiveStep(nextActiveStep);\n                }\n                // Preserve the state of the floating modal.\n                setTimeout(() => {\n                  let isModalOpen = false;\n                  if (this.floatingEnabled) {\n                    const tasksModal = this.shadowRoot.querySelector('.checklist-tasks');\n                    isModalOpen = tasksModal && tasksModal.style.display === 'block';\n                  }\n                  this.renderChecklist(this.checklistData);\n                  if (this.floatingEnabled && isModalOpen) {\n                    const tasksModal = this.shadowRoot.querySelector('.checklist-tasks');\n                    if (tasksModal) tasksModal.style.display = 'block';\n                  }\n                }, 300);\n                const updateData = { checkedStep: step.id };\n                if (allSteps.length > 0 && this.checklistData.completedSteps.length >= allSteps.length) {\n                  this.checklistData.status = 'done';\n                  updateData.status = 'done';\n                }\n                this.updateChecklist(this.checklistData.id, updateData);\n              }\n            });\n          }\n          const actionBtn = task.querySelector('.checklist-task-body-action .action-button');\n          if (actionBtn) {\n            actionBtn.addEventListener('click', (e) => {\n              e.stopPropagation();\n              if (!this.checklistData?.outbound?.config?.steps || typeof Gleap === 'undefined') return;\n              const step = this.checklistData.outbound.config.steps[index];\n              if (!step || !step.action || step.action === 'none') return;\n              try {\n                if (step.action === 'BOT') Gleap.startBot(step.botId);\n                else if (step.action === 'CUSTOM_ACTION') Gleap.triggerCustomAction(step.actionBody);\n                else if (step.action === 'REDIRECT_URL') {\n                  e.preventDefault();\n                  e.stopPropagation();\n                  e.stopImmediatePropagation();\n                  Gleap.openURL(step.actionBody, !!step.actionOpenInNewTab);\n                } else if (step.action === 'FEEDBACK_FLOW') Gleap.startFeedbackFlow(step.formId);\n                else if (step.action === 'NEWS_ARTICLE') Gleap.openNewsArticle(step.articleId);\n                else if (step.action === 'HELP_ARTICLE') Gleap.openHelpCenterArticle(step.articleId);\n                else if (step.action === 'CHECKLIST') Gleap.startChecklist(step.outboundId, true, step?.sharedKey);\n                else if (step.action === 'PRODUCT_TOUR') Gleap.startProductTour(step.productTourId, true);\n              } catch (gleapError) {}\n            });\n          }\n        });\n      }\n\n      // --- Animation and State Management ---\n      setActiveStep(index) {\n        const previousActiveStep = this.activeStep;\n        this.activeStep = index;\n        const tasksToToggle = [];\n        if (previousActiveStep !== -1 && previousActiveStep !== this.activeStep) {\n          tasksToToggle.push({ index: previousActiveStep, open: false });\n        }\n        if (this.activeStep !== -1 && this.activeStep !== previousActiveStep) {\n          tasksToToggle.push({ index: this.activeStep, open: true });\n        }\n        tasksToToggle.forEach(({ index, open }) => {\n          this.toggleTask(index, open);\n        });\n      }\n\n      toggleTask(index, forceOpen = null) {\n        const taskElement = this.shadowRoot.querySelector(`.checklist-task[data-task-index=\"${index}\"]`);\n        if (!taskElement) return;\n        const header = taskElement.querySelector('.checklist-task-header');\n        if (!header) return;\n        const isOpen = taskElement.classList.contains('checklist-task--active');\n        const shouldOpen = forceOpen !== null ? forceOpen : !isOpen;\n        if (shouldOpen) {\n          if (!isOpen) {\n            taskElement.classList.add('checklist-task--active');\n            header.setAttribute('aria-expanded', 'true');\n          }\n          const taskBodyInner = taskElement.querySelector('.checklist-task-body-inner');\n          if (taskBodyInner) {\n            const height = taskBodyInner.offsetHeight;\n            const taskBody = taskElement.querySelector('.checklist-task-body');\n            if (taskBody) {\n              taskBody.style.setProperty('--task-body-active-height', `${height}px`);\n            }\n          }\n          // Recalculate height when iframes finish loading\n          const iframes = taskElement.querySelectorAll('iframe');\n          iframes.forEach((iframe) => {\n            if (!iframe._heightListenerAdded) {\n              iframe._heightListenerAdded = true;\n              iframe.addEventListener('load', () => {\n                if (this.activeStep === index) {\n                  this.updateActiveTaskMaxHeight();\n                }\n              });\n            }\n          });\n        } else if (!shouldOpen && isOpen) {\n          taskElement.classList.remove('checklist-task--active');\n          header.setAttribute('aria-expanded', 'false');\n        }\n      }\n    }\n\n    if (typeof customElements !== 'undefined' && !customElements.get('gleap-checklist')) {\n      customElements.define('gleap-checklist', GleapChecklist);\n    }\n  }\n};\n","import { GleapSession } from './Gleap';\nimport { bootstrapGleapFrame } from './GleapHelper';\n\nexport const registerGleapAgentComponents = () => {\n  if (typeof customElements === 'undefined' || typeof HTMLElement === 'undefined' || typeof window === 'undefined') return;\n\n  if (!customElements.get('gleap-agent-conversation')) {\n    class GleapAgentConversation extends HTMLElement {\n      _iframe = null;\n      _agentConvUrl = 'https://outboundmedia.gleap.io/agent-conversation';\n      _messageListener = null;\n      _config = {};\n\n      static get observedAttributes() {\n        return ['agentId', 'conversationId', 'dark', 'placeholder', 'agentColor', 'emptyText', 'context'];\n      }\n\n      connectedCallback() {\n        this._injectIframe();\n        this._listenForMessages();\n      }\n\n      disconnectedCallback() {\n        if (this._messageListener) {\n          window.removeEventListener('message', this._messageListener);\n        }\n        this._messageListener = null;\n      }\n\n      attributeChangedCallback(name, oldValue, newValue) {\n        if (oldValue !== newValue && this._iframe) {\n          this._sendConfig();\n        }\n      }\n\n      _injectIframe() {\n        if (this._iframe) return;\n        this.style.display = 'block';\n        this.style.width = '100%';\n        this.style.height = '100%';\n\n        // Create iframe WITHOUT src so it becomes an about:blank document that inherits the\n        // parent's origin. bootstrapGleapFrame then injects the actual conversation app via\n        // doc.write — avoiding Safari ITP throttling for classified tracker domains. Falls back\n        // to direct src loading if bootstrap can't fetch (e.g. CORS not enabled on origin).\n        const iframe = document.createElement('iframe');\n        iframe.style.cssText = 'width: 100%; height: 100%; border: 0; background: transparent;';\n        iframe.setAttribute('frameborder', '0');\n        iframe.setAttribute('allow', 'autoplay; encrypted-media; microphone *;');\n        iframe.title = 'Gleap Agent Conversation';\n        this.appendChild(iframe);\n        this._iframe = iframe;\n\n        bootstrapGleapFrame(iframe, this._agentConvUrl);\n      }\n\n      _listenForMessages() {\n        if (this._messageListener) return; // already listening — prevent duplicate on reconnect\n        this._messageListener = (event) => {\n          // With about:blank bootstrapping, event.origin is the parent's origin (not the\n          // _agentConvUrl). We accept both: source-based match for the bootstrapped iframe,\n          // origin-based match for the legacy/fallback case.\n          let sourceMatches = false;\n          let originMatches = false;\n          try {\n            sourceMatches = !!(this._iframe && event.source === this._iframe.contentWindow);\n            const url = new URL(this._agentConvUrl);\n            originMatches = event.origin === url.origin;\n          } catch (e) {\n            return; // URL parse failed — reject message to be safe\n          }\n          if (!sourceMatches && !originMatches) return;\n\n          let data;\n          try { data = JSON.parse(event.data); } catch (e) { return; }\n          if (data?.type !== 'AGENT_CONVERSATION') return;\n\n          if (data.name === 'agent-conv-loaded') {\n            this._sendConfig();\n          }\n          if (data.name === 'agent-conv-conversation-created') {\n            this.dispatchEvent(new CustomEvent('gleap-agent-conversation-created', { bubbles: true, composed: true, detail: data.data }));\n          }\n          if (data.name === 'agent-conv-message-sent') {\n            this.dispatchEvent(new CustomEvent('gleap-agent-message-sent', { bubbles: true, composed: true, detail: data.data }));\n          }\n          if (data.name === 'agent-conv-reply-received') {\n            this.dispatchEvent(new CustomEvent('gleap-agent-reply-received', { bubbles: true, composed: true, detail: data.data }));\n          }\n          if (data.name === 'agent-conv-error') {\n            this.dispatchEvent(new CustomEvent('gleap-agent-error', { bubbles: true, composed: true, detail: data.data }));\n          }\n        };\n        window.addEventListener('message', this._messageListener);\n      }\n\n      _sendConfig() {\n        if (!this._iframe?.contentWindow) return;\n\n        let apiUrl = 'https://api.gleap.io';\n        let sdkKey = '';\n        let gleapId = '';\n        let gleapHash = '';\n\n        try {\n          const session = GleapSession.getInstance();\n          apiUrl = session.apiUrl || apiUrl;\n          sdkKey = session.sdkKey || '';\n          gleapId = session.session?.gleapId || '';\n          gleapHash = session.session?.gleapHash || '';\n        } catch (e) {}\n\n        const config = {\n          agentId: this.getAttribute('agentId') || '',\n          conversationId: this.getAttribute('conversationId') || null,\n          dark: this.getAttribute('dark') === 'true' || this.getAttribute('dark') === '',\n          placeholder: this.getAttribute('placeholder') || 'Type a message...',\n          agentColor: this.getAttribute('agentColor') || null,\n          emptyText: this.getAttribute('emptyText') || 'How can I help you today?',\n          context: (() => { try { const c = this.getAttribute('context'); return c ? JSON.parse(c) : null; } catch { return null; } })(),\n          apiUrl,\n          sdkKey,\n          gleapId,\n          gleapHash,\n        };\n\n        this._config = config;\n\n        this._iframe.contentWindow.postMessage(\n          JSON.stringify({ type: 'agent-conversation', name: 'agent-conv-data', data: config }),\n          '*'\n        );\n      }\n\n      sendMessage(content) {\n        if (!this._iframe?.contentWindow || !content?.trim()) return;\n        this._iframe.contentWindow.postMessage(\n          JSON.stringify({ type: 'agent-conversation', name: 'agent-conv-send-message', data: { content } }),\n          '*'\n        );\n      }\n\n      clearConversation() {\n        if (!this._iframe?.contentWindow) return;\n        this._iframe.contentWindow.postMessage(\n          JSON.stringify({ type: 'agent-conversation', name: 'agent-conv-clear', data: {} }),\n          '*'\n        );\n      }\n    }\n\n    customElements.define('gleap-agent-conversation', GleapAgentConversation);\n  }\n};\n","import Gleap from './Gleap';\n\nexport default Gleap;\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","GleapFeedbackButtonManager","_classCallCheck","_defineProperty","value","this","instance","feedbackButton","remove","buttonHidden","lastButtonIcon","injectedFeedbackButton","show","getInstance","updateFeedbackButtonState","GleapNotificationManager","updateContainerStyle","frameManager","GleapFrameManager","isOpened","redDotClass","existingDot","querySelector","concat","dot","document","createElement","className","appendChild","hideWidget","updateRedDot","showingRedDot","setAppMode","showWidget","_this","elem","addEventListener","feedbackButtonPressed","body","count","notificationBadge","notificationHiddenClass","classList","innerText","add","updateFeedbackButtonText","injectFeedbackButton","flowConfig","GleapConfigManager","getFlowConfig","feedbackButtonPosition","FEEDBACK_BUTTON_CLASSIC","FEEDBACK_BUTTON_CLASSIC_BOTTOM","FEEDBACK_BUTTON_CLASSIC_LEFT","widgetButtonText","GleapAiChatbarManager","updateUIVisibility","buttonIcon","buttonLogo","loadIcon","setAttribute","GleapTranslationManager","isRTLLayout","innerHTML","hideButton","FEEDBACK_BUTTON_NONE","FEEDBACK_BUTTON_BOTTOM_LEFT","appMode","hideForGuests","GleapSession","isUser","calculateShadeColor","col","amt","replace","length","_col$match2","_slicedToArray","match","r","g","b","_ref","parseInt","Math","max","min","toString","rr","gg","bb","calculateContrast","hex","substr","name","color","GleapNetworkIntercepter","Date","now","loadAllResources","contentType","toLocaleLowerCase","supportedContentTypes","i","includes","requests","JSON","parse","stringify","values","externalRequests","filters","request","headers","j","payload","payloadObj","e","response","responseText","data","window","performance","resources","getEntriesByType","resource","indexOf","initiatorType","find","url","push","type","date","startTimestamp","startTime","duration","round","exp","blacklist","defaultBlacklist","filter","maxRequests","stopped","keys","keysToRemove","slice","bbRequestId","startDate","getTime","text","size","TextEncoder","encode","encodeURI","s","split","Blob","getTextContentSize","undefined","TextDecoder","_typeof","ArrayBuffer","isView","decode","payloadText","cleanupPayload","cleanupContentSize","initialized","self","interceptNetworkRequests","onFetch","params","fromEntries","entries","method","preparePayload","cleanRequests","onFetchLoad","req","status","statusText","calcRequestTime","isContentTypeSupported","then","err","onFetchFailed","onOpen","args","onSend","requestHeaders","onError","currentTarget","onLoad","target","responseType","callback","originalFetch","open","XMLHttpRequest","send","gleapSetRequestHeader","setRequestHeader","header","requestId","arguments","bind","apply","fetch","clone","blob","Promise","resolve","reject","fr","FileReader","onload","evt","result","onerror","readAsText","bootstrapGleapFrame","iframe","baseHref","fallbackToSrc","src","contentDocument","parsed","URL","origin","mode","credentials","ok","Error","html","absolutized","targetPath","parsedTarget","pathname","search","hash","withRouteScript","doc","routeScript","test","write","close","resizeImage","base64Str","maxWidth","maxHeight","isJPEG","img","Image","canvas","MAX_WIDTH","MAX_HEIGHT","width","height","getContext","drawImage","toDataURL","MOBILE_UA_REGEX","getDeviceType","isMobile","nav","navigator","userAgentData","mobile","userAgent","vendor","maxTouchPoints","matchMedia","coarsePointer","matches","gleapDataParser","String","truncateString","str","num","removeSubDomain","v","parts","is2ndLevelDomain","secondLevel","join","loadFromGleapCache","cachedData","localStorage","getItem","saveToGleapCache","k","setItem","removeItem","runFunctionWhenDomIsReady","readyState","gleapHeightFixInstalled","RequestStatus","ChecklistNetworkManager","Map","validationCache","clear","fetchCache","validationRequests","fetchRequests","gleapSessionInstance","session","lang","getActiveLanguage","gleapId","gleapHash","apiUrl","xhr","injectSession","onreadystatechange","responseData","error","outboundId","sharedKey","cacheKey","_createCacheKey","cachedResult","internalId","has","_getApiUrl","set","_getQueryParams","requestPromise","_makeRequest","id","_this2","_regeneratorRuntime","t","n","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","arg","h","l","f","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","__await","callInvokeWithMethodAndArg","done","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","constructor","mark","setPrototypeOf","__proto__","awrap","async","reverse","pop","prev","charAt","stop","rval","handle","complete","finish","delegateYield","_createForOfIteratorHelper","allowArrayLike","it","Array","isArray","minLen","_arrayLikeToArray","from","_unsupportedIterableToArray","F","_e","normalCompletion","didErr","step","_e2","arr","len","arr2","asyncGeneratorStep","gen","_next","_throw","info","dispatchSSEEvent","event","callbacks","_callbacks$onMeta","_callbacks$onToken","_callbacks$onToolStar","_callbacks$onToolEnd","_callbacks$onDone","_callbacks$onError","_callbacks$onHandoff","onMeta","onToken","onToolStart","onToolEnd","onDone","onHandoff","parseSSEStream","fn","_callee","_callbacks$onError2","reader","decoder","buffer","currentEvent","currentData","_lines$pop","_yield$reader$read","lines","_iterator","_step","line","trimmed","_parsed","_callbacks$onError3","_context","message","getReader","read","stream","startsWith","trim","_unused","_unused2","t0","_x","_x2","ownKeys","getOwnPropertySymbols","getOwnPropertyDescriptor","_objectSpread","getOwnPropertyDescriptors","defineProperties","_defineProperties","props","descriptor","_toPropertyKey","toPrimitive","Number","_toPrimitive","AgentNetworkManager","Constructor","protoProps","staticProps","_streamAgent","messagesCache","messagesRequests","executeInFlight","_s$session","_s$session2","sdkKey","agentId","signal","_getHeaders","Accept","conversationId","_invalidateMessagesCache","_x3","_x4","limit","skip","messages","cached","conversations","_step2","_iterator2","floor","createCoords","x","oppositeSideMap","left","right","bottom","top","oppositeAlignmentMap","start","end","clamp","param","placement","axis","getAxisLength","yAxisSides","Set","getAlignmentAxis","alignment","lrPlacement","rlPlacement","tbPlacement","btPlacement","getOppositeAxisPlacements","flipAlignment","direction","rtl","list","side","isStart","getSideList","map","getOppositePlacement","padding","expandPaddingObject","rect","computeCoordsFromPlacement","reference","floating","sideAxis","alignmentAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","detectOverflow","state","options","_await$platform$isEle","platform","rects","elements","strategy","boundary","rootBoundary","elementContext","altBoundary","paddingObject","element","clippingClientRect","getClippingRect","isElement","contextElement","getDocumentElement","offsetParent","getOffsetParent","offsetScale","getScale","elementClientRect","convertOffsetParentRelativeRectToViewportRelativeRect","originSides","hasWindow","getNodeName","node","isNode","nodeName","toLowerCase","getWindow","_node$ownerDocument","ownerDocument","defaultView","documentElement","Node","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","invalidOverflowDisplayValues","isOverflowElement","overflow","overflowX","overflowY","display","tableElements","isTableElement","topLayerSelectors","isTopLayer","some","selector","transformProperties","willChangeValues","containValues","isContainingBlock","elementOrCss","webkit","isWebKit","css","containerType","backdropFilter","willChange","contain","CSS","supports","lastTraversableNodeNames","isLastTraversableNode","getComputedStyle","getNodeScroll","scrollLeft","scrollTop","scrollX","scrollY","getParentNode","assignedSlot","parentNode","host","getNearestOverflowAncestor","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","visualViewport","parent","getCssDimensions","parseFloat","hasOffset","offsetWidth","offsetHeight","shouldFallback","$","unwrapElement","domElement","getBoundingClientRect","isFinite","noOffsets","getVisualOffsets","offsetLeft","offsetTop","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","isFixed","floatingOffsetParent","shouldAddVisualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","clientLeft","paddingLeft","clientTop","paddingTop","getWindowScrollBarX","leftScroll","getHTMLOffset","scroll","htmlRect","SCROLLBAR_MAX","absoluteOrFixed","getClientRectFromClippingAncestor","clippingAncestor","clientWidth","clientHeight","visualViewportBased","windowScrollbarX","bodyStyles","bodyMarginInline","compatMode","marginLeft","marginRight","clippingStableScrollbarWidth","abs","getViewportRect","scrollWidth","scrollHeight","getDocumentRect","getInnerBoundingClientRect","hasFixedPositionAncestor","stopNode","position","getRectRelativeToOffsetParent","isOffsetParentAnElement","offsets","setLeftRTLScrollbarOffset","offsetRect","htmlOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","svgOffsetParent","currentNode","getContainingBlock","topLayer","clippingAncestors","cache","el","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingElementAncestors","_c","firstClippingAncestor","clippingRect","reduce","accRect","getElementRects","getOffsetParentFn","getDimensionsFn","getDimensions","floatingDimensions","getClientRects","isRTL","rectsAreEqual","autoUpdate","update","ancestorScroll","ancestorResize","elementResize","ResizeObserver","layoutShift","IntersectionObserver","animationFrame","referenceEl","ancestors","passive","cleanupIo","onMove","timeoutId","io","root","cleanup","_io","clearTimeout","disconnect","refresh","threshold","elementRectForRootMargin","rootMargin","isFirstUpdate","handleObserve","ratio","intersectionRatio","setTimeout","observe","observeMove","frameId","reobserveFrame","resizeObserver","firstEntry","unobserve","cancelAnimationFrame","requestAnimationFrame","_resizeObserver","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","removeEventListener","_middlewareData$offse","_middlewareData$arrow","middlewareData","diffCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","convertValueToCoords","offset","arrow","alignmentOffset","checkMainAxis","checkCrossAxis","limiter","detectOverflowOptions","mainAxisCoord","crossAxisCoord","maxSide","limitedCoords","enabled","_middlewareData$flip","initialPlacement","fallbackPlacements","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","initialSideAxis","isBasePlacement","oppositePlacement","getExpandedPlacements","hasFallbackAxisSideDirection","placements","overflows","overflowsData","flip","sides","mainAlignmentSide","every","_middlewareData$flip2","_overflowsData$filter","nextIndex","index","nextPlacement","resetPlacement","sort","_overflowsData$filter2","currentSideAxis","acc","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","shouldAddOffset","centerOffset","mergedOptions","platformWithCache","config","middleware","validMiddleware","Boolean","statefulPlacement","resetCount","_platform$detectOverf","nextX","nextY","computePosition","checkPageFilter","currentUrl","pageFilter","pageFilterType","removeTrailingSlash","isMatchingUrl","regex","substring","regexPattern","RegExp","generateRegex","matched","endsWith","NEGATIVE_FILTER_TYPES","checkPageRules","action","rules","pageRules","positiveRules","negativeRules","positivesPass","negativesPass","GleapTooltipManager","WeakMap","tooltip","hasAttribute","nextId","tooltipElem","hotspotContainer","canEmbed","firstChild","insertBefore","nextSibling","hotspot","icon","animated","repositionHotspot","elementToTooltipMap","floatingUIInstance","createTooltip","elementToFloatingUIMap","filteredTooltips","getFilteredTooltips","checkForTooltips","tooltips","location","href","page","pageType","querySelectorAll","linkTooltip","sessionInstance","http","console","updateFilteredTooltips","nodeType","ELEMENT_NODE","checkNodeTooltip","childNodes","childNode","processNodeInsertion","_this3","_this4","time","timeout","handleResizeThrottled","updateHotspotPositions","context","_toConsumableArray","observer","MutationObserver","mutations","lastUrl","mutation","addedNodes","removedNodes","floatingUI","childList","subtree","attributes","attributeFilter","_this5","tooltipText","tooltipData","hideTimeout","arrowEl","posX","shift","assign","style","arrowPos","transform","visibility","opacity","pointerEvents","hide","voidElements","tagName","resizeListener","anchor","removeAttribute","tooltipId","getAttribute","posY","offsetX","offsetY","elementRect","range","createRange","selectNodeContents","fixedWidth","anchorRect","tooltipSize","email","userId","phone","onSessionReady","ready","onSessionReadyListener","attemp","retry","GleapEventManager","notifyEvent","useCookies","cookie","eraseGleapCookie","sendMessage","clearAllNotifications","setNotificationCount","GleapBannerManager","removeBannerUI","GleapModalManager","hideModal","newTimeout","pow","startSession","_this$session","sessionChanged","localStorageDisabled","days","expires","setTime","toUTCString","setGleapCookie","encodeURIComponent","clearCache","GleapStreamedEvent","restart","tooltipManager","destroy","load","dispatchEvent","CustomEvent","notifySessionReady","sessionCookie","nameEQ","ca","getGleapCookie","sessionData","decodeURIComponent","validateSession","cachedSession","clearSession","deviceType","userData","checkIfSessionDataNeedsUpdate","userDataKeys","userDataKey","customData","setOnSessionReady","sdkVersion","SDK_VERSION","ws","userHash","checkIfSessionNeedsUpdate","dataToSend","tourId","tourData","_window","passedPageFilter","sendSessionUpdate","streamEvents","mainLoopTimeout","runEventStreamLoop","streamingEvents","errorCount","streamedEventArray","socket","OPEN","sessionDuration","GleapMetaDataManager","getSessionDuration","events","opened","handleOpenBound","handleOpen","handleErrorBound","handleError","handleMessageBound","handleMessage","handleCloseBound","handleClose","connectionTimeout","pingWS","clearInterval","cleanupWebSocket","connectedWebSocketGleapId","WebSocket","wsApiUrl","setInterval","processMessage","initWebSocket","GleapAdminManager","_ai$e","_ai$w","_message$data","ai","setConfig","placeholder","quickActions","workflowId","w","listOfActionsWhereIgnoreOpened","filteredActions","_action$actionType","actionType","Gleap","performActions","_checklistData$comple","_checklistData$comple2","checklistData","completedSteps","completedStepsBefore","_loop","_checklistData$steps","steps","stepIndex","checklistId","stepId","detail","eventArray","cleanupMainLoop","trackInitialEvents","startPageListener","resetErrorCountLoop","logEvent","logCurrentPage","disablePageTracking","log","eventMaxLength","parseIntWithDefault","val","def","onConfigLoaded","onConfigLoadedListener","cachedConfig","applyConfig","loadConfigFromServer","clearGleapCache","setStyles","headerColor","buttonColor","backgroundColor","borderRadius","buttonX","buttonY","applyStylesFromConfig","sendConfigUpdate","enableWebReplays","GleapReplayRecorder","startIfNotRunning","enableNetworkLogs","setLoadAllResources","sendNetworkResources","networkLogPropsToIgnore","setFilters","networkLogBlacklist","setBlacklist","updateRTLSupport","enableShortcuts","aiBar","notifyConfigLoaded","_asyncToGenerator","documentToHTML","doctype","publicId","systemId","outerHTML","loadCSSUrlResources","basePath","remote","asyncFn","matchedData","matchedUrl","replaceAll","resourcePath","fetchCSSResource","resourceData","promises","_len","_key","promise","all","onloadend","readAsDataURL","fetchItemResource","isBlacklisted","warn","progressResource","replaceStyleNodes","styleSheet","cssTextContent","styleId","cloneTargetNode","ownerNode","replacementNode","head","styleNode","cssText","createTextNode","linkNode","rel","media","getTextContentFromStyleSheet","cssRules","cssRuleItem","depth","sanitizeCSSBraces","downloadAllCSSUrlResources","basePathURL","styleSheets","mediaText","baseTags","getElementsByTagName","lastIndexOf","replacedStyle","styletext","stylesheet","results","prepareRemoteData","dom","imgItems","imgItemsPromises","item","downloadAllImages","handleAdoptedStyleSheets","shadowNodeId","adoptedStyleSheets","shadowStyleNode","firstElementChild","extractFinalCSSState","getAnimations","animations","finalCSSState","animation","_animation$effect","keyframes","effect","getKeyframes","finalKeyframe","property","deepClone","_callee3","cloneNode","fragment","clonedHead","_context3","_ref2","_callee2","shadowRoot","walkTree","webAnimations","boundingRect","resizedImage","_boundingRect","rootShadowNodeId","_context2","_ref3","nextn","nextp","innerShadowRoot","nextElementSibling","_x5","_x6","_x7","HTMLCanvasElement","toUpperCase","contains","checked","createDocumentFragment","prepareScreenshotData","_ref4","_callee4","styleTags","linkImportElems","referenceNode","scriptElems","existingBasePath","baseElems","baseUrl","newBaseUrl","baseNode","dialogElems","bbElems","_context4","innerWidth","innerHeight","_x8","_x9","GleapScreenRecorder","rerender","permissionErrorText","MAX_RECORD_TIME","mediaDevices","getDisplayMedia","available","RERENDER_DELAY","_uploadScreenRecording","_startAudioRecording","_startScreenRecording","MIME_TYPES","MediaRecorder","isTypeSupported","getTracks","track","_","tracks","validTracks","MediaStream","videoTracks","getVideoTracks","audioTracks","getAudioTracks","displayStream","composed","isRecording","video","ideal","screen","frameRate","IDEAL_FRAME_RATE","MAX_FRAME_RATE","displaySurface","audio","selfBrowserSurface","_displayStream","_displayVideoTrack","getFirstVideoTrack","audioMuted","startAudioRecording","audioAvailable","createMediaStream","handleRecord","alert","mediaRecorder","recordingTimer","stopStreamTracks","_micStream","voiceStream","micTrack","_composed","getUserMedia","echoCancellation","noiseSuppression","autoGainControl","getFirstAudioTrack","videoEl","SELECTORS","PREVIEW_VIDEO","file","recordedChunks","mimeType","getSupportedMimeType","recordTime","timerLabel","TIMER_LABEL","remainingTime","maxRecordTime","formatTime","stopScreenRecording","TIMER_UPDATE_INTERVAL","ondataavailable","videoTrack","onended","prepareRecording","onstop","CHUNK_INTERVAL","completeBlob","extension","File","previewVideoElement","createObjectURL","screenRecordingData","formData","FormData","append","fileUrl","GleapFeedback","priority","isSilent","excludeData","spamToken","gleapInstance","GleapCustomDataManager","getCustomData","metaData","getMetaData","consoleLog","GleapConsoleLogManager","getLogs","networkLogs","getRequests","customEventLog","getEventArray","ticketAttributes","getTicketAttributes","dataPromises","webReplay","getGlobalDataItem","isLiveSite","recordingUrlPromise","uploadScreenRecording","recordingUrl","screenRecordingUrl","screenshot","screenshotDataPromise","isLiveMode","screenshotData","snapshotPosition","feedbackData","outbound","tags","GleapTagManager","getTags","keysToExclude","keyToExclude","takeSnapshot","getData","feedback","setGlobalDataItem","takeCurrentReplay","eventListeners","eventListener","eventName","GleapAgentToolManager","_runToolAction2","tools","agentTools","agentToolCallbacks","handler","registeredAgentTools","toolCallId","runningToolExecutions","execution","_runToolAction","handlerResult","_error$message","cb","newTab","newWindow","focus","cmp_block_ignoredomains","injectedFrame","autoWhiteListCookieManager","gleapFrameContainer","gleapFrame","frameUrl","updateFrameStyle","showFrameContainer","closeElement","keyListener","preventDefault","stopPropagation","preventScroll","surveyStyle","extendedStyle","surveyFullStyle","classicStyle","classicStyleLeft","modernStyleLeft","noButtonStyleLeft","allStyles","styleToApply","startCommunication","appHeight","setProperty","urlHandler","innerContainer","escListener","imageViews","widgetOpened","markerManager","showLoader","_this$gleapFrameConta","loadingClass","disableBGFade","disableBGGradient","_this3$gleapFrameCont","updateUI","workThroughQueue","updateWidgetStatus","registerEscListener","isSurvey","updateNotificationBadge","runWidgetShouldOpenCallback","injectFrame","isWidgetOpen","resetRoutes","hideMarkerManager","reloadNotificationsFromCache","unregisterEscListener","queue","comReady","contentWindow","postMessage","getSession","aiTools","getAgentTools","overrideLanguage","getOverrideLanguage","GleapMarkerManager","success","workQueue","_this6","addMessageListener","GleapAudioManager","ping","showImage","answerCollectTicketData","frameHeight","_data$data","startProductTour","GleapCustomActionManager","triggerCustomAction","shareToken","triggerToolAction","executeToolAction","_checklistData$outbou","_checklistData$outbou2","_data$data2","_checklistData2$outbo","sendingFeedback","feedbackType","sendFeedback","reportedBy","trackEvent","showDrawingScreen","bannerManager","bannerFrame","bannerContainer","sourceMatchesGleapFrame","source","sourceMatchesBannerFrame","originMatchesGleapFrame","originMatchesBannerFrame","bannerUrl","listeners","targetFrame","requestData","ticketData","appVersionCode","appBuildNumber","sessionStart","nameOffset","verOffset","ix","nAgt","browserName","appName","fullVersion","appVersion","majorVersion","OSName","browser","systemName","buildVersionNumber","releaseVersionNumber","devicePixelRatio","screenWidth","screenHeight","language","userLanguage","sdkType","environment","logArray","disabled","originalConsoleLog","logLevel","logMaxLength","addLog","origConsole","addLogWithArgs","GleapClickListener","protocol","handleGleapLink","elementId","elementClass","elemId","elemClass","elementTag","htmlPre","htmlPost","getDOMElementDescription","customAction","customActionCallbacks","_a","__defProp","__publicField","__defNormalProp","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","PointerTypes","PointerTypes2","CanvasContext","CanvasContext2","MediaInteractions","MediaInteractions2","NodeType","NodeType2","testableAccessors","testableMethods","untaintedBasePrototype","untaintedBaseIframeCleanup","isAngularZonePresent","globalThis","Zone","getUntaintedPrototype","defaultObj","defaultPrototype","accessorNames","isUntaintedAccessors","accessor","_a2","_b","methodNames","isUntaintedMethods","iframeEl","untaintedObject","ua","untaintedAccessorCache","getUntaintedAccessor","untaintedPrototype","untaintedAccessor","untaintedMethodCache","getUntaintedMethod","untaintedMethod","mutationObserverCtor","nowTimestamp","patch","replacement","original","wrapped","__rrweb_original__","parentElement","textContent","other","getRootNode","selectors","hostEl","isNativeShadowDom","shadowRoot2","stringifyStylesheet","sheetHref","baseURI","stringifiedRules","rule","stringifyRule","isCSSImportRule","importStringified","statement","layerName","supportsText","escapeImportStatement","absolutifyURLs","ruleStringified","isCSSStyleRule","selectorText","cssStringified","fixSafariColons","Mirror","getId","getMeta","getNode","idNodeMap","getIds","nodeMetaMap","removeNodeFromMap","delete","hasNode","meta","oldNode","maskInputValue","maskInputOptions","maskInputFn","actualType","repeat","ORIGINAL_ATTRIBUTE_NAME","getInputType","extractFileExtension","path","baseURL","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","quote1","path1","quote2","path2","path3","filePath","maybeQuote","extractOrigin","filePathNoHash","maybeHash","stack","part","normalizeCssString","_testNoPxNorm","markCssSplits","childNodes2","splits","iterCount","cssTextNorm","normFactor","textContentNorm","jLimit","startSubstring","cssNormSplits","splitNorm","prevTextContent","prevMinLength","normPart","splitCssText","_id","tagNameRegex","IGNORED_NODE","genId","canvasService","canvasCtx","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","cachedDocument","absoluteToDoc","attributeValue","getHref","isSVGElement","ownerSVGElement","customHref","transformAttribute","pos","collectCharacters","regEx","chars2","exec","output","descriptorsStr","inParens","getAbsoluteSrcsetString","ignoreAttribute","_value","classMatchesRegex","checkAncestors","eIndex","needMaskingText","maskTextClass","maskTextSelector","closest","serializeNode","mirror","mirror2","blockClass","blockSelector","needsMask","inlineStylesheet","maskTextFn","dataURLOptions","inlineImages","recordCanvas","keepIframeSrcFn","newlyAddedElement","cssCaptured","rootId","docId","getRootId","DOCUMENT_NODE","Document","DOCUMENT_TYPE_NODE","DocumentType","needBlock","_isBlockedElement","HTMLFormElement","processedTagName","getValidTagName","attr","_cssText","sheet","selected","rr_open_mode","__context","ctx","getImageData","originalGetImageData","Uint32Array","pixel","is2DCanvasBlank","rr_dataURL","quality","canvasDataURL","blankCanvas","image","imageSrc","currentSrc","priorCrossOrigin","crossOrigin","recordInlineImage","naturalWidth","naturalHeight","mediaAttributes","rr_mediaState","paused","rr_mediaCurrentTime","currentTime","rr_mediaPlaybackRate","playbackRate","rr_mediaMuted","muted","rr_mediaLoop","loop","rr_mediaVolume","volume","rr_scrollLeft","rr_scrollTop","class","rr_width","rr_height","rr_src","isCustomElement","customElements","isSVG","isCustom","serializeElementNode","TEXT_NODE","parentTagName","textContent2","isStyle","isScript","Text","serializeTextNode","CDATA_SECTION_NODE","CDATA","COMMENT_NODE","Comment","lowerIfExists","maybeAttr","slimDOMDefaults","_slimDOMOptions","script","comment","headFavicon","headWhitespace","headMetaSocial","headMetaRobots","headMetaHttpEquiv","headMetaVerification","headMetaAuthorship","headMetaDescKeywords","headTitleMutations","serializeNodeWithId","skipChild","slimDOMOptions","onSerialize","onIframeLoad","iframeLoadTimeout","onStylesheetLoad","stylesheetLoadTimeout","preserveWhiteSpace","_serializedNode","sn","as","slimDOMExcluded","serializedNode","recordChild","shadowRootEl","isShadowHost","bypassOptions","childN","serializedChildNode","isShadow","listener","fired","timer","blankUrl","onceIframeLoaded","iframeDoc","serializedIframeNode","link","styleSheetLoadTimeout","styleSheetLoaded","onceStylesheetLoaded","serializedLinkNode","BaseRRNode","_args","childIterator","_newChild","_refChild","removeChild","_node","on","capture","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","throttle","func","wait","previous","leading","remaining","trailing","hookSetter","isRevoked","getWindowScroll","_d","scrollingElement","pageXOffset","pageYOffset","getWindowHeight","getWindowWidth","closestElementOfNode","isBlocked","isIgnored","isAncestorRemoved","legacy_isTouchEvent","changedTouches","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","Proxy","Reflect","receiver","StyleSheetMirror","styleIDMap","newId","idStyleMap","getStyle","generateId","getShadowHost","shadowHost","DOCUMENT_FRAGMENT_NODE","shadowHostInDom","rootShadowHost","getRootShadowHost","inDom","isNodeInLinkedList","DoubleLinkedList","current","index2","addNode","__ln","previousSibling","tail","removeNode","moveKey","parentId","MutationBuffer","processMutation","emit","frozen","locked","adds","addedIds","addList","getNextId","ns","pushAdd","parentTag","addedSet","currentN","iframeManager","addIframe","stylesheetManager","trackLinkElement","shadowDomManager","addShadowRoot","childSn","attachIframe","observeAttachShadow","attachLinkElement","mapRemoves","movedSet","isParentRemoved","removesSubTreeCache","isAncestorInSet","droppedSet","candidate","tailNode","unhandledNode","texts","genTextAreaValueMutation","attribute","diffAsStr","styleDiff","unchangedAsStr","_unchangedStyles","removes","attributeMap","movedMap","mutationCb","textarea","cn","m","oldValue","attributeName","unattachedDoc","implementation","createHTMLDocument","old","pname","newValue","getPropertyValue","newPriority","getPropertyPriority","genAdds","nodeId","isSerialized","deepDelete","n2","processRemoves","processedNodeManager","inOtherBuffer","targetId","init","freeze","canvasManager","unfreeze","isFrozen","lock","unlock","addsSet","_mirror2","_isParentRemoved","_isAncestorInSet","errorHandler","callbackWrapper","rest","mutationBuffers","getEventTarget","composedPath","initMutationObserver","rootEl","mutationBuffer","ObserverCtor","iframeCleanup","processMutations","attributeOldValue","characterData","characterDataOldValue","initMouseInteractionObserver","mouseInteractionCb","sampling","mouseInteraction","disableMap","handlers","currentPointerType","eventKey","pointerType","thisEventKey","Mouse","Touch","Pen","MouseDown","MouseUp","Click","clientX","clientY","getHandler","PointerEvent","TouchStart","TouchEnd","initScrollObserver","scrollCb","scrollLeftTop","INPUT_TAGS","lastInputValueMap","getNestedCSSRulePositions","recurse","childRule","hasNestedCSSRule","parentRule","CSSGroupingRule","CSSMediaRule","CSSSupportsRule","CSSConditionRule","unshift","parentStyleSheet","getIdAndStyleId","styleMirror","initAdoptedStyleSheetObserver","host2","hostId","patchTarget","originalPropertyDescriptor","_a3","sheets","adoptStyleSheets","initObservers","hooks","currentWindow","mutationObserver","mousemoveCb","viewportResizeCb","inputCb","mediaInteractionCb","styleSheetRuleCb","styleDeclarationCb","canvasMutationCb","fontCb","selectionCb","customElementCb","mousemove","viewportResize","input","mediaInteaction","styleSheetRule","styleDeclaration","canvasMutation","font","selection","customElement","mergeHooks","cleanupMutationIframe","recordDOM","mousemoveHandler","callbackThreshold","mousemoveCallback","timeBaseline","positions","wrappedCb","totalOffset","timeOffset","updatePosition","DragEvent","Drag","MouseEvent","MouseMove","TouchMove","initMoveObserver","mouseInteractionHandler","scrollHandler","viewportResizeHandler","lastH","lastW","initViewportResizeObserver","inputHandler","ignoreClass","ignoreSelector","userTriggeredOnInput","eventHandler","userTriggered","isTrusted","isChecked","cbWithDedup","text2","lastInputValue","propertyDescriptor","HTMLInputElement","hookProperties","HTMLSelectElement","HTMLTextAreaElement","HTMLOptionElement","initInputObserver","mediaInteractionHandler","Play","Pause","Seeked","VolumeChange","RateChange","initMediaInteractionObserver","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","CSSStyleSheet","insertRule","thisArg","argumentsList","addRule","styleBlock","deleteRule","replaceSync","removeRule","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","typeKey","initStyleSheetObserver","ignoreCSSAttributes","CSSStyleDeclaration","removeProperty","initStyleDeclarationObserver","collectFonts","fontMap","originalFontFace","FontFace","family","descriptors","fontFace","fontSource","Uint8Array","restoreHandler","fonts","initFontObserver","selectionObserver","collapsed","updateSelection","getSelection","isCollapsed","ranges","rangeCount","getRangeAt","startContainer","startOffset","endContainer","endOffset","initSelectionObserver","customElementObserver","initCustomElementObserver","pluginHandlers","plugin","plugins","CrossOriginIframeMirror","generateIdFn","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","getIdToRemoteIdMap","remoteIdToIdMap","getRemoteIdToIdMap","getRemoteId","getRemoteIds","ids","iframeIdToRemoteIdMap","iframeRemoteIdToIdMap","IframeManager","wrappedEmit","recordCrossOriginIframes","crossOriginIframeStyleMirror","iframes","crossOriginIframeMap","addLoadListener","loadListener","isAttachIframe","crossOriginMessageEvent","transformedEvent","transformCrossOriginEvent","isCheckout","FullSnapshot","crossOriginIframeMirror","replaceIdOnNode","crossOriginIframeRootIdMap","patchRootIdOnNode","timestamp","IncrementalSnapshot","Mutation","Meta","Load","DomContentLoaded","Plugin","Custom","replaceIds","ViewportResize","MediaInteraction","MouseInteraction","Scroll","CanvasMutation","Input","StyleSheetRule","StyleDeclaration","replaceStyleIds","Font","Selection","AdoptedStyleSheet","styles","iframeMirror","child","ShadowDomManager","WeakSet","patchAttachShadow","shadowDoms","restoreHandlers","iframeElement","manager","option","sRoot","chars","lookup","charCodeAt","canvasVarMap","saveWebGLVar","isInstanceOfWebGLObject","ctor","contextMap","variableListFor","serializeArg","Float32Array","Float64Array","Int32Array","Uint16Array","Int16Array","Int8Array","Uint8ClampedArray","rr_type","base64","arraybuffer","bytes","DataView","byteOffset","byteLength","HTMLImageElement","ImageData","serializeArgs","supportedWebGLConstructorNames","initCanvasContextObserver","setPreserveDrawingBufferToTrue","contextType","ctxName","getNormalizedContextName","contextAttributes","preserveDrawingBuffer","splice","patchGLPrototype","getOwnPropertyNames","recordArgs","hookHandler","setter","jsContent","WorkerWrapper","objURL","webkitURL","worker","Worker","revokeObjectURL","CanvasManager","latestId","invokeId","rafStamps","pendingCanvasMutations","initCanvasMutationObserver","initCanvasFPSObserver","resetObservers","fps","canvasContextReset","snapshotInProgressMap","onmessage","commands","timeBetweenSnapshots","rafId","lastSnapshotTime","takeCanvasSnapshots","matchedCanvas","getCanvas","getContextAttributes","COLOR_BUFFER_BIT","bitmap","createImageBitmap","startRAFTimestamping","startPendingCanvasMutationFlusher","canvas2DReset","props2D","CanvasRenderingContext2D","initCanvas2DMutationObserver","canvasWebGL1and2Reset","WebGLRenderingContext","WebGL","WebGL2RenderingContext","WebGL2","initCanvasWebGLMutationObserver","flushPendingCanvasMutations","setLatestRAFTimestamp","_values","flushPendingCanvasMutationFor","valuesWithType","type2","StylesheetManager","adoptedStyleSheetCb","linkEl","trackedLinkElements","trackStylesheetInLinkElement","adoptedStyleSheetData","styleIds","CSSRule","_linkEl","ProcessedNodeManager","thisBuffer","buffers","nodeMap","active","takeFullSnapshot","recording","cleanFrame","debug","record","checkoutEveryNms","checkoutEveryNth","maskAllInputs","_maskInputOptions","packFn","mousemoveWait","recordAfter","errorHandler2","inEmittingFrame","passEmitsToParent","month","number","tel","week","select","password","lastFullSnapshotEvent","NodeList","DOMTokenList","incrementalSnapshotCount","eventProcessor","buf","exceedCount","exceedTime","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","getMirror","nodeMirror","slimDOM","snapshot","initialOffset","CustomElement","addCustomEvent","tag","freezePage","u8","u16","u32","fleb","fdeb","clim","freb","eb","fl","revfl","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","flt","fdt","flm","fdm","shft","slc","subarray","wbits","wbits16","hTree","t2","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","out","dat","wblk","final","syms","lf","df","li","bs","bl","dlt","mlb","_b2","ddt","mdb","lclt","nlc","lcdt","ndc","lcfreq","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","clct","dst","deo","dopt","opt","pre","post","st","lvl","plvl","lst","msk_1","bs1_1","ceil","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","level","mem","zlibSync","opts","adler","lv","fl2","wbytes","pack","latin1","fromCharCode","ar","customOptions","stopFunction","segments","ContextMenu","DblClick","Focus","Blur","outputEvents","packed","ScreenDrawer","svgElement","minHeight","mouseDown","colorpicker","fadeOutToolbar","tool","mouseDownPen","mouseDownRect","mouseMove","mouseMovePen","mouseMoveRect","mouseUp","fadeInToolbar","mouseUpPen","mouseUpRect","appendToBuffer","getMousePosition","updateSvgPath","startPoint","setAttributeNS","createElementNS","strokeWidthRect","appendPathToSvg","strokeWidth","pt","strPath","touches","bufferSize","totalX","totalY","getAveragePoint","tmpPath","pathBuffer","fadeTarget","GleapScrollStopper","supportsPassive","wheelOpt","scrollDisabled","wheelEvent","preventDefaultForScrollKeys","keyCode","showWidgetUI","formKey","dirty","dialogUI","enableScroll","screenRecorder","unregisterListeners","cleanupMousePointer","screenDrawer","dialog","captureSVG","videoPreviewContainer","dismissUI","colorPicker","borderLayer","captureEditor","dragCursor","setMouseMove","mouseMoveEventHandler","touchMoveEventHandler","dragHandle","dragStart","drag","dragEnd","bugReportingEditor","translateText","pageLeaveListener","isEscape","isEnter","dismiss","showNextStep","returnValue","registerListeners","hideWidgetUI","createEditorUI","setupMousePointer","disableScroll","setupScreenRecording","captureScreenDrawerRerender","setupColorPicker","setupToolbar","selectedColor","colorItems","colorItem","hexColor","onclick","setColor","setPenColor","currentX","currentY","initialX","initialY","toolbar","isDragging","xOffset","yOffset","_getTransformValues","matrix","DOMMatrix","m41","m42","getTransformValues","nextButton","chooseTool","toolbarItem","toolbarTools","setTool","svgClone","toolbarItems","_loop2","toggleAudio","startScreenRecording","removeLastAddedPathFromSvg","itemInactiveClass","screenRecordingTooltip","audioRecordingTooltip","recordingClass","notRecordingClass","clearPreview","captureRenderer","penTips","fill","staticTranslation","staticTranslations","vars","template","localizationOptions","htmlLang","GleapShortcutListener","shortCutListener","code","char","keyIdentifier","ctrlKey","startFeedbackFlowWithOptions","autostartDrawing","GleapPreFillManager","unreadCount","notificationContainer","notificationsFromCache","unreadNotificationsKey","nots","notification","_notification$data","lastSource","createdAt","notifications","renderNotifications","updateTabBarNotificationCount","_notification$data2","_chatbar$config","chatbar","chatbarAvailable","manuallyShown","isHidden","showChatbarNotification","sound","clearElem","currentNewsIndex","newsNotifications","news","otherNotifications","currentIndex","currentNews","newsElem","newsContainerElem","coverImageUrl","newsImageElem","openNews","newsContentElem","newsTitleElem","content","getName","descHTML","renderDescription","descElem","paginationElem","pageIndicator","nextBtn","conversation","openConversation","checklist","openChecklist","progress","currentStep","totalSteps","nextStepTitle","sender","profileImageUrl","openNewsArticle","_notification$data3","previewText","uiOnly","classLeft","classNoButton","_listenForMessages","_listenForOutsideClicks","_showWithAgent","_validateAgent2","chatbarContainer","_suppressOutsideClick","_postMessageRaw","chatbarFrame","_sendSessionUpdate","_sendConfigUpdate","_flushPendingMessages","setPanelOpen","isOpen","_resizeFrame","_updateBlurBackdrop","_this$chatbarFrame","pendingMessages","queued","_withChatbarConfig","_this$config","_this$config2","_this$config3","_this$config$workflow","_this$config4","base","chatbarPlaceholder","chatbarQuickActions","chatbarStyle","chatbarColor","chatbarWorkflowId","_panelOpen","_data$sender","_data$conversation","visible","radius","dark","blurBackdrop","webkitBackdropFilter","bd","background","_this$config5","_flowConfig$aiBar","_session$session","_session$session2","res","agentInfo","json","agentName","resolvedAgentId","_normalizeAgentOptions","_suppressOutsideClickTimeout","_getDefaultAgentId","_validateAgent","agentContext","manuallyHidden","initialQuestion","initialMessage","_this$config6","_preloadIframe","_removeUI","_injectUI","getElementById","widgetPosition","positionStyle","styleEl","container","frame","title","chatbarUrl","_this$bannerUrl","sourceMatches","originMatches","_this$bannerData","_data$data3","_data$data4","_data$data5","_data$data6","_data$data7","_data$data8","_data$data9","_data$data10","bannerData","format","startBot","botId","startFeedbackFlow","formId","showSurvey","surveyFormat","articleId","openHelpCenterArticle","startChecklist","gleapBFrame","injectBannerUI","modalUrl","_this$modalUrl","modalFrame","modalContainer","_data$data11","modalData","primaryColor","_postMessage","wrapper","modalBackdropClickListener","_this2$modalData$show","_this2$modalData","showCloseButton","_injectModalUI","play","settings","Audio","playPromise","getID","getClassSelectors","getClasses","kCombinations","items","getNthChild","sibling","counter","getTag","isUnique","elems","getAllSelectors","attributesToIgnore","funcs","Tag","NthChild","Attributes","sum","getAttributes","Class","ID","testUniqueness","getFirstUnique","getUniqueCombination","combinations","getCombinations","firstUnique","combination","getUniqueSelector","selectorTypes","excludeRegex","foundSelector","elementSelectors","selectorType","Classes","unique","_options$selectorType","_options$attributesTo","_options$excludeRegex","allSelectors","parents","currentElement","getParents","_i","_allSelectors","ElementOverlay","overlay","borderColor","borderStyle","borderWidth","boxSizing","cursor","zIndex","margin","shadowContainer","attachShadow","_createClass","useShadowDOM","usingShadowDOM","setBounds","bounds","ElementPicker","overlayOptions","handleMouseMove","handleClick","tick","addToDOM","removeFromDOM","mouseX","mouseY","tickReq","clickedEl","elementFromPoint","elementFilter","stopImmediatePropagation","onClick","updateTarget","ignoreCursor","newTarget","captureCursor","onHover","GleapAdminHelper","picker","stopPicker","onElementPicked","startPicker","COLLAPSE_UI_ACTIVE_CLASS","FRAME_CONTAINER_ACTIVE_CLASS","isActive","activeClass","gleapCollapseUI","toggle","injectedCollapseUI","toggleCollapseUI","_this$configData","configData","sendMessageToTourBuilder","GleapProductTours","disable","showFeedbackButton","adminHelper","injectCollapseUI","setFrameHeight","gleapAdminDisabled","initAdminHelper","currentPage","click","opener","GleapTours","currentConfig","configure","animate","allowClose","overlayOpacity","smoothScroll","disableActiveInteraction","showProgress","stagePadding","stageRadius","popoverOffset","showButtons","disableButtons","overlayColor","getConfig","easeInOutQuad","elapsed","initialValue","amountOfChange","getFocusableElements","parentEls","focusableQuery","flatMap","parentEl","isParentFocusable","focusableEls","isElementVisible","bringInView","isElementInView","shouldSmoothScroll","scrollIntoView","behavior","hasScrollableParent","inline","block","currentState","setState","getState","resetState","registeredListeners","listen","hook","trackActiveElement","activeStagePosition","renderOverlay","mountOverlay","stagePosition","overlaySvg","stage","windowX","windowY","svg","fillRule","clipRule","strokeLinejoin","strokeMiterlimit","stagePath","generateStageSvgPathString","createOverlaySvg","onDriverClick","pathElement","stageWidth","stageHeight","limitedRadius","normalizedRadius","highlightBoxX","highlightBoxY","highlightBoxWidth","highlightBoxHeight","highlight","attemptTime","elemObj","refactoredElement","hidePopover","existingDummy","mountDummyElement","toElement","toStep","_toStep$disableActive","fromStep","fromElement","isFirstHighlight","isToDummyElement","isFromDummyElement","isAnimatedTour","highlightStartedHook","onHighlightStarted","highlightedHook","onHighlighted","deselectedHook","onDeselected","hasDelayedPopover","isPopoverRendered","isHalfwayThrough","popover","renderPopover","to","fromDefinition","toDefinition","transitionStage","transferHighlight","refreshActiveHighlight","activeHighlight","activeStep","freshEl","escaped","refreshOverlay","repositionPopover","requireRefresh","resizeTimeout","trapFocus","activeElement","popoverEl","firstFocusableEl","lastFocusableEl","shiftKey","previousFocusableEl","nextFocusableEl","onKeyup","shouldPreventDefault","listenerWrapper","listener2","useCapture","description","closeButton","footer","footerButtons","previousButton","createPopover","_ref2$nextBtnText","nextBtnText","_ref2$prevBtnText","prevBtnText","_ref2$progressText","progressText","showButtonsConfig","showProgressConfig","showFooter","disabledButtonsConfig","popoverWrapper","customPopoverClass","popoverClass","onNextClick","onPrevClick","onCloseClick","onPopoverRender","focusableElement","getPopoverDimensions","boundingClientRect","realWidth","realHeight","calculateTopForLeftRight","elementDimensions","popoverDimensions","popoverPadding","popoverArrowDimensions","calculateLeftForTopBottom","_ref3$align","align","_ref3$side","requiredAlignment","requiredSide","topValue","isTopOptimal","bottomValue","isBottomOptimal","leftValue","isLeftOptimal","rightValue","isRightOptimal","noneOptimal","popoverRenderedSide","leftToSet","topToSet","leftValue2","rightToSet","bottomToSet","popoverArrow","popoverWidth","windowWidth","elementWidth","elementLeft","popoverHeight","windowHeight","elementTop","elementHeight","arrowSide","arrowAlignment","renderPopoverArrow","moveNext","activeIndex","nextStepIndex","drive","movePrevious","previousStepIndex","handleArrowLeft","handleArrowRight","_f","_g","_h","hasNextStep","hasPreviousStep","doneBtnText","allowsClosing","progressTextReplaced","configuredButtons","calculatedButtons","withOnDestroyStartedHook","activeOnDestroyed","onDestroyStarted","onDestroyed","interval","destroyEvents","destroyPopover","destroyHighlight","isActiveDummyElement","setSteps","getActiveIndex","isFirstStep","isLastStep","getActiveStep","getActiveElement","getPreviousElement","getPreviousStep","moveTo","localStorageKey","pointerContainerId","copilotJoinedContainerId","_canPlayAudio","GleapCopilotTours","_scrollListeners","_currentAnchor","_currentStep","_scrollDebounceTimer","productTourId","currentActiveIndex","productTourData","updatePointerPosition","onCompleteCallback","scrollableAncestors","getScrollableAncestors","_pointerContainer","yPosition","targetScrollPosition","scrollTo","smoothScrollToY","removeScrollListeners","pollCount","updateFinalPosition","isElementFullyVisible","targetX","targetY","containerWidthSpace","attachScrollListeners","currentAudio","pause","copilotInfoContainer","_GleapConfigManager$g","_GleapConfigManager$g2","_this$productTourData3","_this$productTourData4","_this$productTourData5","_this$productTourData6","_this$productTourData","_this$productTourData2","contrastColor","playVoice","gradient","svgMouse","infoBubble","kaiAvatar","kaiSlug","completeTour","canPlayAudio","supported","setupCopilotTour","showUnmuteModal","showAudioUnmuteModal","renderNextStep","_this$productTourData7","_this$productTourData8","_this$productTourData9","modalOverlay","modal","unmuteModalTitle","unmuteButton","unmuteModalButton","startAnywayButton","unmuteModalContinue","_this7","handleStep","gotToNextStep","_currentStep$inputTyp","proceedClickmode","storeUncompletedTour","inputType","handleInputEvent","_e$target","once","_currentStep$inputVal","inputValue","typeCharacter","wave","performClickAnimation","tempDiv","htmlToPlainText","readTime","wordCount","word","estimateReadTime","continueWithNoAudio","voice","elementPromise","maxAttempts","attempts","waitForElement","_self$productTourData","tourType","gleapTourObj","delay","manually","validateProductTour","onComplete","comData","clearUncompletedTour","startWithConfig","unmuted","driverSteps","isClickMode","isInputMode","isInteractionMode","hasSender","videoUrl","senderHTML","firstName","driverStep","buttons","backButton","allowKeyboardControl","nextText","doneText","prevText","_config$state","onDocumentClick","popoverElement","mediaElements","performRequentialRefresh","mediaElement","playingClass","playPauseContainer","videoElement","videoContainer","clickVideo","evnt","gleapTourPopover","_evnt$target","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","GleapAgentChat","_agentId","_onChange","onChange","_onError","_onReplyReceived","onReplyReceived","_onConversationCreated","onConversationCreated","_onToken","_messages","_conversationId","_isExecuting","_error","_destroyed","_abortController","_networkManager","_sendMessage","streamingId","isKai","isNewConversation","streamingIdx","role","toISOString","isStreaming","_notify","additionalContext","AbortController","streamAgent","runId","msg","abort","cancelStream","isExecuting","__originalGetContext","GleapChecklist","_HTMLElement","_assertThisInitialized","_callSuper","handleChecklistUpdate","handleSessionUpdate","_boundFloatingLauncherClick","handleFloatingLauncherClick","_boundFloatingCloseClick","handleFloatingCloseClick","_floatingHideTimeout","_inherits","_wrapNativeSuper","_boundHandleChecklistUpdate","_boundHandleSessionUpdate","_boundResizeHandler","handleResize","_checkSessionAndLoad","removeFloatingClickListeners","_hasLoaded","_isSessionReady","_initialActiveSet","renderResponse","updateActiveTaskMaxHeight","loadChecklist","renderChecklist","_getGleapSessionInstance","hasChecklistId","defaultValue","translateTextWithVars","validateChecklist","_isMock","isConnected","fetchChecklist","_isInitialLoad","_this3$checklistData$","_data$outbound","firstIncompleteIndex","findIndex","_session$gleapId","_session$gleapHash","checkedStep","makeRequest","updateData","_this$checklistData$o3","previousCompletedSteps","dataChanged","activeStepCompleted","currentlyActiveStepIndex","_this$checklistData$o","activeStepId","_this$checklistData$o2","nextActiveStep","setActiveStep","tasks","launcher","_outbound$config","_this$checklistData","renderDoneState","progressbarEnabled","doneSteps","_outbound$config2","_outbound$config3","nextIncompleteStep","titleText","_translateWithVars","subject","subtitleText","successTitle","successMessage","circumference","PI","computedOffset","isHeader","toFixed","_outbound$sender","infoEnabled","_translate","senderHtml","progressLabel","durationLabel","isTaskDone","badge","getCheckIcon","stepTitle","stepDescription","actionButtonText","actionTitle","actionHtml","markDoneLabel","markDoneHtml","allowMarkDone","taskClasses","_outbound$config4","_outbound$config5","_outbound$config6","floatingEnabled","renderFloatingLauncher","renderInfoSection","renderProgressSection","renderTasks","addTaskEventListeners","addFloatingClickListeners","toggleTask","taskBodyInner","task","newActiveStep","markDoneBtn","_this5$checklistData","previouslyActiveStep","allSteps","isModalOpen","tasksModal","updateChecklist","actionBtn","_this5$checklistData2","actionBody","openURL","actionOpenInNewTab","gleapError","previousActiveStep","tasksToToggle","forceOpen","taskElement","shouldOpen","taskBody","_heightListenerAdded","registerGleapChecklist","GleapAgentConversation","_injectIframe","_messageListener","_iframe","_sendConfig","_agentConvUrl","_data","bubbles","_this$_iframe","agentColor","emptyText","_config","_this$_iframe2","_this$_iframe3","registerGleapAgentComponents","offlineMode","hostname","injectNotificationUI","actions","_action$pageRules","_action$data","popupType","disableInAppNotifications","showNotification","showBanner","showModal","startProductTourWithConfig","globalData","replayData","getReplayData","hasReplayData","setTags","setUrlHandler","setAgentTools","sendAgentToolsUpdate","measure","ensureKeyboardFocusListeners","keyboardHeight","keyboardForcedClosed","KEYBOARD_OPEN_THRESHOLD","handleComposerBlur","keyboardFocusDoc","isContentEditable","scheduleUpdate","innerError","handleComposerFocus","frameDoc","pendingUpdate","settleTimer","SETTLE_DELAY","fixGleapHeight","checkForUncompletedTour","checkForUrlParams","disableQueryParams","urlParams","URLSearchParams","widget","conversationFlow","startConversation","feedbackFlow","surveyFlow","surveyFlowFormat","tourDelay","showWithAgent","setQuickActions","setPlaceholder","identifySession","updateSession","setMaxRequests","setOptions","cleanedData","formPreFill","toggleFeedbackButton","setAppVersionCode","setAppBuildNumber","setBannerUrl","setModalUrl","setTicketAttribute","unsetTicketAttribute","clearTicketAttributes","attachCustomData","setCustomData","removeCustomData","clearCustomData","playSound","showNotificationBadge","notificationInstance","setOverrideLanguage","softReInitialize","updateContact","registerAgentToolAction","registerAgentTool","registerCustomAction","buttonStyle","contrastButtonColor","contrastBackgroundColor","contrastHeaderColor","isDarkMode","headerDarkColor","subTextColor","backgroundColorHover","hoverHoverColor","buttonBorderRadius","containerRadius","chatRadius","formItemBorderRadius","formItemSmallBorderRadius","bottomInfoOffset","colorStyleSheet","zIndexBase","injectStyledCSS","replays","attachments","sendSilentCrashReportWithFormData","silentCrashReportSent","excludeDataCleaned","newFormData","hideBackButton","showBackButton","flow","question","fullResponse","collectionId","term","networkManager","checkStartUrl","startProductTourConfig","startURL","loadUncompletedTour","GleapActions","GLAction","urlParts","identifier","openHelpCenterCollection"],"sourceRoot":""}