{"version":3,"sources":["../node_modules/penpal/lib/constants.js","../node_modules/penpal/lib/errorCodes.js","../node_modules/penpal/lib/createDestructor.js","../node_modules/penpal/lib/getOriginFromSrc.js","../node_modules/penpal/lib/createLogger.js","../node_modules/penpal/lib/errorSerialization.js","../node_modules/penpal/lib/connectCallReceiver.js","../node_modules/penpal/lib/generateId.js","../node_modules/penpal/lib/connectCallSender.js","../node_modules/penpal/lib/connectToChild.js","../node_modules/penpal/lib/connectToParent.js","../node_modules/penpal/lib/index.js","../node_modules/compute-scroll-into-view/src/index.ts","../src/utils/dom.ts","../src/createController/BrowserController.ts","../src/utils/editUrl.ts","../src/createController/clickToEdit/constants.ts","../src/utils/rafThrottle.ts","../src/utils/scrollResizeCoordinator.ts","../src/utils/sharedResizeObserver.ts","../src/utils/HighlightOverlay.ts","../src/createController/domStamping/constants.ts","../src/createController/clickToEdit/findEditableTarget.ts","../src/createController/clickToEdit/ClickToEditManager.ts","../node_modules/@vercel/stega/dist/index.mjs","../src/stega/types.ts","../src/stega/decode.ts","../src/utils/createScheduler.ts","../src/createController/domStamping/DomStampingManager.ts","../src/createController/events/constants.ts","../src/createController/events/EventsManager.ts","../src/createController/flash/FlashAllManager.ts","../src/createController/flash/FlashItemManager.ts","../src/createController/NoopController.ts","../src/createController/index.ts"],"names":["e","_default","isElement","el","nodeType","canOverflow","overflow","skipOverflowHiddenElements","isScrollable","clientHeight","scrollHeight","clientWidth","scrollWidth","style","getComputedStyle","overflowY","overflowX","frame","ownerDocument","defaultView","frameElement","alignNearest","scrollingEdgeStart","scrollingEdgeEnd","scrollingSize","scrollingBorderStart","scrollingBorderEnd","elementEdgeStart","elementEdgeEnd","elementSize","getParentElement","element","parent","parentElement","getRootNode","host","compute","target","options","_a","_b","_c","_d","document","scrollMode","block","inline","boundary","checkBoundary","node","TypeError","scrollingElement","documentElement","frames","cursor","push","body","viewportWidth","window","visualViewport","width","innerWidth","viewportHeight","height","innerHeight","scrollX","scrollY","targetHeight","targetWidth","top","targetTop","right","targetRight","bottom","targetBottom","left","targetLeft","getBoundingClientRect","marginTop","marginRight","marginBottom","marginLeft","computedStyle","parseFloat","scrollMarginTop","scrollMarginRight","scrollMarginBottom","scrollMarginLeft","targetBlock","targetInline","computations","index","length","frameStyle","borderLeft","parseInt","borderLeftWidth","borderTop","borderTopWidth","borderRight","borderRightWidth","borderBottom","borderBottomWidth","blockScroll","inlineScroll","scrollbarWidth","offsetWidth","scrollbarHeight","offsetHeight","scaleX","scaleY","Math","max","scrollLeft","scrollTop","min","h","l","f","n","r","g","c","callbacks","_","t","o","stripStega","penpal"],"mappings":"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","file":"index.cjs","sourcesContent":["\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DATA_CLONE_ERROR = exports.MESSAGE = exports.REJECTED = exports.FULFILLED = exports.REPLY = exports.CALL = exports.HANDSHAKE_REPLY = exports.HANDSHAKE = void 0;\nconst HANDSHAKE = 'handshake';\nexports.HANDSHAKE = HANDSHAKE;\nconst HANDSHAKE_REPLY = 'handshake-reply';\nexports.HANDSHAKE_REPLY = HANDSHAKE_REPLY;\nconst CALL = 'call';\nexports.CALL = CALL;\nconst REPLY = 'reply';\nexports.REPLY = REPLY;\nconst FULFILLED = 'fulfilled';\nexports.FULFILLED = FULFILLED;\nconst REJECTED = 'rejected';\nexports.REJECTED = REJECTED;\nconst MESSAGE = 'message';\nexports.MESSAGE = MESSAGE;\nconst DATA_CLONE_ERROR = 'DataCloneError';\nexports.DATA_CLONE_ERROR = DATA_CLONE_ERROR;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ERR_NO_IFRAME_SRC = exports.ERR_NOT_IN_IFRAME = exports.ERR_CONNECTION_TIMEOUT = exports.ERR_CONNECTION_DESTROYED = void 0;\nconst ERR_CONNECTION_DESTROYED = 'ConnectionDestroyed';\nexports.ERR_CONNECTION_DESTROYED = ERR_CONNECTION_DESTROYED;\nconst ERR_CONNECTION_TIMEOUT = 'ConnectionTimeout';\nexports.ERR_CONNECTION_TIMEOUT = ERR_CONNECTION_TIMEOUT;\nconst ERR_NOT_IN_IFRAME = 'NotInIframe';\nexports.ERR_NOT_IN_IFRAME = ERR_NOT_IN_IFRAME;\nconst ERR_NO_IFRAME_SRC = 'NoIframeSrc';\nexports.ERR_NO_IFRAME_SRC = ERR_NO_IFRAME_SRC;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _default = () => {\n  const callbacks = [];\n  let destroyed = false;\n  return {\n    destroy() {\n      destroyed = true;\n      callbacks.forEach(callback => {\n        callback();\n      });\n    },\n\n    onDestroy(callback) {\n      destroyed ? callback() : callbacks.push(callback);\n    }\n\n  };\n};\n\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nconst DEFAULT_PORTS = {\n  'http:': '80',\n  'https:': '443'\n};\nconst URL_REGEX = /^(https?:)?\\/\\/([^/:]+)?(:(\\d+))?/;\nconst opaqueOriginSchemes = ['file:', 'data:'];\n/**\n * Converts a src value into an origin.\n * @param {string} src\n * @return {string} The URL's origin\n */\n\nvar _default = src => {\n  if (src && opaqueOriginSchemes.find(scheme => src.startsWith(scheme))) {\n    // The origin of the child document is an opaque origin and its\n    // serialization is \"null\"\n    // https://html.spec.whatwg.org/multipage/origin.html#origin\n    return 'null';\n  } // Note that if src is undefined, then srcdoc is being used instead of src\n  // and we can follow this same logic below to get the origin of the parent,\n  // which is the origin that we will need to use.\n\n\n  const location = document.location;\n  const regexResult = URL_REGEX.exec(src);\n  let protocol;\n  let hostname;\n  let port;\n\n  if (regexResult) {\n    // It's an absolute URL. Use the parsed info.\n    // regexResult[1] will be undefined if the URL starts with //\n    protocol = regexResult[1] ? regexResult[1] : location.protocol;\n    hostname = regexResult[2];\n    port = regexResult[4];\n  } else {\n    // It's a relative path. Use the current location's info.\n    protocol = location.protocol;\n    hostname = location.hostname;\n    port = location.port;\n  } // If the port is the default for the protocol, we don't want to add it to the origin string\n  // or it won't match the message's event.origin.\n\n\n  const portSuffix = port && port !== DEFAULT_PORTS[protocol] ? `:${port}` : '';\n  return `${protocol}//${hostname}${portSuffix}`;\n};\n\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _default = debug => {\n  return function () {\n    if (debug) {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      console.log('[Penpal]', ...args); // eslint-disable-line no-console\n    }\n  };\n};\n\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.deserializeError = exports.serializeError = void 0;\n\n/**\n * Converts an error object into a plain object.\n * @param {Error} Error object.\n * @returns {Object}\n */\nconst serializeError = (_ref) => {\n  let name = _ref.name,\n      message = _ref.message,\n      stack = _ref.stack;\n  return {\n    name,\n    message,\n    stack\n  };\n};\n/**\n * Converts a plain object into an error object.\n * @param {Object} Object with error properties.\n * @returns {Error}\n */\n\n\nexports.serializeError = serializeError;\n\nconst deserializeError = obj => {\n  const deserializedError = new Error();\n  Object.keys(obj).forEach(key => deserializedError[key] = obj[key]);\n  return deserializedError;\n};\n\nexports.deserializeError = deserializeError;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _constants = require(\"./constants\");\n\nvar _errorSerialization = require(\"./errorSerialization\");\n\n/**\n * Listens for \"call\" messages coming from the remote, executes the corresponding method, and\n * responds with the return value.\n * @param {Object} info Information about the local and remote windows.\n * @param {Object} methods The keys are the names of the methods that can be called by the remote\n * while the values are the method functions.\n * @param {Promise} destructionPromise A promise resolved when destroy() is called on the penpal\n * connection.\n * @returns {Function} A function that may be called to disconnect the receiver.\n */\nvar _default = (info, methods, log) => {\n  const localName = info.localName,\n        local = info.local,\n        remote = info.remote,\n        originForSending = info.originForSending,\n        originForReceiving = info.originForReceiving;\n  let destroyed = false;\n  log(`${localName}: Connecting call receiver`);\n\n  const handleMessageEvent = event => {\n    if (event.source !== remote || event.data.penpal !== _constants.CALL) {\n      return;\n    }\n\n    if (event.origin !== originForReceiving) {\n      log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n      return;\n    }\n\n    const _event$data = event.data,\n          methodName = _event$data.methodName,\n          args = _event$data.args,\n          id = _event$data.id;\n    log(`${localName}: Received ${methodName}() call`);\n\n    const createPromiseHandler = resolution => {\n      return returnValue => {\n        log(`${localName}: Sending ${methodName}() reply`);\n\n        if (destroyed) {\n          // It's possible to throw an error here, but it would need to be thrown asynchronously\n          // and would only be catchable using window.onerror. This is because the consumer\n          // is merely returning a value from their method and not calling any function\n          // that they could wrap in a try-catch. Even if the consumer were to catch the error,\n          // the value of doing so is questionable. Instead, we'll just log a message.\n          log(`${localName}: Unable to send ${methodName}() reply due to destroyed connection`);\n          return;\n        }\n\n        const message = {\n          penpal: _constants.REPLY,\n          id,\n          resolution,\n          returnValue\n        };\n\n        if (resolution === _constants.REJECTED && returnValue instanceof Error) {\n          message.returnValue = (0, _errorSerialization.serializeError)(returnValue);\n          message.returnValueIsError = true;\n        }\n\n        try {\n          remote.postMessage(message, originForSending);\n        } catch (err) {\n          // If a consumer attempts to send an object that's not cloneable (e.g., window),\n          // we want to ensure the receiver's promise gets rejected.\n          if (err.name === _constants.DATA_CLONE_ERROR) {\n            remote.postMessage({\n              penpal: _constants.REPLY,\n              id,\n              resolution: _constants.REJECTED,\n              returnValue: (0, _errorSerialization.serializeError)(err),\n              returnValueIsError: true\n            }, originForSending);\n          }\n\n          throw err;\n        }\n      };\n    };\n\n    new Promise(resolve => resolve(methods[methodName].apply(methods, args))).then(createPromiseHandler(_constants.FULFILLED), createPromiseHandler(_constants.REJECTED));\n  };\n\n  local.addEventListener(_constants.MESSAGE, handleMessageEvent);\n  return () => {\n    destroyed = true;\n    local.removeEventListener(_constants.MESSAGE, handleMessageEvent);\n  };\n};\n\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nlet id = 0;\n/**\n * @return {number} A unique ID (not universally unique)\n */\n\nvar _default = () => ++id;\n\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _constants = require(\"./constants\");\n\nvar _errorCodes = require(\"./errorCodes\");\n\nvar _generateId = _interopRequireDefault(require(\"./generateId\"));\n\nvar _errorSerialization = require(\"./errorSerialization\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Augments an object with methods that match those defined by the remote. When these methods are\n * called, a \"call\" message will be sent to the remote, the remote's corresponding method will be\n * executed, and the method's return value will be returned via a message.\n * @param {Object} callSender Sender object that should be augmented with methods.\n * @param {Object} info Information about the local and remote windows.\n * @param {Array} methodNames Names of methods available to be called on the remote.\n * @param {Promise} destructionPromise A promise resolved when destroy() is called on the penpal\n * connection.\n * @returns {Object} The call sender object with methods that may be called.\n */\nvar _default = (callSender, info, methodNames, destroyConnection, log) => {\n  const localName = info.localName,\n        local = info.local,\n        remote = info.remote,\n        originForSending = info.originForSending,\n        originForReceiving = info.originForReceiving;\n  let destroyed = false;\n  log(`${localName}: Connecting call sender`);\n\n  const createMethodProxy = methodName => {\n    return function () {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      log(`${localName}: Sending ${methodName}() call`); // This handles the case where the iframe has been removed from the DOM\n      // (and therefore its window closed), the consumer has not yet\n      // called destroy(), and the user calls a method exposed by\n      // the remote. We detect the iframe has been removed and force\n      // a destroy() immediately so that the consumer sees the error saying\n      // the connection has been destroyed. We wrap this check in a try catch\n      // because Edge throws an \"Object expected\" error when accessing\n      // contentWindow.closed on a contentWindow from an iframe that's been\n      // removed from the DOM.\n\n      let iframeRemoved;\n\n      try {\n        if (remote.closed) {\n          iframeRemoved = true;\n        }\n      } catch (e) {\n        iframeRemoved = true;\n      }\n\n      if (iframeRemoved) {\n        destroyConnection();\n      }\n\n      if (destroyed) {\n        const error = new Error(`Unable to send ${methodName}() call due ` + `to destroyed connection`);\n        error.code = _errorCodes.ERR_CONNECTION_DESTROYED;\n        throw error;\n      }\n\n      return new Promise((resolve, reject) => {\n        const id = (0, _generateId.default)();\n\n        const handleMessageEvent = event => {\n          if (event.source !== remote || event.data.penpal !== _constants.REPLY || event.data.id !== id) {\n            return;\n          }\n\n          if (event.origin !== originForReceiving) {\n            log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n            return;\n          }\n\n          log(`${localName}: Received ${methodName}() reply`);\n          local.removeEventListener(_constants.MESSAGE, handleMessageEvent);\n          let returnValue = event.data.returnValue;\n\n          if (event.data.returnValueIsError) {\n            returnValue = (0, _errorSerialization.deserializeError)(returnValue);\n          }\n\n          (event.data.resolution === _constants.FULFILLED ? resolve : reject)(returnValue);\n        };\n\n        local.addEventListener(_constants.MESSAGE, handleMessageEvent);\n        remote.postMessage({\n          penpal: _constants.CALL,\n          id,\n          methodName,\n          args\n        }, originForSending);\n      });\n    };\n  };\n\n  methodNames.reduce((api, methodName) => {\n    api[methodName] = createMethodProxy(methodName);\n    return api;\n  }, callSender);\n  return () => {\n    destroyed = true;\n  };\n};\n\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _constants = require(\"./constants\");\n\nvar _errorCodes = require(\"./errorCodes\");\n\nvar _createDestructor2 = _interopRequireDefault(require(\"./createDestructor\"));\n\nvar _getOriginFromSrc = _interopRequireDefault(require(\"./getOriginFromSrc\"));\n\nvar _createLogger = _interopRequireDefault(require(\"./createLogger\"));\n\nvar _connectCallReceiver = _interopRequireDefault(require(\"./connectCallReceiver\"));\n\nvar _connectCallSender = _interopRequireDefault(require(\"./connectCallSender\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst CHECK_IFRAME_IN_DOC_INTERVAL = 60000;\n/**\n * @typedef {Object} Child\n * @property {Promise} promise A promise which will be resolved once a connection has\n * been established.\n * @property {Function} destroy A method that, when called, will disconnect any\n * messaging channels. You may call this even before a connection has been established.\n */\n\n/**\n * Creates an iframe, loads a webpage into the URL, and attempts to establish communication with\n * the iframe.\n * @param {Object} options\n * @param {HTMLIframeElement} options.iframe The iframe to connect to.\n * @param {Object} [options.methods={}] Methods that may be called by the iframe.\n * @param {String} [options.childOrigin] The child origin to use to secure communication. If\n * not provided, the child origin will be derived from the iframe's src or srcdoc value.\n * @param {Number} [options.timeout] The amount of time, in milliseconds, Penpal should wait\n * for the child to respond before rejecting the connection promise.\n * @return {Child}\n */\n\nvar _default = (_ref) => {\n  let iframe = _ref.iframe,\n      _ref$methods = _ref.methods,\n      methods = _ref$methods === void 0 ? {} : _ref$methods,\n      childOrigin = _ref.childOrigin,\n      timeout = _ref.timeout,\n      debug = _ref.debug;\n  const log = (0, _createLogger.default)(debug);\n  const parent = window;\n\n  const _createDestructor = (0, _createDestructor2.default)(),\n        destroy = _createDestructor.destroy,\n        onDestroy = _createDestructor.onDestroy;\n\n  if (!childOrigin) {\n    if (!iframe.src && !iframe.srcdoc) {\n      const error = new Error('Iframe must have src or srcdoc property defined.');\n      error.code = _errorCodes.ERR_NO_IFRAME_SRC;\n      throw error;\n    }\n\n    childOrigin = (0, _getOriginFromSrc.default)(iframe.src);\n  } // If event.origin is \"null\", the remote protocol is\n  // file:, data:, and we must post messages with \"*\" as targetOrigin\n  // when sending and allow\n  // [1] https://developer.mozilla.org/fr/docs/Web/API/Window/postMessage#Utiliser_window.postMessage_dans_les_extensions\n\n\n  const originForSending = childOrigin === 'null' ? '*' : childOrigin;\n  const promise = new Promise((resolveConnectionPromise, reject) => {\n    let connectionTimeoutId;\n\n    if (timeout !== undefined) {\n      connectionTimeoutId = setTimeout(() => {\n        const error = new Error(`Connection to child timed out after ${timeout}ms`);\n        error.code = _errorCodes.ERR_CONNECTION_TIMEOUT;\n        reject(error);\n        destroy();\n      }, timeout);\n    } // We resolve the promise with the call sender. If the child reconnects (for example, after\n    // refreshing or navigating to another page that uses Penpal, we'll update the call sender\n    // with methods that match the latest provided by the child.\n\n\n    const callSender = {};\n    let receiverMethodNames;\n    let destroyCallReceiver;\n\n    const handleMessage = event => {\n      const child = iframe.contentWindow;\n\n      if (event.source !== child || event.data.penpal !== _constants.HANDSHAKE) {\n        return;\n      }\n\n      if (event.origin !== childOrigin) {\n        log(`Parent received handshake from origin ${event.origin} which did not match expected origin ${childOrigin}`);\n        return;\n      }\n\n      log('Parent: Received handshake, sending reply');\n      event.source.postMessage({\n        penpal: _constants.HANDSHAKE_REPLY,\n        methodNames: Object.keys(methods)\n      }, originForSending);\n      const info = {\n        localName: 'Parent',\n        local: parent,\n        remote: child,\n        originForSending: originForSending,\n        originForReceiving: childOrigin\n      }; // If the child reconnected, we need to destroy the previous call receiver before setting\n      // up a new one.\n\n      if (destroyCallReceiver) {\n        destroyCallReceiver();\n      }\n\n      destroyCallReceiver = (0, _connectCallReceiver.default)(info, methods, log);\n      onDestroy(destroyCallReceiver); // If the child reconnected, we need to remove the methods from the previous call receiver\n      // off the sender.\n\n      if (receiverMethodNames) {\n        receiverMethodNames.forEach(receiverMethodName => {\n          delete callSender[receiverMethodName];\n        });\n      }\n\n      receiverMethodNames = event.data.methodNames;\n      const destroyCallSender = (0, _connectCallSender.default)(callSender, info, receiverMethodNames, destroy, log);\n      onDestroy(destroyCallSender);\n      clearTimeout(connectionTimeoutId);\n      resolveConnectionPromise(callSender);\n    };\n\n    parent.addEventListener(_constants.MESSAGE, handleMessage);\n    log('Parent: Awaiting handshake'); // This is to prevent memory leaks when the iframe is removed\n    // from the document and the consumer hasn't called destroy().\n    // Without this, event listeners attached to the window would\n    // stick around and since the event handlers have a reference\n    // to the iframe in their closures, the iframe would stick around\n    // too.\n\n    var checkIframeInDocIntervalId = setInterval(() => {\n      if (!document.contains(iframe)) {\n        clearInterval(checkIframeInDocIntervalId);\n        destroy();\n      }\n    }, CHECK_IFRAME_IN_DOC_INTERVAL);\n    onDestroy(() => {\n      parent.removeEventListener(_constants.MESSAGE, handleMessage);\n      clearInterval(checkIframeInDocIntervalId);\n      const error = new Error('Connection destroyed');\n      error.code = _errorCodes.ERR_CONNECTION_DESTROYED;\n      reject(error);\n    });\n  });\n  return {\n    promise,\n    destroy\n  };\n};\n\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _constants = require(\"./constants\");\n\nvar _errorCodes = require(\"./errorCodes\");\n\nvar _createDestructor2 = _interopRequireDefault(require(\"./createDestructor\"));\n\nvar _connectCallReceiver = _interopRequireDefault(require(\"./connectCallReceiver\"));\n\nvar _connectCallSender = _interopRequireDefault(require(\"./connectCallSender\"));\n\nvar _createLogger = _interopRequireDefault(require(\"./createLogger\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @typedef {Object} Parent\n * @property {Promise} promise A promise which will be resolved once a connection has\n * been established.\n * @property {Function} destroy A method that, when called, will disconnect any\n * messaging channels. You may call this even before a connection has been established.\n */\n\n/**\n * Attempts to establish communication with the parent window.\n * @param {Object} options\n * @param {string} [options.parentOrigin=*] Valid parent origin used to restrict communication.\n * @param {Object} [options.methods={}] Methods that may be called by the parent window.\n * @param {Number} [options.timeout] The amount of time, in milliseconds, Penpal should wait\n * for the parent to respond before rejecting the connection promise.\n * @return {Parent}\n */\nvar _default = function _default() {\n  let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      _ref$parentOrigin = _ref.parentOrigin,\n      parentOrigin = _ref$parentOrigin === void 0 ? '*' : _ref$parentOrigin,\n      _ref$methods = _ref.methods,\n      methods = _ref$methods === void 0 ? {} : _ref$methods,\n      timeout = _ref.timeout,\n      debug = _ref.debug;\n\n  const log = (0, _createLogger.default)(debug);\n\n  if (window === window.top) {\n    const error = new Error('connectToParent() must be called within an iframe');\n    error.code = _errorCodes.ERR_NOT_IN_IFRAME;\n    throw error;\n  }\n\n  const _createDestructor = (0, _createDestructor2.default)(),\n        destroy = _createDestructor.destroy,\n        onDestroy = _createDestructor.onDestroy;\n\n  const child = window;\n  const parent = child.parent;\n  const promise = new Promise((resolveConnectionPromise, reject) => {\n    let connectionTimeoutId;\n\n    if (timeout !== undefined) {\n      connectionTimeoutId = setTimeout(() => {\n        const error = new Error(`Connection to parent timed out after ${timeout}ms`);\n        error.code = _errorCodes.ERR_CONNECTION_TIMEOUT;\n        reject(error);\n        destroy();\n      }, timeout);\n    }\n\n    const handleMessageEvent = event => {\n      // Under niche scenarios, we get into this function after\n      // the iframe has been removed from the DOM. In Edge, this\n      // results in \"Object expected\" errors being thrown when we\n      // try to access properties on window (global properties).\n      // For this reason, we try to access a global up front (clearTimeout)\n      // and if it fails we can assume the iframe has been removed\n      // and we ignore the message event.\n      try {\n        clearTimeout();\n      } catch (e) {\n        return;\n      }\n\n      if (event.source !== parent || event.data.penpal !== _constants.HANDSHAKE_REPLY) {\n        return;\n      }\n\n      if (parentOrigin !== '*' && parentOrigin !== event.origin) {\n        log(`Child received handshake reply from origin ${event.origin} which did not match expected origin ${parentOrigin}`);\n        return;\n      }\n\n      log('Child: Received handshake reply');\n      child.removeEventListener(_constants.MESSAGE, handleMessageEvent);\n      const info = {\n        localName: 'Child',\n        local: child,\n        remote: parent,\n        originForSending: event.origin === 'null' ? '*' : event.origin,\n        originForReceiving: event.origin\n      };\n      const callSender = {};\n      const destroyCallReceiver = (0, _connectCallReceiver.default)(info, methods, log);\n      onDestroy(destroyCallReceiver);\n      const destroyCallSender = (0, _connectCallSender.default)(callSender, info, event.data.methodNames, destroy, log);\n      onDestroy(destroyCallSender);\n      clearTimeout(connectionTimeoutId);\n      resolveConnectionPromise(callSender);\n    };\n\n    child.addEventListener(_constants.MESSAGE, handleMessageEvent);\n    onDestroy(() => {\n      child.removeEventListener(_constants.MESSAGE, handleMessageEvent);\n      const error = new Error('Connection destroyed');\n      error.code = _errorCodes.ERR_CONNECTION_DESTROYED;\n      reject(error);\n    });\n    log('Child: Sending handshake');\n    parent.postMessage({\n      penpal: _constants.HANDSHAKE,\n      methodNames: Object.keys(methods)\n    }, parentOrigin);\n  });\n  return {\n    promise,\n    destroy\n  };\n};\n\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _connectToChild = _interopRequireDefault(require(\"./connectToChild\"));\n\nvar _connectToParent = _interopRequireDefault(require(\"./connectToParent\"));\n\nvar _errorCodes = require(\"./errorCodes\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _default = {\n  ERR_CONNECTION_DESTROYED: _errorCodes.ERR_CONNECTION_DESTROYED,\n  ERR_CONNECTION_TIMEOUT: _errorCodes.ERR_CONNECTION_TIMEOUT,\n  ERR_NOT_IN_IFRAME: _errorCodes.ERR_NOT_IN_IFRAME,\n  ERR_NO_IFRAME_SRC: _errorCodes.ERR_NO_IFRAME_SRC,\n  connectToChild: _connectToChild.default,\n  connectToParent: _connectToParent.default\n};\nexports.default = _default;\nmodule.exports = exports.default;","// Compute what scrolling needs to be done on required scrolling boxes for target to be in view\n\n// The type names here are named after the spec to make it easier to find more information around what they mean:\n// To reduce churn and reduce things that need be maintained things from the official TS DOM library is used here\n// https://drafts.csswg.org/cssom-view/\n\n// For a definition on what is \"block flow direction\" exactly, check this: https://drafts.csswg.org/css-writing-modes-4/#block-flow-direction\n\n/**\n * This new option is tracked in this PR, which is the most likely candidate at the time: https://github.com/w3c/csswg-drafts/pull/1805\n * @public\n */\nexport type ScrollMode = 'always' | 'if-needed'\n\n/** @public */\nexport interface Options {\n  /**\n   * Control the logical scroll position on the y-axis. The spec states that the `block` direction is related to the [writing-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/writing-mode), but this is not implemented yet in this library.\n   * This means that `block: 'start'` aligns to the top edge and `block: 'end'` to the bottom.\n   * @defaultValue 'center'\n   */\n  block?: ScrollLogicalPosition\n  /**\n   * Like `block` this is affected by the [writing-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/writing-mode). In left-to-right pages `inline: 'start'` will align to the left edge. In right-to-left it should be flipped. This will be supported in a future release.\n   * @defaultValue 'nearest'\n   */\n  inline?: ScrollLogicalPosition\n  /**\n   * This is a proposed addition to the spec that you can track here: https://github.com/w3c/csswg-drafts/pull/5677\n   *\n   * This library will be updated to reflect any changes to the spec and will provide a migration path.\n   * To be backwards compatible with `Element.scrollIntoViewIfNeeded` if something is not 100% visible it will count as \"needs scrolling\". If you need a different visibility ratio your best option would be to implement an [Intersection Observer](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API).\n   * @defaultValue 'always'\n   */\n  scrollMode?: ScrollMode\n  /**\n   * By default there is no boundary. All the parent elements of your target is checked until it reaches the viewport ([`document.scrollingElement`](https://developer.mozilla.org/en-US/docs/Web/API/document/scrollingElement)) when calculating layout and what to scroll.\n   * By passing a boundary you can short-circuit this loop depending on your needs:\n   * \n   * - Prevent the browser window from scrolling.\n   * - Scroll elements into view in a list, without scrolling container elements.\n   * \n   * You can also pass a function to do more dynamic checks to override the scroll scoping:\n   * \n   * ```js\n   * let actions = compute(target, {\n   *   boundary: (parent) => {\n   *     // By default `overflow: hidden` elements are allowed, only `overflow: visible | clip` is skipped as\n   *     // this is required by the CSSOM spec\n   *     if (getComputedStyle(parent)['overflow'] === 'hidden') {\n   *       return false\n   *     }\n\n   *     return true\n   *   },\n   * })\n   * ```\n   * @defaultValue null\n   */\n  boundary?: Element | ((parent: Element) => boolean) | null\n  /**\n   * New option that skips auto-scrolling all nodes with overflow: hidden set\n   * See FF implementation: https://hg.mozilla.org/integration/fx-team/rev/c48c3ec05012#l7.18\n   * @defaultValue false\n   * @public\n   */\n  skipOverflowHiddenElements?: boolean\n}\n\n/** @public */\nexport interface ScrollAction {\n  el: Element\n  top: number\n  left: number\n}\n\n// @TODO better shadowdom test, 11 = document fragment\nconst isElement = (el: any): el is Element =>\n  typeof el === 'object' && el != null && el.nodeType === 1\n\nconst canOverflow = (\n  overflow: string | null,\n  skipOverflowHiddenElements?: boolean\n) => {\n  if (skipOverflowHiddenElements && overflow === 'hidden') {\n    return false\n  }\n\n  return overflow !== 'visible' && overflow !== 'clip'\n}\n\nconst getFrameElement = (el: Element) => {\n  if (!el.ownerDocument || !el.ownerDocument.defaultView) {\n    return null\n  }\n\n  try {\n    return el.ownerDocument.defaultView.frameElement\n  } catch (e) {\n    return null\n  }\n}\n\nconst isHiddenByFrame = (el: Element): boolean => {\n  const frame = getFrameElement(el)\n  if (!frame) {\n    return false\n  }\n\n  return (\n    frame.clientHeight < el.scrollHeight || frame.clientWidth < el.scrollWidth\n  )\n}\n\nconst isScrollable = (el: Element, skipOverflowHiddenElements?: boolean) => {\n  if (el.clientHeight < el.scrollHeight || el.clientWidth < el.scrollWidth) {\n    const style = getComputedStyle(el, null)\n    return (\n      canOverflow(style.overflowY, skipOverflowHiddenElements) ||\n      canOverflow(style.overflowX, skipOverflowHiddenElements) ||\n      isHiddenByFrame(el)\n    )\n  }\n\n  return false\n}\n/**\n * Find out which edge to align against when logical scroll position is \"nearest\"\n * Interesting fact: \"nearest\" works similarily to \"if-needed\", if the element is fully visible it will not scroll it\n *\n * Legends:\n * ┌────────┐ ┏ ━ ━ ━ ┓\n * │ target │   frame\n * └────────┘ ┗ ━ ━ ━ ┛\n */\nconst alignNearest = (\n  scrollingEdgeStart: number,\n  scrollingEdgeEnd: number,\n  scrollingSize: number,\n  scrollingBorderStart: number,\n  scrollingBorderEnd: number,\n  elementEdgeStart: number,\n  elementEdgeEnd: number,\n  elementSize: number\n) => {\n  /**\n   * If element edge A and element edge B are both outside scrolling box edge A and scrolling box edge B\n   *\n   *          ┌──┐\n   *        ┏━│━━│━┓\n   *          │  │\n   *        ┃ │  │ ┃        do nothing\n   *          │  │\n   *        ┗━│━━│━┛\n   *          └──┘\n   *\n   *  If element edge C and element edge D are both outside scrolling box edge C and scrolling box edge D\n   *\n   *    ┏ ━ ━ ━ ━ ┓\n   *   ┌───────────┐\n   *   │┃         ┃│        do nothing\n   *   └───────────┘\n   *    ┗ ━ ━ ━ ━ ┛\n   */\n  if (\n    (elementEdgeStart < scrollingEdgeStart &&\n      elementEdgeEnd > scrollingEdgeEnd) ||\n    (elementEdgeStart > scrollingEdgeStart && elementEdgeEnd < scrollingEdgeEnd)\n  ) {\n    return 0\n  }\n\n  /**\n   * If element edge A is outside scrolling box edge A and element height is less than scrolling box height\n   *\n   *          ┌──┐\n   *        ┏━│━━│━┓         ┏━┌━━┐━┓\n   *          └──┘             │  │\n   *  from  ┃      ┃     to  ┃ └──┘ ┃\n   *\n   *        ┗━ ━━ ━┛         ┗━ ━━ ━┛\n   *\n   * If element edge B is outside scrolling box edge B and element height is greater than scrolling box height\n   *\n   *        ┏━ ━━ ━┓         ┏━┌━━┐━┓\n   *                           │  │\n   *  from  ┃ ┌──┐ ┃     to  ┃ │  │ ┃\n   *          │  │             │  │\n   *        ┗━│━━│━┛         ┗━│━━│━┛\n   *          │  │             └──┘\n   *          │  │\n   *          └──┘\n   *\n   * If element edge C is outside scrolling box edge C and element width is less than scrolling box width\n   *\n   *       from                 to\n   *    ┏ ━ ━ ━ ━ ┓         ┏ ━ ━ ━ ━ ┓\n   *  ┌───┐                 ┌───┐\n   *  │ ┃ │       ┃         ┃   │     ┃\n   *  └───┘                 └───┘\n   *    ┗ ━ ━ ━ ━ ┛         ┗ ━ ━ ━ ━ ┛\n   *\n   * If element edge D is outside scrolling box edge D and element width is greater than scrolling box width\n   *\n   *       from                 to\n   *    ┏ ━ ━ ━ ━ ┓         ┏ ━ ━ ━ ━ ┓\n   *        ┌───────────┐   ┌───────────┐\n   *    ┃   │     ┃     │   ┃         ┃ │\n   *        └───────────┘   └───────────┘\n   *    ┗ ━ ━ ━ ━ ┛         ┗ ━ ━ ━ ━ ┛\n   */\n  if (\n    (elementEdgeStart <= scrollingEdgeStart && elementSize <= scrollingSize) ||\n    (elementEdgeEnd >= scrollingEdgeEnd && elementSize >= scrollingSize)\n  ) {\n    return elementEdgeStart - scrollingEdgeStart - scrollingBorderStart\n  }\n\n  /**\n   * If element edge B is outside scrolling box edge B and element height is less than scrolling box height\n   *\n   *        ┏━ ━━ ━┓         ┏━ ━━ ━┓\n   *\n   *  from  ┃      ┃     to  ┃ ┌──┐ ┃\n   *          ┌──┐             │  │\n   *        ┗━│━━│━┛         ┗━└━━┘━┛\n   *          └──┘\n   *\n   * If element edge A is outside scrolling box edge A and element height is greater than scrolling box height\n   *\n   *          ┌──┐\n   *          │  │\n   *          │  │             ┌──┐\n   *        ┏━│━━│━┓         ┏━│━━│━┓\n   *          │  │             │  │\n   *  from  ┃ └──┘ ┃     to  ┃ │  │ ┃\n   *                           │  │\n   *        ┗━ ━━ ━┛         ┗━└━━┘━┛\n   *\n   * If element edge C is outside scrolling box edge C and element width is greater than scrolling box width\n   *\n   *           from                 to\n   *        ┏ ━ ━ ━ ━ ┓         ┏ ━ ━ ━ ━ ┓\n   *  ┌───────────┐           ┌───────────┐\n   *  │     ┃     │   ┃       │ ┃         ┃\n   *  └───────────┘           └───────────┘\n   *        ┗ ━ ━ ━ ━ ┛         ┗ ━ ━ ━ ━ ┛\n   *\n   * If element edge D is outside scrolling box edge D and element width is less than scrolling box width\n   *\n   *           from                 to\n   *        ┏ ━ ━ ━ ━ ┓         ┏ ━ ━ ━ ━ ┓\n   *                ┌───┐             ┌───┐\n   *        ┃       │ ┃ │       ┃     │   ┃\n   *                └───┘             └───┘\n   *        ┗ ━ ━ ━ ━ ┛         ┗ ━ ━ ━ ━ ┛\n   *\n   */\n  if (\n    (elementEdgeEnd > scrollingEdgeEnd && elementSize < scrollingSize) ||\n    (elementEdgeStart < scrollingEdgeStart && elementSize > scrollingSize)\n  ) {\n    return elementEdgeEnd - scrollingEdgeEnd + scrollingBorderEnd\n  }\n\n  return 0\n}\n\nconst getParentElement = (element: Node): Element | null => {\n  const parent = element.parentElement\n  if (parent == null) {\n    return (element.getRootNode() as ShadowRoot).host || null\n  }\n  return parent\n}\n\nconst getScrollMargins = (target: Element) => {\n  const computedStyle = window.getComputedStyle(target)\n  return {\n    top: parseFloat(computedStyle.scrollMarginTop) || 0,\n    right: parseFloat(computedStyle.scrollMarginRight) || 0,\n    bottom: parseFloat(computedStyle.scrollMarginBottom) || 0,\n    left: parseFloat(computedStyle.scrollMarginLeft) || 0,\n  }\n}\n\n/** @public */\nexport const compute = (target: Element, options: Options): ScrollAction[] => {\n  if (typeof document === 'undefined') {\n    // If there's no DOM we assume it's not in a browser environment\n    return []\n  }\n\n  const { scrollMode, block, inline, boundary, skipOverflowHiddenElements } =\n    options\n  // Allow using a callback to check the boundary\n  // The default behavior is to check if the current target matches the boundary element or not\n  // If undefined it'll check that target is never undefined (can happen as we recurse up the tree)\n  const checkBoundary =\n    typeof boundary === 'function' ? boundary : (node: any) => node !== boundary\n\n  if (!isElement(target)) {\n    throw new TypeError('Invalid target')\n  }\n\n  // Used to handle the top most element that can be scrolled\n  const scrollingElement = document.scrollingElement || document.documentElement\n\n  // Collect all the scrolling boxes, as defined in the spec: https://drafts.csswg.org/cssom-view/#scrolling-box\n  const frames: Element[] = []\n  let cursor: Element | null = target\n  while (isElement(cursor) && checkBoundary(cursor)) {\n    // Move cursor to parent\n    cursor = getParentElement(cursor)\n\n    // Stop when we reach the viewport\n    if (cursor === scrollingElement) {\n      frames.push(cursor)\n      break\n    }\n\n    // Skip document.body if it's not the scrollingElement and documentElement isn't independently scrollable\n    if (\n      cursor != null &&\n      cursor === document.body &&\n      isScrollable(cursor) &&\n      !isScrollable(document.documentElement)\n    ) {\n      continue\n    }\n\n    // Now we check if the element is scrollable, this code only runs if the loop haven't already hit the viewport or a custom boundary\n    if (cursor != null && isScrollable(cursor, skipOverflowHiddenElements)) {\n      frames.push(cursor)\n    }\n  }\n\n  // Support pinch-zooming properly, making sure elements scroll into the visual viewport\n  // Browsers that don't support visualViewport will report the layout viewport dimensions on document.documentElement.clientWidth/Height\n  // and viewport dimensions on window.innerWidth/Height\n  // https://www.quirksmode.org/mobile/viewports2.html\n  // https://bokand.github.io/viewport/index.html\n  const viewportWidth = window.visualViewport?.width ?? innerWidth\n  const viewportHeight = window.visualViewport?.height ?? innerHeight\n  const { scrollX, scrollY } = window\n\n  const {\n    height: targetHeight,\n    width: targetWidth,\n    top: targetTop,\n    right: targetRight,\n    bottom: targetBottom,\n    left: targetLeft,\n  } = target.getBoundingClientRect()\n  const {\n    top: marginTop,\n    right: marginRight,\n    bottom: marginBottom,\n    left: marginLeft,\n  } = getScrollMargins(target)\n\n  // These values mutate as we loop through and generate scroll coordinates\n  let targetBlock: number =\n    block === 'start' || block === 'nearest'\n      ? targetTop - marginTop\n      : block === 'end'\n      ? targetBottom + marginBottom\n      : targetTop + targetHeight / 2 - marginTop + marginBottom // block === 'center\n  let targetInline: number =\n    inline === 'center'\n      ? targetLeft + targetWidth / 2 - marginLeft + marginRight\n      : inline === 'end'\n      ? targetRight + marginRight\n      : targetLeft - marginLeft // inline === 'start || inline === 'nearest\n\n  // Collect new scroll positions\n  const computations: ScrollAction[] = []\n  // In chrome there's no longer a difference between caching the `frames.length` to a var or not, so we don't in this case (size > speed anyways)\n  for (let index = 0; index < frames.length; index++) {\n    const frame = frames[index]\n\n    // @TODO add a shouldScroll hook here that allows userland code to take control\n\n    const { height, width, top, right, bottom, left } =\n      frame.getBoundingClientRect()\n\n    // If the element is already visible we can end it here\n    // @TODO targetBlock and targetInline should be taken into account to be compliant with https://github.com/w3c/csswg-drafts/pull/1805/files#diff-3c17f0e43c20f8ecf89419d49e7ef5e0R1333\n    if (\n      scrollMode === 'if-needed' &&\n      targetTop >= 0 &&\n      targetLeft >= 0 &&\n      targetBottom <= viewportHeight &&\n      targetRight <= viewportWidth &&\n      // scrollingElement is added to the frames array even if it's not scrollable, in which case checking its bounds is not required\n      ((frame === scrollingElement && !isScrollable(frame)) ||\n        (targetTop >= top &&\n          targetBottom <= bottom &&\n          targetLeft >= left &&\n          targetRight <= right))\n    ) {\n      // Break the loop and return the computations for things that are not fully visible\n      return computations\n    }\n\n    const frameStyle = getComputedStyle(frame)\n    const borderLeft = parseInt(frameStyle.borderLeftWidth as string, 10)\n    const borderTop = parseInt(frameStyle.borderTopWidth as string, 10)\n    const borderRight = parseInt(frameStyle.borderRightWidth as string, 10)\n    const borderBottom = parseInt(frameStyle.borderBottomWidth as string, 10)\n\n    let blockScroll: number = 0\n    let inlineScroll: number = 0\n\n    // The property existance checks for offfset[Width|Height] is because only HTMLElement objects have them, but any Element might pass by here\n    // @TODO find out if the \"as HTMLElement\" overrides can be dropped\n    const scrollbarWidth =\n      'offsetWidth' in frame\n        ? (frame as HTMLElement).offsetWidth -\n          (frame as HTMLElement).clientWidth -\n          borderLeft -\n          borderRight\n        : 0\n    const scrollbarHeight =\n      'offsetHeight' in frame\n        ? (frame as HTMLElement).offsetHeight -\n          (frame as HTMLElement).clientHeight -\n          borderTop -\n          borderBottom\n        : 0\n\n    const scaleX =\n      'offsetWidth' in frame\n        ? (frame as HTMLElement).offsetWidth === 0\n          ? 0\n          : width / (frame as HTMLElement).offsetWidth\n        : 0\n    const scaleY =\n      'offsetHeight' in frame\n        ? (frame as HTMLElement).offsetHeight === 0\n          ? 0\n          : height / (frame as HTMLElement).offsetHeight\n        : 0\n\n    if (scrollingElement === frame) {\n      // Handle viewport logic (document.documentElement or document.body)\n\n      if (block === 'start') {\n        blockScroll = targetBlock\n      } else if (block === 'end') {\n        blockScroll = targetBlock - viewportHeight\n      } else if (block === 'nearest') {\n        blockScroll = alignNearest(\n          scrollY,\n          scrollY + viewportHeight,\n          viewportHeight,\n          borderTop,\n          borderBottom,\n          scrollY + targetBlock,\n          scrollY + targetBlock + targetHeight,\n          targetHeight\n        )\n      } else {\n        // block === 'center' is the default\n        blockScroll = targetBlock - viewportHeight / 2\n      }\n\n      if (inline === 'start') {\n        inlineScroll = targetInline\n      } else if (inline === 'center') {\n        inlineScroll = targetInline - viewportWidth / 2\n      } else if (inline === 'end') {\n        inlineScroll = targetInline - viewportWidth\n      } else {\n        // inline === 'nearest' is the default\n        inlineScroll = alignNearest(\n          scrollX,\n          scrollX + viewportWidth,\n          viewportWidth,\n          borderLeft,\n          borderRight,\n          scrollX + targetInline,\n          scrollX + targetInline + targetWidth,\n          targetWidth\n        )\n      }\n\n      // Apply scroll position offsets and ensure they are within bounds\n      // @TODO add more test cases to cover this 100%\n      blockScroll = Math.max(0, blockScroll + scrollY)\n      inlineScroll = Math.max(0, inlineScroll + scrollX)\n    } else {\n      // Handle each scrolling frame that might exist between the target and the viewport\n      if (block === 'start') {\n        blockScroll = targetBlock - top - borderTop\n      } else if (block === 'end') {\n        blockScroll = targetBlock - bottom + borderBottom + scrollbarHeight\n      } else if (block === 'nearest') {\n        blockScroll = alignNearest(\n          top,\n          bottom,\n          height,\n          borderTop,\n          borderBottom + scrollbarHeight,\n          targetBlock,\n          targetBlock + targetHeight,\n          targetHeight\n        )\n      } else {\n        // block === 'center' is the default\n        blockScroll = targetBlock - (top + height / 2) + scrollbarHeight / 2\n      }\n\n      if (inline === 'start') {\n        inlineScroll = targetInline - left - borderLeft\n      } else if (inline === 'center') {\n        inlineScroll = targetInline - (left + width / 2) + scrollbarWidth / 2\n      } else if (inline === 'end') {\n        inlineScroll = targetInline - right + borderRight + scrollbarWidth\n      } else {\n        // inline === 'nearest' is the default\n        inlineScroll = alignNearest(\n          left,\n          right,\n          width,\n          borderLeft,\n          borderRight + scrollbarWidth,\n          targetInline,\n          targetInline + targetWidth,\n          targetWidth\n        )\n      }\n\n      const { scrollLeft, scrollTop } = frame\n      // Ensure scroll coordinates are not out of bounds while applying scroll offsets\n      blockScroll =\n        scaleY === 0\n          ? 0\n          : Math.max(\n              0,\n              Math.min(\n                scrollTop + blockScroll / scaleY,\n                frame.scrollHeight - height / scaleY + scrollbarHeight\n              )\n            )\n      inlineScroll =\n        scaleX === 0\n          ? 0\n          : Math.max(\n              0,\n              Math.min(\n                scrollLeft + inlineScroll / scaleX,\n                frame.scrollWidth - width / scaleX + scrollbarWidth\n              )\n            )\n\n      // Cache the offset so that parent frames can scroll this into view correctly\n      targetBlock += scrollTop - blockScroll\n      targetInline += scrollLeft - inlineScroll\n    }\n\n    computations.push({ el: frame, top: blockScroll, left: inlineScroll })\n  }\n\n  return computations\n}\n","import { type Options, compute as computeScrollIntoView } from 'compute-scroll-into-view';\n\nexport function resolveDocument(root: ParentNode): Document {\n  const docCtor = typeof Document !== 'undefined' ? Document : undefined;\n  const globalDoc = typeof document !== 'undefined' ? document : undefined;\n\n  if (docCtor && root instanceof docCtor) {\n    return root as Document;\n  }\n\n  const finalDoc = root.ownerDocument ?? globalDoc ?? null;\n\n  if (!finalDoc) {\n    throw new Error('Unable to resolve document');\n  }\n\n  return finalDoc;\n}\n\nexport function inBrowser() {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\nexport function inIframe() {\n  return typeof window !== 'undefined' && window.parent !== window;\n}\n\nexport function toCompletePath(urlString: string) {\n  const url = new URL(urlString, 'http://example.com');\n  return url.pathname + url.search + url.hash;\n}\n\nexport function isMousePointerEvent(event: Event): event is PointerEvent {\n  if (typeof PointerEvent !== 'undefined') {\n    return event instanceof PointerEvent;\n  }\n  return (\n    typeof (event as PointerEvent).pointerType === 'string' &&\n    (event as PointerEvent).pointerType === 'mouse'\n  );\n}\n\nexport function isMouseEvent(event: Event): event is MouseEvent {\n  if (typeof MouseEvent !== 'undefined') {\n    return event instanceof MouseEvent;\n  }\n  return typeof (event as MouseEvent).button === 'number';\n}\n\nexport function isKeyboardEvent(event: Event): event is KeyboardEvent {\n  if (typeof KeyboardEvent !== 'undefined') {\n    return event instanceof KeyboardEvent;\n  }\n  return typeof (event as KeyboardEvent).key === 'string';\n}\n\nexport function getDocumentWindow(document: Document) {\n  return document.defaultView ?? (typeof window !== 'undefined' ? window : null);\n}\n\nexport function isEditableElementFocused(document: Document): boolean {\n  const active = document.activeElement as HTMLElement | null;\n  if (!active) {\n    return false;\n  }\n  const tag = active.tagName;\n  if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') {\n    return true;\n  }\n  return active.isContentEditable;\n}\n\n/** Compute the bounding box for the target element, ignoring zero-size or hidden nodes. */\nexport function measure(\n  el: Element\n): { top: number; left: number; width: number; height: number } | null {\n  if (typeof el.getBoundingClientRect !== 'function') {\n    return null;\n  }\n  const rect = el.getBoundingClientRect();\n  if (rect.width === 0 && rect.height === 0) {\n    return null;\n  }\n  if (!isElementVisible(el as HTMLElement)) {\n    return null;\n  }\n  return {\n    top: rect.top,\n    left: rect.left,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nexport function sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function abortableSleep(ms: number, signal: AbortSignal): Promise<void> {\n  return new Promise<void>((resolve, reject) => {\n    if (ms <= 0) {\n      // Still respect immediate abort\n      if (signal.aborted) {\n        reject(new Error('Animation cancelled'));\n      } else {\n        resolve();\n      }\n      return;\n    }\n\n    const onAbort = () => {\n      clearTimeout(timer);\n      signal.removeEventListener('abort', onAbort);\n      reject(new Error('Animation cancelled'));\n    };\n\n    const timer = setTimeout(() => {\n      signal.removeEventListener('abort', onAbort);\n      resolve();\n    }, ms);\n\n    signal.addEventListener('abort', onAbort);\n  });\n}\n\nexport async function waitTwoRafs() {\n  return new Promise((resolve) =>\n    requestAnimationFrame(() => {\n      requestAnimationFrame(resolve);\n    })\n  );\n}\n\nexport function inViewport(element: Element) {\n  const document = resolveDocument(element);\n  const rect = element.getBoundingClientRect();\n  const docWindow = getDocumentWindow(document);\n\n  if (!docWindow) {\n    return false;\n  }\n\n  const viewportHeight = docWindow.innerHeight || document.documentElement.clientHeight;\n  const viewportWidth = docWindow.innerWidth || document.documentElement.clientWidth;\n\n  return (\n    rect.top < viewportHeight && rect.bottom > 0 && rect.left < viewportWidth && rect.right > 0\n  );\n}\n\nexport function getScrollDistance(el: Element, options: Options) {\n  const actions = computeScrollIntoView(el, options);\n\n  let distance = 0;\n\n  for (const action of actions) {\n    const el = action.el as HTMLElement;\n    const dy = Math.abs(action.top - el.scrollTop);\n    const dx = Math.abs(action.left - el.scrollLeft);\n    distance += dx + dy;\n  }\n\n  return distance;\n}\n\n/**\n * Scrolls to the nearest target element if none of the targets are currently visible.\n * Finds the target that requires the least scrolling distance and smoothly scrolls to it.\n *\n * @param targets - Array of elements to consider for scrolling\n * @param signal - AbortSignal to cancel the operation\n * @returns Promise that resolves when scrolling is complete or if no scrolling is needed\n */\nexport async function maybeScrollToNearestTarget(\n  targets: HTMLElement[],\n  signal: AbortSignal\n): Promise<void> {\n  const someTargetIsVisible = targets.some(inViewport);\n\n  if (someTargetIsVisible) {\n    return;\n  }\n\n  let best: HTMLElement | null = null;\n  let bestDistance = Number.POSITIVE_INFINITY;\n\n  for (const target of targets) {\n    const dist = getScrollDistance(target, {\n      scrollMode: 'if-needed',\n      block: 'center',\n      inline: 'nearest'\n    });\n\n    if (dist < bestDistance && isElementVisible(target)) {\n      bestDistance = dist;\n      best = target;\n    }\n  }\n\n  if (!best) {\n    return;\n  }\n\n  best.scrollIntoView({ behavior: 'smooth', block: 'center' });\n\n  await waitUntilScrolledToTarget(best, signal);\n}\n\nexport function isElementVisible(el: HTMLElement | null): boolean {\n  if (!el) return false;\n\n  const style = window.getComputedStyle(el);\n\n  if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') {\n    return false;\n  }\n\n  if (el.offsetWidth === 0 && el.offsetHeight === 0) {\n    return false;\n  }\n\n  return isAncestorVisible(el.parentElement);\n}\n\nfunction isAncestorVisible(el: HTMLElement | null): boolean {\n  if (!el) return true;\n\n  const style = window.getComputedStyle(el);\n\n  if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') {\n    return false;\n  }\n\n  return isAncestorVisible(el.parentElement);\n}\n\nasync function waitUntilScrolledToTarget(target: HTMLElement, signal: AbortSignal) {\n  const document = resolveDocument(target);\n  const window = getDocumentWindow(document);\n\n  if (!window) {\n    await abortableSleep(500, signal);\n    return;\n  }\n\n  await new Promise<void>((resolve, reject) => {\n    if (signal.aborted) {\n      reject(new DOMException('Aborted', 'AbortError'));\n      return;\n    }\n\n    let rafId: number;\n\n    const check = () => {\n      if (signal.aborted) {\n        cancelAnimationFrame(rafId);\n        reject(new DOMException('Aborted', 'AbortError'));\n        return;\n      }\n\n      const distance = getScrollDistance(target, {\n        scrollMode: 'if-needed',\n        block: 'center',\n        inline: 'nearest'\n      });\n\n      // When distance is basically zero, scrolling is done.\n      if (Math.abs(distance) < 1) {\n        resolve();\n        return;\n      }\n\n      rafId = requestAnimationFrame(check);\n    };\n\n    rafId = requestAnimationFrame(check);\n  });\n\n  await abortableSleep(100, signal);\n}\n","/**\n * Browser-only implementation that orchestrates stamping and click-to-edit managers.\n * Acts as a lightweight coordinator handling shared concerns like Web Previews plugin connection and state events.\n */\nimport penpal, { type AsyncMethodReturns } from 'penpal';\nimport {\n  getDocumentWindow,\n  inIframe,\n  isEditableElementFocused,\n  isKeyboardEvent,\n  isMouseEvent,\n  resolveDocument,\n  toCompletePath\n} from '../utils/dom.js';\nimport { extractInfo, extractItemIdsPerEnvironment } from '../utils/editUrl.js';\nimport { ClickToEditManager } from './clickToEdit/ClickToEditManager.js';\nimport { DEFAULT_HUE, buildOverlayColors, type OverlayColors } from './clickToEdit/constants.js';\nimport { DomStampingManager } from './domStamping/DomStampingManager.js';\nimport {\n  AUTOMATIC_TARGET_STAMP_ATTRIBUTE,\n  MANUAL_TARGET_STAMP_ATTRIBUTE,\n  STAMPED_ELEMENTS_SELECTOR\n} from './domStamping/constants.js';\nimport { EventsManager } from './events/EventsManager.js';\nimport { FlashAllManager } from './flash/FlashAllManager.js';\nimport { FlashItemManager } from './flash/FlashItemManager.js';\nimport type { Controller, CreateControllerOptions, StampSummary } from './types.js';\nimport type { WebPreviewsPluginMethods } from './webPreviewsPlugin/types.js';\n\nexport class BrowserController implements Controller {\n  private readonly wrapperElement: ParentNode;\n  private readonly onNavigateTo?: (path: string) => void;\n  private readonly overlayColors: OverlayColors;\n  private readonly eventsManager: EventsManager;\n  private readonly clickToEditManager: ClickToEditManager;\n  private readonly stampingManager: DomStampingManager;\n  private readonly flashAllManager: FlashAllManager;\n  private flashItemManager: FlashItemManager | null = null;\n  private listenerAbortController: AbortController;\n  private temporaryState: undefined | { enabled: boolean };\n\n  private webPreviewsPluginConnection: {\n    parent: AsyncMethodReturns<WebPreviewsPluginMethods>;\n    editUrlRegExp: RegExp;\n    destroy: () => void;\n  } | null = null;\n\n  private disposed = false;\n\n  private currentPath = toCompletePath(document.location.toString());\n\n  constructor(options: CreateControllerOptions) {\n    this.wrapperElement = options.root ?? document;\n    this.onNavigateTo = options.onNavigateTo;\n    this.overlayColors = buildOverlayColors(options.hue ?? DEFAULT_HUE);\n\n    this.eventsManager = new EventsManager({\n      doc: this.document\n    });\n\n    this.clickToEditManager = new ClickToEditManager(\n      this.document,\n      (editUrl) => this.handleEditClick(editUrl),\n      () => this.webPreviewsPluginConnection === null,\n      this.overlayColors\n    );\n\n    this.initializeWebPreviewsPluginConnection();\n\n    this.stampingManager = new DomStampingManager(\n      this.wrapperElement,\n      (summary) => this.handleStampResult(summary),\n      options.stripStega ?? false,\n      options.silenceWarnings ?? false\n    );\n\n    this.flashAllManager = new FlashAllManager(this.wrapperElement, this.overlayColors);\n\n    this.listenerAbortController = new AbortController();\n\n    this.document.addEventListener('keydown', (event) => this.onKeyDown(event), {\n      capture: true,\n      signal: this.listenerAbortController.signal\n    });\n\n    this.document.addEventListener('keyup', (event) => this.onKeyUp(event), {\n      capture: true,\n      signal: this.listenerAbortController.signal\n    });\n\n    this.document.addEventListener('click', (event) => this.onClick(event), {\n      capture: true,\n      signal: this.listenerAbortController.signal\n    });\n\n    this.document.addEventListener(\n      'visibilitychange',\n      () => {\n        if (document.hidden) {\n          this.disableTemporaryClickToEditState();\n        }\n      },\n      { signal: this.listenerAbortController.signal }\n    );\n\n    getDocumentWindow(this.document)?.addEventListener(\n      'blur',\n      () => {\n        this.disableTemporaryClickToEditState();\n      },\n      { signal: this.listenerAbortController.signal }\n    );\n  }\n\n  get document() {\n    return resolveDocument(this.wrapperElement);\n  }\n\n  dispose(): void {\n    if (this.disposed) {\n      return;\n    }\n\n    this.disposed = true;\n\n    this.clickToEditManager.deactivate();\n    this.stampingManager.dispose();\n    this.flashAllManager.dispose();\n    this.flashItemManager?.dispose();\n    this.webPreviewsPluginConnection?.destroy();\n    this.listenerAbortController.abort();\n  }\n\n  isDisposed(): boolean {\n    return this.disposed;\n  }\n\n  setCurrentPath(urlOrPath: string): void {\n    this.currentPath = toCompletePath(urlOrPath);\n  }\n\n  enableClickToEdit(flashAll?: { scrollToNearestTarget: boolean }): void {\n    if (this.disposed) {\n      return;\n    }\n\n    if (!this.clickToEditManager.isActive()) {\n      this.clickToEditManager.activate();\n      this.eventsManager.emitClickToEditToggle(true);\n      this.notifyStateChangeToWebPreviewsPlugin();\n    }\n\n    if (flashAll) {\n      this.flashAllManager.flash(flashAll.scrollToNearestTarget);\n    }\n  }\n\n  disableClickToEdit(): void {\n    if (!this.clickToEditManager.isActive() || this.disposed) {\n      return;\n    }\n    this.clickToEditManager.deactivate();\n    this.eventsManager.emitClickToEditToggle(false);\n    this.notifyStateChangeToWebPreviewsPlugin();\n  }\n\n  isClickToEditEnabled(): boolean {\n    return this.clickToEditManager.isActive() && !this.disposed;\n  }\n\n  flashAll(scrollToNearestTarget = false): void {\n    if (this.disposed) {\n      return;\n    }\n\n    this.flashAllManager.flash(scrollToNearestTarget);\n  }\n\n  async flashItem(itemId: string, scrollToNearestTarget = false) {\n    if (this.disposed || !this.webPreviewsPluginConnection) {\n      return;\n    }\n\n    this.flashItemManager?.dispose();\n\n    const flashSingleManager = new FlashItemManager(\n      this.wrapperElement,\n      itemId,\n      this.webPreviewsPluginConnection.editUrlRegExp,\n      this.overlayColors\n    );\n    const flashed = flashSingleManager.flash(scrollToNearestTarget);\n    this.flashItemManager = flashSingleManager;\n\n    await flashed;\n\n    flashSingleManager.dispose();\n  }\n\n  private handleStampResult(summary: StampSummary): void {\n    this.eventsManager.emitStamped(summary);\n    this.notifyStateChangeToWebPreviewsPlugin();\n  }\n\n  private async notifyStateChangeToWebPreviewsPlugin() {\n    if (!this.webPreviewsPluginConnection) {\n      return;\n    }\n\n    const stampedElements = this.wrapperElement.querySelectorAll(STAMPED_ELEMENTS_SELECTOR);\n\n    // Collect all edit URLs from stamped elements\n    const editUrls = new Set<string>();\n    for (const element of stampedElements) {\n      const url =\n        element.getAttribute(MANUAL_TARGET_STAMP_ATTRIBUTE) ||\n        element.getAttribute(AUTOMATIC_TARGET_STAMP_ATTRIBUTE);\n      if (url) {\n        editUrls.add(url);\n      }\n    }\n\n    await this.webPreviewsPluginConnection.parent.onStateChange({\n      clickToEditEnabled: this.clickToEditManager.isActive(),\n      path: this.currentPath,\n      itemIdsPerEnvironment: extractItemIdsPerEnvironment(\n        Array.from(editUrls),\n        this.webPreviewsPluginConnection.editUrlRegExp\n      )\n    });\n  }\n\n  private handleEditClick(editUrl: string): void {\n    if (this.webPreviewsPluginConnection) {\n      const info = extractInfo(editUrl, this.webPreviewsPluginConnection.editUrlRegExp);\n\n      if (info) {\n        this.webPreviewsPluginConnection.parent.openItem(info);\n      }\n    } else {\n      // Fallback: open in new tab\n      const opener = this.document.defaultView ?? (typeof window !== 'undefined' ? window : null);\n\n      opener?.open(editUrl, '_blank', 'noopener,noreferrer');\n    }\n  }\n\n  private async initializeWebPreviewsPluginConnection() {\n    if (!inIframe()) {\n      return;\n    }\n\n    const connection = penpal.connectToParent<WebPreviewsPluginMethods>({\n      timeout: 20000,\n      methods: {\n        navigateTo: (payload: { path: string }) => {\n          this.onNavigateTo?.(payload.path);\n        },\n        flashAll: (payload: { scrollToNearestTarget: boolean }) => {\n          this.flashAll(payload.scrollToNearestTarget);\n        },\n        flashItem: (payload: {\n          itemId: string;\n          scrollToNearestTarget: boolean;\n        }) => {\n          this.flashItem(payload.itemId, payload.scrollToNearestTarget);\n        },\n        setClickToEditEnabled: (\n          payload: { enabled: true; flash: { scrollToNearestTarget: boolean } } | { enabled: false }\n        ) => {\n          if (payload.enabled) {\n            this.enableClickToEdit(payload.flash);\n          } else {\n            this.disableClickToEdit();\n          }\n        }\n      }\n    });\n\n    const parent = await connection.promise;\n\n    if (this.disposed) {\n      connection.destroy();\n      return;\n    }\n\n    let pingInterval: NodeJS.Timeout;\n\n    const { editUrlRegExp } = await parent.onInit();\n\n    pingInterval = setInterval(() => parent.onPing(), 1000);\n\n    this.webPreviewsPluginConnection = {\n      parent,\n      destroy: () => {\n        clearInterval(pingInterval);\n        connection.destroy();\n      },\n      editUrlRegExp: new RegExp(editUrlRegExp.source, editUrlRegExp.flags)\n    };\n\n    await this.notifyStateChangeToWebPreviewsPlugin();\n  }\n\n  private onKeyDown(event: Event) {\n    if (!isKeyboardEvent(event) || event.key !== 'Alt') {\n      return;\n    }\n\n    if (!this.isTopLevelWindowOrInWebPreviewsIframe) {\n      return;\n    }\n\n    if (isEditableElementFocused(this.document)) {\n      return;\n    }\n\n    this.enableTemporaryClickToEditState();\n  }\n\n  private onKeyUp(event: Event) {\n    if (!isKeyboardEvent(event) || event.key !== 'Alt') {\n      return;\n    }\n\n    if (!this.isTopLevelWindowOrInWebPreviewsIframe) {\n      return;\n    }\n\n    if (isEditableElementFocused(this.document)) {\n      return;\n    }\n\n    this.disableTemporaryClickToEditState();\n  }\n\n  private onClick(event: Event) {\n    if (!isMouseEvent(event) || event.button !== 0) {\n      return;\n    }\n\n    // Pressing \"alt\" during a click often means something for the browser\n    // (ie. download the link instead of opening). If click-to-edit is\n    // temporarly disabled, it means we're pressing \"alt\". So here we\n    // prevent the click, and generate a new one with no \"alt\".\n\n    if (this.temporaryState && !this.temporaryState.enabled && event.altKey) {\n      event.preventDefault();\n\n      const newClick = new MouseEvent('click', {\n        bubbles: true,\n        cancelable: true,\n        view: window\n      });\n\n      (event.target as HTMLElement).dispatchEvent(newClick);\n    }\n  }\n\n  private enableTemporaryClickToEditState() {\n    if (this.clickToEditManager.isActive()) {\n      this.temporaryState = { enabled: false };\n      this.disableClickToEdit();\n      this.flashAllManager.fadeOut();\n    } else {\n      this.temporaryState = { enabled: true };\n      this.enableClickToEdit();\n      this.flashAllManager.fadeIn(true);\n    }\n  }\n\n  private disableTemporaryClickToEditState() {\n    if (!this.temporaryState) {\n      return;\n    }\n\n    if (this.temporaryState.enabled) {\n      this.disableClickToEdit();\n      this.flashAllManager.fadeOut();\n    } else {\n      this.enableClickToEdit();\n      this.flashAllManager.flash(true);\n    }\n\n    this.temporaryState = undefined;\n  }\n\n  private get isTopLevelWindowOrInWebPreviewsIframe() {\n    const opener = this.document.defaultView ?? (typeof window !== 'undefined' ? window : null);\n\n    return this.webPreviewsPluginConnection || (opener && opener.parent === opener);\n  }\n}\n","export type EditUrlInfo = {\n  environment: string;\n  itemTypeId: string;\n  itemId: string;\n  fieldPath: string;\n};\n\nexport function extractInfo(editUrl: string, editUrlRegExp: RegExp): EditUrlInfo | null {\n  const match = editUrl.match(editUrlRegExp);\n\n  if (!match || !match.groups) {\n    return null;\n  }\n\n  return {\n    environment: match.groups.environment || '__PRIMARY__',\n    itemTypeId: match.groups.item_type_id,\n    itemId: match.groups.item_id,\n    fieldPath: match.groups.field_path\n  };\n}\n\nexport function extractItemIdsPerEnvironment(editUrls: Iterable<string>, editUrlRegExp: RegExp) {\n  const itemIdsByEnvironment: Record<string, Set<string>> = {};\n\n  for (const url of editUrls) {\n    const info = extractInfo(url, editUrlRegExp);\n    if (info) {\n      const env = info.environment;\n      if (!itemIdsByEnvironment[env]) {\n        itemIdsByEnvironment[env] = new Set();\n      }\n      itemIdsByEnvironment[env].add(info.itemId);\n    }\n  }\n\n  // Convert Sets to Arrays\n  const result: Record<string, string[]> = {};\n  for (const [env, itemIds] of Object.entries(itemIdsByEnvironment)) {\n    result[env] = Array.from(itemIds);\n  }\n\n  return result;\n}\n","/**\n * Overlay-specific constants for styling and behavior.\n */\nexport const DEFAULT_OVERLAY_PADDING = 8;\nexport const OVERLAY_Z_INDEX = '2147483646';\nexport const DEFAULT_BORDER_WIDTH = '2px';\nexport const DEFAULT_BORDER_RADIUS = '6px';\nexport const DEFAULT_HUE = 17;\n\nexport type OverlayColors = {\n  borderColor: string;\n  backgroundColor: string;\n};\n\n// HSL→RGB with S fixed at 100%, used only for luminance calculation.\nfunction hslToRgb(h: number, l: number): [number, number, number] {\n  const a = Math.min(l, 1 - l); // s=1, so a = s * min(l, 1-l)\n  const f = (n: number) => {\n    const k = (n + h / 30) % 12;\n    return l - a * Math.max(-1, Math.min(k - 3, Math.min(9 - k, 1)));\n  };\n  return [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n}\n\nfunction relativeLuminance(r: number, g: number, b: number): number {\n  const lin = (c: number) => (c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4));\n  return 0.2126 * lin(r / 255) + 0.7152 * lin(g / 255) + 0.0722 * lin(b / 255);\n}\n\n// Binary search: highest HSL lightness (S=100%) that achieves ≥3.5:1 contrast against white.\nfunction contrastSafeLightness(hue: number): number {\n  let lo = 0,\n    hi = 0.5,\n    lightness = 0;\n  while (hi - lo > 0.001) {\n    const mid = (lo + hi) / 2;\n    const [r, g, b] = hslToRgb(hue, mid);\n    const contrast = 1.05 / (relativeLuminance(r, g, b) + 0.05);\n    if (contrast >= 3.5) {\n      lightness = mid;\n      lo = mid + 0.001;\n    } else {\n      hi = mid - 0.001;\n    }\n  }\n  return lightness;\n}\n\nexport function buildOverlayColors(hue: number): OverlayColors {\n  const l = Math.round(contrastSafeLightness(hue) * 100);\n  return {\n    borderColor: `hsl(${hue}, 100%, ${l}%)`,\n    backgroundColor: `hsla(${hue}, 100%, ${l}%, 0.15)`\n  };\n}\n","/**\n * Small `requestAnimationFrame` throttler used by the overlay when tracking\n * pointer movement. Provides a cancel method so callers can reset state.\n */\nexport type ThrottledFn<T extends (...args: never[]) => void> = ((\n  ...args: Parameters<T>\n) => void) & {\n  cancel: () => void;\n};\n\n// Wrap a function so it runs at most once per animation frame, forwarding the latest args.\nexport function rafThrottle<T extends (...args: never[]) => void>(fn: T): ThrottledFn<T> {\n  let frame: number | null = null;\n  let lastArgs: Parameters<T> | null = null;\n\n  const invoke = () => {\n    frame = null;\n    if (lastArgs) {\n      fn(...lastArgs);\n      lastArgs = null;\n    }\n  };\n\n  const throttled = ((...args: Parameters<T>) => {\n    lastArgs = args;\n    if (frame == null) {\n      frame = window.requestAnimationFrame(invoke);\n    }\n  }) as ThrottledFn<T>;\n\n  throttled.cancel = () => {\n    if (frame != null) {\n      window.cancelAnimationFrame(frame);\n      frame = null;\n    }\n    lastArgs = null;\n  };\n\n  return throttled;\n}\n","/**\n * Shared scroll/resize event coordinator to optimize performance when\n * many elements need to react to scroll/resize events. Instead of each\n * instance adding its own event listeners, all instances share a single\n * set of listeners per document.\n */\n\nimport { getDocumentWindow } from './dom.js';\nimport { rafThrottle } from './rafThrottle.js';\n\ntype Callback = () => void;\n\nclass ScrollResizeCoordinator {\n  private callbacks = new Set<Callback>();\n  private running = false;\n  private rafHandler = rafThrottle(() => {\n    // Call all registered callbacks (snapshot to avoid mutation during iteration)\n    const cbs = Array.from(this.callbacks);\n    for (const cb of cbs) {\n      try {\n        cb();\n      } catch (err) {\n        // Swallow errors to keep other callbacks alive\n      }\n    }\n  });\n\n  constructor(private doc: Document) {}\n\n  private startIfNeeded() {\n    if (this.running) return;\n    const win = getDocumentWindow(this.doc);\n\n    // Single scroll listener on window; listen on document as fallback\n    if (win) {\n      win.addEventListener('scroll', this.onEvent, {\n        passive: true,\n        capture: true\n      });\n      win.addEventListener('resize', this.onEvent, {\n        passive: true,\n        capture: true\n      });\n    }\n    // Some environments may fire scroll on document (e.g. non-window scrolling element)\n    this.doc.addEventListener('scroll', this.onEvent, {\n      passive: true,\n      capture: true\n    });\n\n    this.running = true;\n  }\n\n  private stopIfIdle() {\n    if (!this.running) return;\n    if (this.callbacks.size > 0) return;\n\n    const win = getDocumentWindow(this.doc);\n    if (win) {\n      win.removeEventListener('scroll', this.onEvent);\n      win.removeEventListener('resize', this.onEvent);\n    }\n    this.doc.removeEventListener('scroll', this.onEvent);\n    this.running = false;\n    this.rafHandler.cancel();\n  }\n\n  private onEvent = () => {\n    // Schedule one update per rAF for all callbacks\n    this.rafHandler();\n  };\n\n  subscribe(cb: Callback): () => void {\n    this.callbacks.add(cb);\n    this.startIfNeeded();\n    return () => {\n      this.callbacks.delete(cb);\n      this.stopIfIdle();\n    };\n  }\n}\n\n// WeakMap per document to avoid cross-document/global leaks\nconst coordinatorCache = new WeakMap<Document, ScrollResizeCoordinator>();\n\nexport function getScrollResizeCoordinator(doc: Document): ScrollResizeCoordinator {\n  let coordinator = coordinatorCache.get(doc);\n  if (!coordinator) {\n    coordinator = new ScrollResizeCoordinator(doc);\n    coordinatorCache.set(doc, coordinator);\n  }\n  return coordinator;\n}\n","/**\n * Shared ResizeObserver singleton to optimize performance when observing\n * many elements. Instead of creating one ResizeObserver per element,\n * all observations share a single observer instance per window.\n */\n\ntype ResizeCallback = () => void;\n\nfunction getResizeObserverCtor(window: Window | null): typeof ResizeObserver | undefined {\n  if (window && 'ResizeObserver' in window) {\n    // biome-ignore lint/suspicious/noExplicitAny: Window type doesn't include ResizeObserver, but it exists at runtime\n    return (window as any).ResizeObserver;\n  } else if (typeof ResizeObserver !== 'undefined') {\n    return ResizeObserver;\n  }\n}\n\nclass SharedResizeObserver {\n  private observer: ResizeObserver | null = null;\n  private callbacks = new WeakMap<Element, Set<ResizeCallback>>();\n\n  constructor(private window: Window) {\n    const ResizeObserverCtor = getResizeObserverCtor(this.window);\n    if (ResizeObserverCtor) {\n      this.observer = new ResizeObserverCtor((entries: ResizeObserverEntry[]) => {\n        for (const entry of entries) {\n          const callbacks = this.callbacks.get(entry.target);\n          if (callbacks) {\n            for (const callback of callbacks) {\n              callback();\n            }\n          }\n        }\n      });\n    }\n  }\n\n  observe(element: Element, callback: ResizeCallback): () => void {\n    if (!this.observer) {\n      return () => {}; // no-op if ResizeObserver not available\n    }\n\n    let callbacks = this.callbacks.get(element);\n    if (!callbacks) {\n      callbacks = new Set();\n      this.callbacks.set(element, callbacks);\n      this.observer.observe(element);\n    }\n\n    callbacks.add(callback);\n\n    // Return unobserve function\n    return () => {\n      const callbacks = this.callbacks.get(element);\n      if (callbacks) {\n        callbacks.delete(callback);\n        if (callbacks.size === 0) {\n          this.callbacks.delete(element);\n          this.observer?.unobserve(element);\n        }\n      }\n    };\n  }\n}\n\n// Cache of shared observers per window\nconst observerCache = new WeakMap<Window, SharedResizeObserver>();\n\nexport function getSharedResizeObserver(window: Window | null): SharedResizeObserver | null {\n  if (!window) {\n    return null;\n  }\n\n  let observer = observerCache.get(window);\n  if (!observer) {\n    observer = new SharedResizeObserver(window);\n    observerCache.set(window, observer);\n  }\n  return observer;\n}\n","/**\n * Lightweight view layer that draws a fixed-position rectangle around the\n * active editable element. Keeps all DOM manipulation in one place.\n */\nimport {\n  DEFAULT_BORDER_RADIUS,\n  DEFAULT_BORDER_WIDTH,\n  DEFAULT_HUE,\n  DEFAULT_OVERLAY_PADDING,\n  OVERLAY_Z_INDEX,\n  buildOverlayColors,\n  type OverlayColors\n} from '../createController/clickToEdit/constants.js';\nimport { abortableSleep, getDocumentWindow, measure, resolveDocument, waitTwoRafs } from './dom.js';\nimport { getScrollResizeCoordinator } from './scrollResizeCoordinator.js';\nimport { getSharedResizeObserver } from './sharedResizeObserver.js';\n\nconst FADE_DELAY = 200;\n\nexport interface HighlightOverlayOptions {\n  onDispose?: () => void;\n  showLabel?: boolean;\n  overlayColors?: OverlayColors;\n}\n\nexport class HighlightOverlay {\n  private overlayElement: HTMLDivElement;\n\n  private resizeUnobserve: (() => void) | null = null;\n  private scrollResizeUnsubscribe: (() => void) | null = null;\n  private pendingAnimationAbortController: AbortController | null = null;\n\n  private readonly onDispose?: () => void;\n  private readonly showLabel: boolean;\n  private readonly overlayColors: OverlayColors;\n\n  constructor(\n    readonly targetElement: HTMLElement,\n    options: HighlightOverlayOptions = {}\n  ) {\n    this.onDispose = options.onDispose;\n    this.showLabel = options.showLabel ?? false;\n    this.overlayColors = options.overlayColors ?? buildOverlayColors(DEFAULT_HUE);\n\n    this.overlayElement = this.createOverlayElement(this.showLabel);\n    document.body.appendChild(this.overlayElement);\n\n    const coordinator = getScrollResizeCoordinator(this.document);\n    this.scrollResizeUnsubscribe = coordinator.subscribe(() => {\n      this.updatePosition();\n    });\n\n    const sharedObserver = getSharedResizeObserver(this.window);\n    if (sharedObserver) {\n      this.resizeUnobserve = sharedObserver.observe(targetElement, () => {\n        this.updatePosition();\n      });\n    }\n  }\n\n  show() {\n    this.updatePosition();\n  }\n\n  get document() {\n    return resolveDocument(this.targetElement);\n  }\n\n  get window() {\n    return getDocumentWindow(this.document);\n  }\n\n  dispose(): void {\n    this.onDispose?.();\n    this.scrollResizeUnsubscribe?.();\n    this.resizeUnobserve?.();\n    this.overlayElement.remove();\n  }\n\n  cancelPendingAnimation(): void {\n    this.pendingAnimationAbortController?.abort();\n  }\n\n  async fadeIn(afterDelay = 0, abortController?: AbortController): Promise<void> {\n    this.cancelPendingAnimation();\n    this.pendingAnimationAbortController = abortController || new AbortController();\n    const { signal } = this.pendingAnimationAbortController;\n\n    try {\n      this.overlayElement.style.opacity = '0';\n      await waitTwoRafs();\n      await abortableSleep(afterDelay, signal);\n      this.overlayElement.style.opacity = '1';\n    } catch (_) {\n      // animation cancelled\n    }\n  }\n\n  async disposeWithFadeOut(afterDelay = 0, abortController?: AbortController): Promise<void> {\n    this.cancelPendingAnimation();\n    this.pendingAnimationAbortController = abortController || new AbortController();\n    const { signal } = this.pendingAnimationAbortController;\n\n    try {\n      await abortableSleep(afterDelay, signal);\n      this.overlayElement.style.opacity = '0';\n      await abortableSleep(FADE_DELAY + 50, signal);\n    } catch (_) {\n      // cancelled\n    } finally {\n      this.dispose();\n    }\n  }\n\n  private createOverlayElement(withLabel: boolean) {\n    const overlay = this.document.createElement('div');\n    overlay.style.position = 'fixed';\n    overlay.style.top = '0';\n    overlay.style.left = '0';\n    overlay.style.width = '0';\n    overlay.style.height = '0';\n    overlay.style.border = `${DEFAULT_BORDER_WIDTH} solid ${this.overlayColors.borderColor}`;\n    overlay.style.borderRadius = withLabel\n      ? `${DEFAULT_BORDER_RADIUS} 0 ${DEFAULT_BORDER_RADIUS} ${DEFAULT_BORDER_RADIUS}`\n      : DEFAULT_BORDER_RADIUS;\n    overlay.style.background = this.overlayColors.backgroundColor;\n    overlay.style.boxSizing = 'border-box';\n    overlay.style.pointerEvents = 'none';\n    overlay.style.zIndex = OVERLAY_Z_INDEX;\n    overlay.style.display = 'block';\n    overlay.style.opacity = '1';\n    overlay.style.transition = `opacity ${FADE_DELAY}ms ease-in-out`;\n    overlay.setAttribute('aria-hidden', 'true');\n\n    if (withLabel) {\n      const label = this.document.createElement('div');\n      label.textContent = 'Open in DatoCMS ↗';\n      label.style.position = 'absolute';\n      label.style.bottom = '100%';\n      label.style.right = `-${DEFAULT_BORDER_WIDTH}`;\n      label.style.backgroundColor = this.overlayColors.borderColor;\n      label.style.color = 'white';\n      label.style.padding = '4px 12px';\n      label.style.borderRadius = `${DEFAULT_BORDER_RADIUS} ${DEFAULT_BORDER_RADIUS} 0 0`;\n      label.style.fontSize = '13px';\n      label.style.fontWeight = '600';\n      label.style.fontFamily = 'system-ui, -apple-system, sans-serif';\n      label.style.whiteSpace = 'nowrap';\n      label.style.setProperty('-webkit-font-smoothing', 'antialiased');\n      label.style.letterSpacing = 'normal';\n      label.style.lineHeight = 'normal';\n      label.style.textTransform = 'none';\n      label.style.fontStyle = 'normal';\n      label.setAttribute('aria-hidden', 'true');\n      overlay.appendChild(label);\n    }\n\n    return overlay;\n  }\n\n  private updatePosition(): void {\n    const rect = measure(this.targetElement);\n    this.overlayElement.style.zIndex = this.computeOverlayZIndex(this.targetElement);\n\n    if (!rect) {\n      this.overlayElement.style.display = 'none';\n      return;\n    }\n\n    this.overlayElement.style.display = 'block';\n    this.overlayElement.style.top = `${rect.top - DEFAULT_OVERLAY_PADDING}px`;\n    this.overlayElement.style.left = `${rect.left - DEFAULT_OVERLAY_PADDING}px`;\n    this.overlayElement.style.width = `${rect.width + DEFAULT_OVERLAY_PADDING * 2}px`;\n    this.overlayElement.style.height = `${rect.height + DEFAULT_OVERLAY_PADDING * 2}px`;\n\n    if (this.showLabel) {\n      const label = this.overlayElement.firstElementChild as HTMLElement | null;\n      if (label) {\n        const isNarrow = rect.width + DEFAULT_OVERLAY_PADDING * 2 < 150;\n        if (isNarrow) {\n          label.style.bottom = `calc(100% + 10px)`;\n          label.style.right = 'auto';\n          label.style.left = '50%';\n          label.style.transform = 'translateX(-50%)';\n          label.style.borderRadius = `${DEFAULT_BORDER_RADIUS}`;\n          this.overlayElement.style.borderRadius = DEFAULT_BORDER_RADIUS;\n        } else {\n          label.style.bottom = '100%';\n          label.style.right = `-${DEFAULT_BORDER_WIDTH}`;\n          label.style.left = 'auto';\n          label.style.transform = 'none';\n          label.style.borderRadius = `${DEFAULT_BORDER_RADIUS} ${DEFAULT_BORDER_RADIUS} 0 0`;\n          this.overlayElement.style.borderRadius = `${DEFAULT_BORDER_RADIUS} 0 ${DEFAULT_BORDER_RADIUS} ${DEFAULT_BORDER_RADIUS}`;\n        }\n      }\n    }\n  }\n\n  private computeOverlayZIndex(el: Element): string {\n    if (!this.window) {\n      return '0';\n    }\n\n    let node: Element | null = el;\n    let lastNumeric: number | null = null;\n    while (node && node instanceof this.window.Element) {\n      const style = this.window.getComputedStyle(node);\n      const z = style.zIndex;\n      if (z !== 'auto') {\n        const parsed = Number(z);\n        if (Number.isFinite(parsed)) {\n          lastNumeric = parsed;\n        }\n      }\n      node = node.parentElement;\n    }\n    return lastNumeric !== null ? String(lastNumeric) : '0';\n  }\n}\n","/**\n * Shared DOM attribute names used by the visual editing runtime.\n * Keeping them centralized avoids typos and makes it clear which stamps the SDK\n * writes to the page when identifying editable regions.\n */\nexport const AUTOMATIC_TARGET_STAMP_ATTRIBUTE = 'data-datocms-auto-content-link-url';\nexport const AUTOMATIC_STEGA_STAMP_ATTRIBUTE = 'data-datocms-contains-stega';\nexport const MANUAL_TARGET_STAMP_ATTRIBUTE = 'data-datocms-content-link-url';\nexport const GROUP_ATTRIBUTE = 'data-datocms-content-link-group';\nexport const GROUP_BOUNDARY_ATTRIBUTE = 'data-datocms-content-link-boundary';\nexport const SOURCE_STAMP_ATTRIBUTE = 'data-datocms-content-link-source';\n\nexport const STAMPED_ELEMENTS_SELECTOR = `[${MANUAL_TARGET_STAMP_ATTRIBUTE}], [${AUTOMATIC_TARGET_STAMP_ATTRIBUTE}]`;\n","/**\n * Resolve which element should receive the overlay highlight when the pointer\n * hovers over the page. Simple wrapper, but kept isolated for testability.\n */\nimport {\n  AUTOMATIC_TARGET_STAMP_ATTRIBUTE,\n  MANUAL_TARGET_STAMP_ATTRIBUTE,\n  STAMPED_ELEMENTS_SELECTOR\n} from '../domStamping/constants.js';\n\nexport type EditableTarget = {\n  element: HTMLElement;\n  editUrl: string;\n};\n\nexport function findEditableTarget(from: EventTarget | Element | null): EditableTarget | null {\n  if (!from || !(from instanceof Element)) {\n    return null;\n  }\n\n  const el = from.closest<HTMLElement>(STAMPED_ELEMENTS_SELECTOR);\n  if (!el) {\n    return null;\n  }\n\n  const url =\n    el.getAttribute(MANUAL_TARGET_STAMP_ATTRIBUTE) ||\n    el.getAttribute(AUTOMATIC_TARGET_STAMP_ATTRIBUTE);\n\n  if (!url) {\n    return null;\n  }\n\n  return { element: el, editUrl: url };\n}\n","import { HighlightOverlay } from '../../utils/HighlightOverlay.js';\nimport type { OverlayColors } from './constants.js';\n/**\n * Manages click-to-edit functionality: highlights editable regions under the pointer\n * and invokes callback when clicked. Absorbs all logic from setup.ts into a class-based manager.\n */\nimport { isKeyboardEvent, isMouseEvent, isMousePointerEvent } from '../../utils/dom.js';\nimport { rafThrottle } from '../../utils/rafThrottle.js';\nimport { findEditableTarget } from './findEditableTarget.js';\n\nexport class ClickToEditManager {\n  private highlightOverlay: HighlightOverlay | null = null;\n  private listenerAbortController: AbortController | null = null;\n\n  private throttledOnPointerMove = rafThrottle((event: Event) =>\n    this.immediateOnPointerMoveEvent(event)\n  );\n\n  constructor(\n    private readonly document: Document,\n    private readonly onEditClick: (editUrl: string) => void,\n    private readonly shouldShowLabel: () => boolean = () => false,\n    private readonly overlayColors?: OverlayColors\n  ) {}\n\n  isActive(): boolean {\n    return Boolean(this.listenerAbortController);\n  }\n\n  activate() {\n    if (this.isActive()) {\n      return;\n    }\n\n    this.listenerAbortController = new AbortController();\n\n    const options: AddEventListenerOptions = {\n      capture: true,\n      signal: this.listenerAbortController.signal\n    };\n\n    this.document.addEventListener('pointerover', this.throttledOnPointerMove, options);\n    this.document.addEventListener('pointermove', this.throttledOnPointerMove, options);\n    this.document.addEventListener('pointerleave', (event) => this.onPointerLeave(event), options);\n    this.document.addEventListener('click', (event) => this.onClick(event), options);\n    this.document.addEventListener('focusin', (event) => this.onFocusIn(event), options);\n    this.document.addEventListener('focusout', () => this.onFocusOut(), options);\n    this.document.addEventListener('keydown', (event) => this.onKeyDown(event), options);\n  }\n\n  private immediateOnPointerMoveEvent(event: Event) {\n    if (!isMousePointerEvent(event)) {\n      return;\n    }\n\n    const target = findEditableTarget(event.target);\n\n    this.highlightElement(target?.element);\n  }\n\n  private onPointerLeave(event: Event) {\n    if (!isMousePointerEvent(event)) {\n      return;\n    }\n\n    const target = findEditableTarget(event.relatedTarget);\n\n    if (!target) {\n      this.highlightElement(null);\n    }\n  }\n\n  private onFocusIn(event: Event) {\n    const target = findEditableTarget(event.target);\n    this.highlightElement(target?.element);\n  }\n\n  private onKeyDown(event: Event) {\n    if (!isKeyboardEvent(event)) {\n      return;\n    }\n    if (event.key !== 'Enter' && event.key !== ' ' && event.key !== 'Spacebar') {\n      return;\n    }\n\n    const target = findEditableTarget(this.document.activeElement);\n\n    if (!target) {\n      return;\n    }\n\n    this.highlightElement(target.element);\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    this.onEditClick(target.editUrl);\n  }\n\n  private onClick(event: Event) {\n    if (!isMouseEvent(event) || event.button !== 0) {\n      return;\n    }\n\n    const target = findEditableTarget(event.target);\n\n    if (!target) {\n      return;\n    }\n\n    this.highlightElement(target.element);\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    this.onEditClick(target.editUrl);\n  }\n\n  private onFocusOut() {\n    this.highlightElement(null);\n  }\n\n  private highlightElement(rawTargetElement: HTMLElement | null | undefined) {\n    const targetElement =\n      rawTargetElement && !rawTargetElement.isConnected ? null : rawTargetElement;\n\n    if (this.highlightOverlay && this.highlightOverlay.targetElement === targetElement) {\n      return;\n    }\n\n    if (this.highlightOverlay) {\n      this.highlightOverlay.dispose();\n      this.highlightOverlay = null;\n    }\n\n    if (targetElement) {\n      const prevCursor = targetElement.style.cursor;\n      targetElement.style.cursor = 'pointer';\n      this.highlightOverlay = new HighlightOverlay(targetElement, {\n        onDispose: () => {\n          targetElement.style.cursor = prevCursor;\n        },\n        showLabel: this.shouldShowLabel(),\n        overlayColors: this.overlayColors\n      });\n      this.highlightOverlay.show();\n    }\n  }\n\n  deactivate() {\n    if (!this.isActive()) {\n      return;\n    }\n\n    this.listenerAbortController!.abort();\n    this.listenerAbortController = null;\n    this.throttledOnPointerMove.cancel();\n\n    this.highlightOverlay?.dispose();\n    this.highlightOverlay = null;\n  }\n}\n","var s={0:8203,1:8204,2:8205,3:8290,4:8291,5:8288,6:65279,7:8289,8:119155,9:119156,a:119157,b:119158,c:119159,d:119160,e:119161,f:119162},c={0:8203,1:8204,2:8205,3:65279},u=new Array(4).fill(String.fromCodePoint(c[0])).join(\"\"),m=String.fromCharCode(0);function E(t){let e=JSON.stringify(t);return`${u}${Array.from(e).map(r=>{let n=r.charCodeAt(0);if(n>255)throw new Error(`Only ASCII edit info can be encoded. Error attempting to encode ${e} on character ${r} (${n})`);return Array.from(n.toString(4).padStart(4,\"0\")).map(o=>String.fromCodePoint(c[o])).join(\"\")}).join(\"\")}`}function y(t){let e=JSON.stringify(t);return Array.from(e).map(r=>{let n=r.charCodeAt(0);if(n>255)throw new Error(`Only ASCII edit info can be encoded. Error attempting to encode ${e} on character ${r} (${n})`);return Array.from(n.toString(16).padStart(2,\"0\")).map(o=>String.fromCodePoint(s[o])).join(\"\")}).join(\"\")}function I(t){return!Number.isNaN(Number(t))||/[a-z]/i.test(t)&&!/\\d+(?:[-:\\/]\\d+){2}(?:T\\d+(?:[-:\\/]\\d+){1,2}(\\.\\d+)?Z?)?/.test(t)?!1:Boolean(Date.parse(t))}function T(t){try{new URL(t,t.startsWith(\"/\")?\"https://acme.com\":void 0)}catch{return!1}return!0}function C(t,e,r=\"auto\"){return r===!0||r===\"auto\"&&(I(t)||T(t))?t:`${t}${E(e)}`}var x=Object.fromEntries(Object.entries(c).map(t=>t.reverse())),g=Object.fromEntries(Object.entries(s).map(t=>t.reverse())),S=`${Object.values(s).map(t=>`\\\\u{${t.toString(16)}}`).join(\"\")}`,f=new RegExp(`[${S}]{4,}`,\"gu\");function G(t){let e=t.match(f);if(!!e)return h(e[0],!0)[0]}function $(t){let e=t.match(f);if(!!e)return e.map(r=>h(r)).flat()}function h(t,e=!1){let r=Array.from(t);if(r.length%2===0){if(r.length%4||!t.startsWith(u))return A(r,e)}else throw new Error(\"Encoded data has invalid length\");let n=[];for(let o=r.length*.25;o--;){let p=r.slice(o*4,o*4+4).map(d=>x[d.codePointAt(0)]).join(\"\");n.unshift(String.fromCharCode(parseInt(p,4)))}if(e){n.shift();let o=n.indexOf(m);return o===-1&&(o=n.length),[JSON.parse(n.slice(0,o).join(\"\"))]}return n.join(\"\").split(m).filter(Boolean).map(o=>JSON.parse(o))}function A(t,e){var d;let r=[];for(let i=t.length*.5;i--;){let a=`${g[t[i*2].codePointAt(0)]}${g[t[i*2+1].codePointAt(0)]}`;r.unshift(String.fromCharCode(parseInt(a,16)))}let n=[],o=[r.join(\"\")],p=10;for(;o.length;){let i=o.shift();try{if(n.push(JSON.parse(i)),e)return n}catch(a){if(!p--)throw a;let l=+((d=a.message.match(/\\sposition\\s(\\d+)$/))==null?void 0:d[1]);if(!l)throw a;o.unshift(i.substring(0,l),i.substring(l))}}return n}function _(t){var e;return{cleaned:t.replace(f,\"\"),encoded:((e=t.match(f))==null?void 0:e[0])||\"\"}}function O(t){return t&&JSON.parse(_(JSON.stringify(t)).cleaned)}export{f as VERCEL_STEGA_REGEX,y as legacyStegaEncode,O as vercelStegaClean,C as vercelStegaCombine,G as vercelStegaDecode,$ as vercelStegaDecodeAll,E as vercelStegaEncode,_ as vercelStegaSplit};\n","/**\n * Canonical metadata extracted from a stega payload. Most properties are\n * optional because the upstream string might not provide them, but we always\n * surface the raw payload for debugging purposes.\n */\nexport type DecodedInfo = {\n  origin: string;\n  href: string;\n};\n\nexport function isDecodedInfo(value: unknown): value is DecodedInfo {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    'origin' in value &&\n    typeof value.origin === 'string' &&\n    'href' in value &&\n    typeof value.href === 'string'\n  );\n}\n","/**\n * Steganography helpers built on top of @vercel/stega.\n * These utilities decode the zero-width encoded metadata that DatoCMS embeds\n * into strings (text content, alt attributes, etc.) and normalize the result\n * into the strongly typed structure consumed by the rest of the SDK.\n */\nimport {\n  VERCEL_STEGA_REGEX,\n  vercelStegaClean,\n  vercelStegaDecode,\n  vercelStegaSplit\n} from '@vercel/stega';\nimport { type DecodedInfo, isDecodedInfo } from './types.js';\n\nexport const STEGA_REGEXP = VERCEL_STEGA_REGEX;\n\n/**\n * Splits a string into its cleaned content and encoded stega data.\n *\n * This function separates the visible content from invisible stega-encoded metadata\n * using the VERCEL_STEGA_REGEX pattern. It removes ALL stega encodings found in the\n * input string (due to the global regex flag).\n *\n * @param {string} input - The string potentially containing stega-encoded data\n * @returns {{ cleaned: string, encoded: string }} An object containing:\n *   - `cleaned`: The input string with all stega encodings removed\n *   - `encoded`: The first stega-encoded segment found (empty string if none found)\n *\n * @example\n * const result = splitStega(\"Hello[U+200E]World\");\n * // result.cleaned: \"HelloWorld\"\n * // result.encoded: \"[U+200E]\" (invisible characters)\n *\n * @example\n * // Multiple stega encodings - all removed from cleaned, only first captured in encoded\n * const result = splitStega(\"Part1[U+200E]Part2[U+200E]Part3\");\n * // result.cleaned: \"Part1Part2Part3\" (all stega removed)\n * // result.encoded: \"[U+200E]\" (only first encoding captured)\n */\nexport function splitStega(input: string): ReturnType<typeof vercelStegaSplit> {\n  return vercelStegaSplit(input);\n}\n\n/**\n * Decodes stega-encoded metadata from a string and returns structured information.\n *\n * This function extracts and decodes the FIRST stega-encoded segment found in the input,\n * returning a structured DecodedInfo object containing origin and href information.\n * If the input contains multiple stega encodings, only the first one is decoded.\n *\n * @param {string} input - The string potentially containing stega-encoded data\n * @param {ReturnType<typeof vercelStegaSplit>} [split] - Optional pre-split result from splitStega.\n *   If provided, avoids re-splitting the input. Useful for performance when you've already\n *   called splitStega on the same input.\n * @returns {DecodedInfo | null} The decoded metadata object with `origin` and `href` properties,\n *   or null if:\n *   - Input is empty/falsy\n *   - No stega encoding found\n *   - Decoding fails (invalid encoding)\n *   - Decoded data doesn't match DecodedInfo structure\n *\n * @example\n * // Decode stega from a string\n * const info = decodeStega(\"Hello[U+200E]World\");\n * if (info) {\n *   console.log(info.origin); // e.g., \"https://example.com\"\n *   console.log(info.href);   // e.g., \"/path/to/content\"\n * }\n */\nexport function decodeStega(input: string): DecodedInfo | null {\n  if (!input) {\n    return null;\n  }\n\n  const resolvedSplit = vercelStegaSplit(input);\n  if (!resolvedSplit.encoded) {\n    return null;\n  }\n\n  let decoded: unknown;\n  try {\n    decoded = vercelStegaDecode(resolvedSplit.encoded);\n  } catch {\n    return null;\n  }\n\n  if (!isDecodedInfo(decoded)) {\n    return null;\n  }\n\n  return decoded;\n}\n\n/**\n * Completely removes ALL stega encodings from any JavaScript value.\n *\n * This function works with any data type (strings, objects, arrays, primitives) by:\n * 1. Converting the input to a JSON string\n * 2. Removing all stega-encoded segments using the global VERCEL_STEGA_REGEX\n * 3. Parsing the cleaned JSON back to its original type\n *\n * Unlike splitStega which only works with strings, stripStega handles complex nested\n * structures and removes ALL stega encodings throughout the entire value.\n *\n * @template T - The type of the input value\n * @param {T} input - Any JavaScript value (string, object, array, number, etc.)\n * @returns {T} The same value with all stega encodings removed\n *\n * @example\n * // Works with strings\n * stripStega(\"Hello[U+200E]World\") // \"HelloWorld\"\n *\n * @example\n * // Works with objects\n * stripStega({ name: \"John[U+200E]\", age: 30 })\n *\n * @example\n * // Works with nested structures - removes ALL stega encodings\n * stripStega({\n *   users: [\n *     { name: \"Alice[U+200E]\", email: \"alice[U+200E]@example.com\" },\n *     { name: \"Bob[U+200E]\", email: \"bob[U+200E]@example.com\" }\n *   ]\n * })\n *\n * @example\n * // Works with arrays\n * stripStega([\"First[U+200E]\", \"Second[U+200E]\", \"Third[U+200E]\"])\n */\nexport function stripStega<T>(input: T): T {\n  return vercelStegaClean(input);\n}\n\n/**\n * Replaces invisible stega-encoded segments with visible markers, making it\n * easy to spot which strings in a GraphQL response (or any other value)\n * carry Visual Editing metadata.\n *\n * Works exactly like {@link stripStega} — accepts any JSON-serialisable value\n * (string, object, array, etc.) — but instead of silently removing the hidden\n * characters it replaces each occurrence with a human-readable tag:\n *\n * ```\n * [STEGA:/editor/item_types/123/items/456]\n * ```\n *\n * @template T - The type of the input value\n * @param {T} input - Any JavaScript value (string, object, array, number, etc.)\n * @returns {T} The same value with stega encodings replaced by visible markers\n *\n * @example\n * revealStega(\"Hello world\")\n * // \"Hello [STEGA:/editor/item_types/123/items/456]world\"\n *\n * @example\n * // Works with entire GraphQL responses\n * revealStega(graphqlResponse)\n */\nexport function revealStega<T>(input: T): T {\n  const json = JSON.stringify(input);\n  if (json === undefined) return input;\n\n  const revealed = json.replace(VERCEL_STEGA_REGEX, (match) => {\n    let decoded: unknown;\n    try {\n      decoded = vercelStegaDecode(match);\n    } catch {\n      decoded = null;\n    }\n\n    if (isDecodedInfo(decoded)) {\n      return `[STEGA:${decoded.href}]`;\n    }\n\n    return '[STEGA:?]';\n  });\n\n  return JSON.parse(revealed) as T;\n}\n","/**\n * Debounce repeated stamp requests within a microtask to avoid thrashing.\n */\nexport function createScheduler(fn: () => void): () => void {\n  let pending = false;\n\n  const enqueue =\n    typeof queueMicrotask === 'function'\n      ? queueMicrotask\n      : (cb: () => void) => Promise.resolve().then(cb);\n\n  return () => {\n    if (pending) {\n      return;\n    }\n    pending = true;\n    enqueue(() => {\n      pending = false;\n      fn();\n    });\n  };\n}\n","/**\n * Manages DOM stamping: observation, mutation batching, stega decoding, and attribute application.\n * Absorbs logic from stamp/index.ts and BrowserController's stamping functionality.\n */\nimport { vercelStegaDecode } from '@vercel/stega';\nimport { splitStega } from '../../stega/decode.js';\nimport { DecodedInfo, isDecodedInfo } from '../../stega/types.js';\nimport { createScheduler } from '../../utils/createScheduler.js';\nimport { resolveDocument } from '../../utils/dom.js';\nimport type { StampSummary } from '../types.js';\nimport {\n  AUTOMATIC_STEGA_STAMP_ATTRIBUTE,\n  AUTOMATIC_TARGET_STAMP_ATTRIBUTE,\n  GROUP_ATTRIBUTE,\n  GROUP_BOUNDARY_ATTRIBUTE,\n  SOURCE_STAMP_ATTRIBUTE\n} from './constants.js';\n\nexport class DomStampingManager {\n  private observer: MutationObserver;\n  private readonly pendingElementsToStamp = new Set<ParentNode>();\n  private readonly scheduleStamping = createScheduler(() => this.instantStampPendingElements());\n\n  constructor(\n    private readonly root: ParentNode,\n    private readonly onStamp: (summary: StampSummary) => void,\n    private readonly stripStega: boolean = false,\n    private readonly silenceWarnings: boolean = false\n  ) {\n    this.observer = new MutationObserver((mutations) => this.handleMutations(mutations));\n\n    this.observer.observe(this.root, {\n      subtree: true,\n      childList: true,\n      characterData: true,\n      attributes: true,\n      attributeFilter: ['alt', SOURCE_STAMP_ATTRIBUTE]\n    });\n\n    this.instantStampPendingElements(true);\n  }\n\n  dispose() {\n    this.observer.disconnect();\n    this.pendingElementsToStamp.clear();\n\n    const nodes = this.root.querySelectorAll<HTMLElement>(`[${AUTOMATIC_TARGET_STAMP_ATTRIBUTE}]`);\n\n    for (const el of nodes) {\n      el.removeAttribute(AUTOMATIC_TARGET_STAMP_ATTRIBUTE);\n    }\n  }\n\n  private handleMutations(mutations: MutationRecord[]) {\n    let hasChanges = false;\n\n    for (const mutation of mutations) {\n      if (mutation.type === 'characterData') {\n        const node = mutation.target as Node;\n        const parent = (node.parentElement ?? node.parentNode ?? this.root) as ParentNode;\n        this.pendingElementsToStamp.add(parent);\n        hasChanges = true;\n      } else if (mutation.type === 'attributes' && mutation.attributeName === 'alt') {\n        const element = mutation.target as Element;\n        this.pendingElementsToStamp.add((element.parentElement ?? this.root) as ParentNode);\n        hasChanges = true;\n      } else if (\n        mutation.type === 'attributes' &&\n        mutation.attributeName === SOURCE_STAMP_ATTRIBUTE\n      ) {\n        const element = mutation.target as Element;\n        this.pendingElementsToStamp.add((element.parentElement ?? this.root) as ParentNode);\n        hasChanges = true;\n      } else if (mutation.type === 'childList') {\n        this.pendingElementsToStamp.add(mutation.target as ParentNode);\n        for (const node of mutation.addedNodes) {\n          if (\n            node.nodeType === Node.ELEMENT_NODE ||\n            node.nodeType === Node.DOCUMENT_FRAGMENT_NODE\n          ) {\n            this.pendingElementsToStamp.add(node as ParentNode);\n          }\n        }\n        hasChanges = true;\n      }\n    }\n\n    if (hasChanges) {\n      this.scheduleStamping();\n    }\n  }\n\n  private instantStampPendingElements(firstStamping = false) {\n    const elementsToStamp =\n      this.pendingElementsToStamp.size === 0\n        ? [this.root]\n        : Array.from(this.pendingElementsToStamp);\n\n    this.pendingElementsToStamp.clear();\n\n    const summaries: StampSummary[] = [];\n\n    for (const elementToStamp of elementsToStamp) {\n      const summary = this.stampElement(elementToStamp);\n      summaries.push(summary);\n    }\n\n    const combinedSummary =\n      summaries.length === 1\n        ? summaries[0]\n        : {\n            appliedStamps: summaries.reduce((acc, summary) => {\n              for (const [key, value] of summary.appliedStamps.entries()) {\n                acc.set(key, value);\n              }\n              return acc;\n            }, new Map<Element, string>()),\n            scope: this.root\n          };\n\n    if (!this.silenceWarnings && firstStamping && combinedSummary.appliedStamps.size === 0) {\n      const message =\n        '[@datocms/content-link] No editable elements were detected after initialization. ' +\n        'Make sure that Content Link headers are enabled in your GraphQL requests! ' +\n        \"If you're hydrating/streaming, do not replace the server-rendered nodes that carry stega-encoded data: reuse the same DOM element!\";\n\n      console.warn(message);\n    }\n\n    if (summaries.length === 0) {\n      return;\n    }\n\n    this.onStamp(combinedSummary);\n  }\n\n  private stampElement(element: ParentNode): StampSummary {\n    const doc = resolveDocument(element);\n\n    if (!doc) {\n      return {\n        appliedStamps: new Map(),\n        scope: element\n      };\n    }\n\n    // Track elements stamped in this pass to detect collisions within the same pass\n    const appliedStamps = new Map<Element, string>();\n\n    // First pass: walk text nodes and process stega-encoded content\n    const walker = doc.createTreeWalker(element, NodeFilter.SHOW_TEXT);\n\n    let node: Node | null = walker.nextNode();\n    while (node) {\n      if (!(node instanceof Text)) {\n        node = walker.nextNode();\n        continue;\n      }\n      const value = node.nodeValue ?? '';\n      const parent = node.parentElement;\n\n      // Skip text nodes inside <script> and <style> tags\n      if (parent && this.isInsideExcludedTag(parent)) {\n        node = walker.nextNode();\n        continue;\n      }\n\n      const cleanValue = this.addStampingAttributesTargetAndReturnStrippedValue(\n        value,\n        parent,\n        appliedStamps\n      );\n\n      if (this.stripStega && cleanValue !== undefined) {\n        node.nodeValue = cleanValue;\n      }\n\n      node = walker.nextNode();\n    }\n\n    // Second pass: inspect image alts, since they are not part of the text walker.\n    for (const img of element.querySelectorAll<HTMLImageElement>('img[alt]')) {\n      const alt = img.getAttribute('alt');\n\n      const cleanAlt = this.addStampingAttributesTargetAndReturnStrippedValue(\n        alt,\n        img,\n        appliedStamps\n      );\n\n      if (this.stripStega && cleanAlt !== undefined) {\n        img.setAttribute('alt', cleanAlt);\n      }\n    }\n\n    // Third pass: inspect elements with data-datocms-content-link-source attribute\n    for (const el of element.querySelectorAll<HTMLElement>(`[${SOURCE_STAMP_ATTRIBUTE}]`)) {\n      const sourceValue = el.getAttribute(SOURCE_STAMP_ATTRIBUTE);\n\n      this.addStampingAttributesTargetAndReturnStrippedValue(sourceValue, el, appliedStamps);\n\n      // If stripStega is enabled, clear the source attribute after stamping\n      if (this.stripStega) {\n        el.removeAttribute(SOURCE_STAMP_ATTRIBUTE);\n      }\n    }\n\n    const summary: StampSummary = {\n      appliedStamps: appliedStamps,\n      scope: element\n    };\n\n    return summary;\n  }\n\n  private addStampingAttributesTargetAndReturnStrippedValue(\n    value: string | null,\n    elementWithStega: Element | null,\n    appliedStamps: Map<Element, string>\n  ): string | undefined {\n    if (!value || !elementWithStega) {\n      return;\n    }\n\n    // First, check if there's stega-encoded data (cheap operation)\n    let split;\n    let decoded;\n\n    try {\n      split = splitStega(value);\n      if (!split.encoded) {\n        return undefined;\n      }\n\n      decoded = vercelStegaDecode(split.encoded) as DecodedInfo;\n\n      if (!isDecodedInfo(decoded)) {\n        return undefined;\n      }\n    } catch (error) {\n      // If stega decoding fails, silently skip this value\n      return undefined;\n    }\n\n    // Only if we have valid stega data, find the target element (more expensive DOM walk)\n    const target = this.maybeFindGroup(elementWithStega);\n\n    if (!target) {\n      return;\n    }\n\n    // Check for collision within this pass\n    const existingStamp = appliedStamps.get(target);\n\n    if (!this.silenceWarnings && existingStamp && existingStamp !== decoded.href) {\n      this.warnCollision(target, existingStamp, elementWithStega, decoded.href);\n    }\n\n    // Stamp the attribute if it changed\n    const existingEditUrl = target.getAttribute(AUTOMATIC_TARGET_STAMP_ATTRIBUTE);\n\n    if (existingEditUrl !== decoded.href) {\n      target.setAttribute(AUTOMATIC_TARGET_STAMP_ATTRIBUTE, decoded.href);\n      appliedStamps.set(target, decoded.href);\n    }\n\n    // When not stripping stega, mark the element that directly contains the stega data\n    if (!this.stripStega) {\n      elementWithStega.setAttribute(AUTOMATIC_STEGA_STAMP_ATTRIBUTE, '');\n    }\n\n    return split.cleaned;\n  }\n\n  /** Log when two stega-encoded payloads map to the same element in a single pass */\n  private warnCollision(\n    target: Element,\n    originalUrl: string,\n    incomingEl: Element,\n    incomingUrl: string\n  ) {\n    const message = `[@datocms/content-link] Multiple stega-encoded payloads resolved to the same DOM element. Previous URL: ${originalUrl}. Incoming URL: ${incomingUrl}. Wrap each encoded block in its own element (for example by adding ${GROUP_ATTRIBUTE}).`;\n\n    console.warn(message, target, incomingEl);\n  }\n\n  private isInsideExcludedTag(element: Element | null): boolean {\n    if (!element) {\n      return false;\n    }\n\n    let current: Element | null = element;\n    while (current) {\n      if (current.tagName === 'SCRIPT' || current.tagName === 'STYLE') {\n        return true;\n      }\n      current = current.parentElement;\n    }\n\n    return false;\n  }\n\n  private maybeFindGroup(start: Element): Element {\n    // Walk up the DOM tree manually to respect edit boundaries\n    let current: Element | null = start;\n\n    while (current) {\n      // If we found a group, return it\n      if (current.hasAttribute(GROUP_ATTRIBUTE)) {\n        return current;\n      }\n\n      // If we hit an edit boundary, stop and return the starting element\n      if (current.hasAttribute(GROUP_BOUNDARY_ATTRIBUTE)) {\n        return start;\n      }\n\n      // Move up to parent element\n      current = current.parentElement;\n    }\n\n    // No group found, return the starting element\n    return start;\n  }\n}\n","/**\n * Custom events used to surface lifecycle changes to host applications.\n */\nexport const EVENT_STAMPED = 'datocms:visual-editing:stamped';\nexport const EVENT_CLICK_TO_EDIT_TOGGLE = 'datocms:click-to-edit:toggle';\n","/**\n * Manages CustomEvent dispatching for lifecycle changes.\n * Extracted from BrowserController to maintain single responsibility.\n * Exposes high-level semantic methods for each event type.\n */\nimport type { StampSummary } from '../types.js';\nimport { EVENT_CLICK_TO_EDIT_TOGGLE, EVENT_STAMPED } from './constants.js';\nimport type { EventsManagerOptions } from './types.js';\n\nexport class EventsManager {\n  private readonly doc: Document;\n\n  constructor(options: EventsManagerOptions) {\n    this.doc = options.doc;\n  }\n\n  emitStamped(summary: StampSummary) {\n    this.dispatch(EVENT_STAMPED, summary);\n  }\n\n  emitClickToEditToggle(enabled: boolean) {\n    this.dispatch(EVENT_CLICK_TO_EDIT_TOGGLE, enabled);\n  }\n\n  private dispatch<T>(type: string, payload: T) {\n    const CustomEventCtor =\n      this.doc.defaultView?.CustomEvent ??\n      (typeof CustomEvent !== 'undefined' ? CustomEvent : undefined);\n    if (!CustomEventCtor) {\n      return;\n    }\n\n    try {\n      const event = new CustomEventCtor(type, { detail: payload });\n      this.doc.dispatchEvent(event);\n    } catch {\n      // Ignore dispatch failures (e.g. CustomEvent polyfill not available)\n    }\n  }\n}\n","import { HighlightOverlay } from '../../utils/HighlightOverlay.js';\nimport { maybeScrollToNearestTarget, sleep, waitTwoRafs } from '../../utils/dom.js';\nimport type { OverlayColors } from '../clickToEdit/constants.js';\nimport { STAMPED_ELEMENTS_SELECTOR } from '../domStamping/constants.js';\n\nexport const STAGGER_DELAY = 10;\n\nexport class FlashAllManager {\n  private overlays: HighlightOverlay[] = [];\n  private pendingAnimationAbortController: AbortController | null = null;\n  private disposed: boolean = false;\n\n  constructor(\n    private readonly wrapperElement: ParentNode,\n    private readonly overlayColors?: OverlayColors\n  ) {}\n\n  async flash(scrollToNearestTarget: boolean) {\n    if (this.disposed) return;\n\n    this.fadeIn(scrollToNearestTarget);\n    await sleep(1500);\n    this.fadeOut();\n  }\n\n  async fadeIn(scrollToNearestTarget: boolean) {\n    if (this.disposed) return;\n\n    await waitTwoRafs();\n\n    const stampedElements =\n      this.wrapperElement.querySelectorAll<HTMLElement>(STAMPED_ELEMENTS_SELECTOR);\n    const targets = Array.from(stampedElements);\n\n    if (targets.length === 0) {\n      return;\n    }\n\n    this.instantlyDisposeOverlays();\n\n    const abortController = new AbortController();\n    const { signal } = abortController;\n\n    this.pendingAnimationAbortController = abortController;\n\n    try {\n      if (scrollToNearestTarget) {\n        await maybeScrollToNearestTarget(targets, signal);\n      }\n\n      const targetsCount = targets.length;\n\n      targets.map((target, index) => {\n        const overlay = new HighlightOverlay(target, { overlayColors: this.overlayColors });\n        overlay.fadeIn(targetsCount < 50 ? index * STAGGER_DELAY : 0, abortController);\n        this.overlays.push(overlay);\n      });\n    } catch (_) {\n      // animation cancelled\n    }\n  }\n\n  fadeOut() {\n    if (this.disposed) return;\n\n    this.cancelPendingAnimation();\n\n    const abortController = new AbortController();\n\n    const overlaysCount = this.overlays.length;\n\n    this.overlays.map((overlay, index) => {\n      overlay.disposeWithFadeOut(overlaysCount < 50 ? index * STAGGER_DELAY : 0, abortController);\n    });\n\n    this.overlays = [];\n  }\n\n  dispose() {\n    if (this.disposed) return;\n\n    this.disposed = true;\n    this.instantlyDisposeOverlays();\n  }\n\n  private cancelPendingAnimation() {\n    this.pendingAnimationAbortController?.abort();\n  }\n\n  private instantlyDisposeOverlays() {\n    this.cancelPendingAnimation();\n\n    this.overlays.forEach((overlay) => {\n      overlay.cancelPendingAnimation();\n      overlay.dispose();\n    });\n    this.overlays = [];\n  }\n}\n","import { HighlightOverlay } from '../../utils/HighlightOverlay.js';\nimport { maybeScrollToNearestTarget, sleep, waitTwoRafs } from '../../utils/dom.js';\nimport { extractInfo } from '../../utils/editUrl.js';\nimport type { OverlayColors } from '../clickToEdit/constants.js';\nimport {\n  AUTOMATIC_TARGET_STAMP_ATTRIBUTE,\n  MANUAL_TARGET_STAMP_ATTRIBUTE,\n  STAMPED_ELEMENTS_SELECTOR\n} from '../domStamping/constants.js';\nimport { STAGGER_DELAY } from './FlashAllManager.js';\n\nexport class FlashItemManager {\n  private overlays: HighlightOverlay[] = [];\n  private pendingAnimationAbortController: AbortController | null = null;\n  private disposed: boolean = false;\n\n  constructor(\n    private readonly wrapperElement: ParentNode,\n    private readonly itemId: string,\n    private readonly editUrlRegExp: RegExp,\n    private readonly overlayColors?: OverlayColors\n  ) {}\n\n  async flash(scrollToNearestTarget: boolean) {\n    if (this.disposed) return;\n    await waitTwoRafs();\n    this.fadeIn(scrollToNearestTarget);\n    await sleep(1500);\n    await this.fadeOut();\n  }\n\n  private async fadeIn(scrollToNearestTarget: boolean) {\n    if (this.disposed) return;\n    const stampedElements =\n      this.wrapperElement.querySelectorAll<HTMLElement>(STAMPED_ELEMENTS_SELECTOR);\n\n    const targetsSet = new Set<HTMLElement>();\n    for (const element of stampedElements) {\n      const editUrl =\n        element.getAttribute(MANUAL_TARGET_STAMP_ATTRIBUTE) ||\n        element.getAttribute(AUTOMATIC_TARGET_STAMP_ATTRIBUTE);\n      if (editUrl) {\n        // Filter by itemId - parse editUrl to extract itemId\n        const editUrlInfo = extractInfo(editUrl, this.editUrlRegExp);\n        if (editUrlInfo && editUrlInfo.itemId === this.itemId) {\n          targetsSet.add(element);\n        }\n      }\n    }\n\n    const targets = Array.from(targetsSet);\n\n    if (targets.length === 0) {\n      return;\n    }\n\n    this.instantlyDisposeOverlays();\n\n    const abortController = new AbortController();\n    const { signal } = abortController;\n\n    this.pendingAnimationAbortController = abortController;\n\n    try {\n      if (scrollToNearestTarget) {\n        await maybeScrollToNearestTarget(targets, signal);\n      }\n\n      targets.map((target, index) => {\n        const overlay = new HighlightOverlay(target, { overlayColors: this.overlayColors });\n        overlay.fadeIn(index * STAGGER_DELAY, abortController);\n        this.overlays.push(overlay);\n      });\n    } catch (_) {\n      // animation cancelled\n    }\n  }\n\n  private async fadeOut() {\n    if (this.disposed) return;\n    this.cancelPendingAnimation();\n\n    const abortController = new AbortController();\n\n    const allFadedOut = Promise.all(\n      this.overlays.map((overlay, index) =>\n        overlay.disposeWithFadeOut(index * STAGGER_DELAY, abortController)\n      )\n    );\n\n    this.overlays = [];\n\n    return await allFadedOut;\n  }\n\n  dispose() {\n    if (this.disposed) return;\n    this.disposed = true;\n    this.instantlyDisposeOverlays();\n  }\n\n  private cancelPendingAnimation() {\n    this.pendingAnimationAbortController?.abort();\n  }\n\n  private instantlyDisposeOverlays() {\n    this.cancelPendingAnimation();\n\n    this.overlays.forEach((overlay) => {\n      overlay.cancelPendingAnimation();\n      overlay.dispose();\n    });\n    this.overlays = [];\n  }\n}\n","/**\n * Controller interface and no-op implementation for SSR environments.\n */\nimport type { Controller } from './types.js';\n\n/**\n * Minimal controller used when the runtime executes outside the browser.\n * Keeps the API surface consistent without touching the DOM.\n */\nexport class NoopController implements Controller {\n  private disposed = false;\n\n  dispose(): void {\n    this.disposed = true;\n  }\n\n  isDisposed(): boolean {\n    return this.disposed;\n  }\n\n  setCurrentPath(): void {\n    // no-op on the server\n  }\n\n  enableClickToEdit(): void {\n    // no-op on the server\n  }\n\n  disableClickToEdit(): void {\n    // no-op on the server\n  }\n\n  isClickToEditEnabled(): boolean {\n    return false;\n  }\n\n  flashAll(): void {\n    // no-op on the server\n  }\n}\n","/**\n * Entry point for enabling DatoCMS click-to-edit in the browser.\n * Orchestrates DOM observation, highlight rendering, optional dev tooling, and\n * exposes a controller so hosts can manage the experience.\n */\nimport { inBrowser } from '../utils/dom.js';\nimport { BrowserController } from './BrowserController.js';\nimport { NoopController } from './NoopController.js';\nimport type { Controller, CreateControllerOptions } from './types.js';\n\n/**\n * Boot the click-to-edit runtime. When executed in a browser it returns a live\n * controller; on the server we hand back a no-op implementation so callers\n * don't have to guard their usage.\n */\nexport function createController(options: CreateControllerOptions = {}): Controller {\n  return inBrowser() ? new BrowserController(options) : new NoopController();\n}\n"]}