Skip to content

feat: update to upstream @floating-ui/dom@1.7.6#278

Merged
DanielleHuisman merged 2 commits intomainfrom
upstream/dom-1.7.6
Mar 12, 2026
Merged

feat: update to upstream @floating-ui/dom@1.7.6#278
DanielleHuisman merged 2 commits intomainfrom
upstream/dom-1.7.6

Conversation

@rust-for-web
Copy link
Contributor

@rust-for-web rust-for-web bot commented Mar 12, 2026

Release
@floating-ui/dom@1.7.6

Diff for packages/dom

Diff
diff --git a/packages/dom/CHANGELOG.md b/packages/dom/CHANGELOG.md
index 83ea46b5..6fd1f542 100644
--- a/packages/dom/CHANGELOG.md
+++ b/packages/dom/CHANGELOG.md
@@ -1,5 +1,20 @@
 # @floating-ui/dom
 
+## 1.7.6
+
+### Patch Changes
+
+- fix(types): ensure `Platform` type contains `detectOverflow` type
+- perf: bundle and runtime improvements
+- feat(autoUpdate): allow not passing a floating element
+- Update dependencies: `@floating-ui/utils@0.2.11`, `@floating-ui/core@1.7.5`
+
+## 1.7.5
+
+### Patch Changes
+
+- Update dependencies: `@floating-ui/core@1.7.4`
+
 ## 1.7.4
 
 ### Patch Changes
