From 9c5ed960612da90b39f49445a00cf973410137a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20Kova=C4=8Devi=C4=87?= Date: Fri, 4 Sep 2026 14:11:42 +0200 Subject: [PATCH 1/5] Fix dropdown positioning when a related element lives inside an iframe --- litmus/features/dropdown/IFramePortal.js | 57 + .../dropdown/lookup-inside-iframe-portal.js | 82 + .../dropdown/lookup-inside-real-iframe.js | 62 + litmus/features/dropdown/style.scss | 9 + litmus/index.js | 4 +- packages/cx/src/util/getActiveElement.ts | 15 +- packages/cx/src/widgets/overlay/Dropdown.tsx | 1779 +++++++++-------- 7 files changed, 1121 insertions(+), 887 deletions(-) create mode 100644 litmus/features/dropdown/IFramePortal.js create mode 100644 litmus/features/dropdown/lookup-inside-iframe-portal.js create mode 100644 litmus/features/dropdown/lookup-inside-real-iframe.js create mode 100644 litmus/features/dropdown/style.scss diff --git a/litmus/features/dropdown/IFramePortal.js b/litmus/features/dropdown/IFramePortal.js new file mode 100644 index 000000000..850e8c92c --- /dev/null +++ b/litmus/features/dropdown/IFramePortal.js @@ -0,0 +1,57 @@ +import { createPortal } from "react-dom"; +import { useEffect, useRef, useState } from "react"; + +function copyStyles(sourceDoc, targetDoc) { + Array.from(sourceDoc.styleSheets).forEach((styleSheet) => { + try { + if (styleSheet.href) { + let link = targetDoc.createElement("link"); + link.rel = "stylesheet"; + link.href = styleSheet.href; + targetDoc.head.appendChild(link); + } else if (styleSheet.ownerNode && styleSheet.ownerNode.textContent) { + // dev builds inject theme/widget CSS as inline