diff --git a/packages/dom/package.json b/packages/dom/package.json
index 23f3f1b5..5f11b4cd 100644
--- a/packages/dom/package.json
+++ b/packages/dom/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@floating-ui/dom",
-  "version": "1.7.4",
+  "version": "1.7.6",
   "description": "Floating UI for the web",
   "publishConfig": {
     "access": "public"
diff --git a/packages/dom/src/autoUpdate.ts b/packages/dom/src/autoUpdate.ts
index e1d3cc1e..f5ff8e1c 100644
--- a/packages/dom/src/autoUpdate.ts
+++ b/packages/dom/src/autoUpdate.ts
@@ -147,7 +147,7 @@ function observeMove(element: Element, onMove: () => void) {
  */
 export function autoUpdate(
   reference: ReferenceElement,
-  floating: FloatingElement,
+  floating: FloatingElement | null,
   update: () => void,
   options: AutoUpdateOptions = {},
 ) {
@@ -165,7 +165,7 @@ export function autoUpdate(
     ancestorScroll || ancestorResize
       ? [
           ...(referenceEl ? getOverflowAncestors(referenceEl) : []),
-          ...getOverflowAncestors(floating),
+          ...(floating ? getOverflowAncestors(floating) : []),
         ]
       : [];
 
@@ -183,7 +183,12 @@ export function autoUpdate(
 
   if (elementResize) {
     resizeObserver = new ResizeObserver(([firstEntry]) => {
-      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {
+      if (
+        firstEntry &&
+        firstEntry.target === referenceEl &&
+        resizeObserver &&
+        floating
+      ) {
         // Prevent update loops when using the `size` middleware.
         // https://github.com/floating-ui/floating-ui/issues/1740
         resizeObserver.unobserve(floating);
@@ -198,7 +203,10 @@ export function autoUpdate(
     if (referenceEl && !animationFrame) {
       resizeObserver.observe(referenceEl);
     }
-    resizeObserver.observe(floating);
+
+    if (floating) {
+      resizeObserver.observe(floating);
+    }
   }
 
   let frameId: number;
diff --git a/packages/dom/src/platform/convertOffsetParentRelativeRectToViewportRelativeRect.ts b/packages/dom/src/platform/convertOffsetParentRelativeRectToViewportRelativeRect.ts
index 0b17a0fd..1e384a92 100644
--- a/packages/dom/src/platform/convertOffsetParentRelativeRectToViewportRelativeRect.ts
+++ b/packages/dom/src/platform/convertOffsetParentRelativeRectToViewportRelativeRect.ts
@@ -45,7 +45,7 @@ export function convertOffsetParentRelativeRectToViewportRelativeRect({
       scroll = getNodeScroll(offsetParent);
     }
 
-    if (isHTMLElement(offsetParent)) {
+    if (isOffsetParentAnElement) {
       const offsetRect = getBoundingClientRect(offsetParent);
       scale = getScale(offsetParent);
       offsets.x = offsetRect.x + offsetParent.clientLeft;
diff --git a/packages/dom/src/platform/getClippingRect.ts b/packages/dom/src/platform/getClippingRect.ts
index e24678d9..80e17746 100644
--- a/packages/dom/src/platform/getClippingRect.ts
+++ b/packages/dom/src/platform/getClippingRect.ts
@@ -28,8 +28,6 @@ import {getVisualOffsets} from '../utils/getVisualOffsets';
 import {getScale} from './getScale';
 import {isElement} from './isElement';
 
-const absoluteOrFixed = new Set(['absolute', 'fixed']);
-
 type PlatformWithCache = Platform & {
   _c: Map<ReferenceElement, Element[]>;
 };
@@ -133,7 +131,8 @@ function getClippingElementAncestors(
       : (!currentNodeIsContaining &&
           computedStyle.position === 'static' &&
           !!currentContainingBlockComputedStyle &&
-          absoluteOrFixed.has(currentContainingBlockComputedStyle.position)) ||
+          (currentContainingBlockComputedStyle.position === 'absolute' ||
+            currentContainingBlockComputedStyle.position === 'fixed')) ||
         (isOverflowElement(currentNode) &&
           !currentNodeIsContaining &&
           hasFixedPositionAncestor(element, currentNode));
@@ -177,30 +176,33 @@ export function getClippingRect(
         : getClippingElementAncestors(element, this._c)
       : [].concat(boundary);
   const clippingAncestors = [...elementClippingAncestors, rootBoundary];
-  const firstClippingAncestor = clippingAncestors[0];
-
-  const clippingRect = clippingAncestors.reduce(
-    (accRect: ClientRectObject, clippingAncestor) => {
-      const rect = getClientRectFromClippingAncestor(
-        element,
-        clippingAncestor,
-        strategy,
-      );
-
-      accRect.top = max(rect.top, accRect.top);
-      accRect.right = min(rect.right, accRect.right);
-      accRect.bottom = min(rect.bottom, accRect.bottom);
-      accRect.left = max(rect.left, accRect.left);
-
-      return accRect;
-    },
-    getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy),
+
+  const firstRect = getClientRectFromClippingAncestor(
+    element,
+    clippingAncestors[0],
+    strategy,
   );
+  let top = firstRect.top;
+  let right = firstRect.right;
+  let bottom = firstRect.bottom;
+  let left = firstRect.left;
+
+  for (let i = 1; i < clippingAncestors.length; i++) {
+    const rect = getClientRectFromClippingAncestor(
+      element,
+      clippingAncestors[i],
+      strategy,
+    );
+    top = max(rect.top, top);
+    right = min(rect.right, right);
+    bottom = min(rect.bottom, bottom);
+    left = max(rect.left, left);
+  }
 
   return {
-    width: clippingRect.right - clippingRect.left,
-    height: clippingRect.bottom - clippingRect.top,
-    x: clippingRect.left,
-    y: clippingRect.top,
+    width: right - left,
+    height: bottom - top,
+    x: left,
+    y: top,
   };
 }
diff --git a/packages/dom/src/types.ts b/packages/dom/src/types.ts
index f405fef6..e4ec566b 100644
--- a/packages/dom/src/types.ts
+++ b/packages/dom/src/types.ts
@@ -16,6 +16,7 @@ import type {
   ShiftOptions as CoreShiftOptions,
   SizeOptions as CoreSizeOptions,
   Strategy,
+  detectOverflow,
 } from '@floating-ui/core';
 
 type Prettify<T> = {
@@ -89,6 +90,7 @@ export interface Platform {
   getClientRects: (element: Element) => Promisable<Array<ClientRectObject>>;
   isRTL: (element: Element) => Promisable<boolean>;
   getScale: (element: HTMLElement) => Promisable<{x: number; y: number}>;
+  detectOverflow?: typeof detectOverflow;
 }
 
 export interface NodeScroll {
diff --git a/packages/dom/test/functional/containing-block.test.ts b/packages/dom/test/functional/containing-block.test.ts
index a2c94ac2..b072730a 100644
--- a/packages/dom/test/functional/containing-block.test.ts
+++ b/packages/dom/test/functional/containing-block.test.ts
@@ -44,11 +44,6 @@ import {click} from './utils/click';
   test(`should be positioned on bottom with container-type ${containerType}`, async ({
     page,
   }) => {
-    test.skip(
-      ['inline-size', 'size'].includes(containerType),
-      'Behaviour of `container-type` has changed in Chrome (https://github.com/floating-ui/floating-ui/issues/3067).',
-    );
-
     await page.goto('http://localhost:1234/containing-block');
 
     await click(page, `[data-testid="container-type-${containerType}"]`);
diff --git a/packages/dom/test/functional/top-layer.test.ts-snapshots/top-layer-dialog-inner-linux.png b/packages/dom/test/functional/top-layer.test.ts-snapshots/top-layer-dialog-inner-linux.png
index 9769f0c4..ab42a76e 100644
Binary files a/packages/dom/test/functional/top-layer.test.ts-snapshots/top-layer-dialog-inner-linux.png and b/packages/dom/test/functional/top-layer.test.ts-snapshots/top-layer-dialog-inner-linux.png differ

Full diff
1.7.4...1.7.6.

@DanielleHuisman DanielleHuisman marked this pull request as ready for review March 12, 2026 10:37
@DanielleHuisman DanielleHuisman merged commit 3249011 into main Mar 12, 2026
4 of 5 checks passed
@DanielleHuisman DanielleHuisman deleted the upstream/dom-1.7.6 branch March 12, 2026 10:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant