Skip to content

feat: update to upstream @floating-ui/core@1.7.5#277

Merged
DanielleHuisman merged 2 commits intomainfrom
upstream/core-1.7.5
Mar 12, 2026
Merged

feat: update to upstream @floating-ui/core@1.7.5#277
DanielleHuisman merged 2 commits intomainfrom
upstream/core-1.7.5

Conversation

@rust-for-web
Copy link
Contributor

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

Release
@floating-ui/core@1.7.5

Diff for packages/core

Diff
diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md
index 95a8501b..533bbe94 100644
--- a/packages/core/CHANGELOG.md
+++ b/packages/core/CHANGELOG.md
@@ -1,5 +1,18 @@
 # @floating-ui/core
 
+## 1.7.5
+
+### Patch Changes
+
+- perf: bundle and runtime improvements
+- Update dependencies: `@floating-ui/utils@0.2.11`
+
+## 1.7.4
+
+### Patch Changes
+
+- feat: detectOverflow configurable via platform
+
 ## 1.7.3
 
 ### Patch Changes
diff --git a/packages/core/package.json b/packages/core/package.json
index 6c6ddf80..3d74b6d2 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@floating-ui/core",
-  "version": "1.7.3",
+  "version": "1.7.5",
   "description": "Positioning library for floating elements: tooltips, popovers, dropdowns, and more",
   "publishConfig": {
     "access": "public"
diff --git a/packages/core/src/computePosition.ts b/packages/core/src/computePosition.ts
index feea00aa..9eed7704 100644
--- a/packages/core/src/computePosition.ts
+++ b/packages/core/src/computePosition.ts
@@ -1,5 +1,14 @@
 import {computeCoordsFromPlacement} from './computeCoordsFromPlacement';
-import type {ComputePosition, Middleware, MiddlewareData} from './types';
+import {detectOverflow} from './detectOverflow';
+import type {
+  ComputePosition,
+  Middleware,
+  MiddlewareData,
+  Platform,
+} from './types';
+
+// Maximum number of resets that can occur before bailing to avoid infinite reset loops.
+const MAX_RESET_COUNT = 50;
 
 /**
  * Computes the `x` and `y` coordinates that will place the floating element
@@ -20,17 +29,26 @@ export const computePosition: ComputePosition = async (
     platform,
   } = config;
 
-  const validMiddleware = middleware.filter(Boolean) as Middleware[];
+  const platformWithDetectOverflow = (
+    platform.detectOverflow ? platform : {...platform, detectOverflow}
+  ) as Platform & {detectOverflow: typeof detectOverflow};
   const rtl = await platform.isRTL?.(floating);
 
   let rects = await platform.getElementRects({reference, floating, strategy});
   let {x, y} = computeCoordsFromPlacement(rects, placement, rtl);
   let statefulPlacement = placement;
-  let middlewareData: MiddlewareData = {};
   let resetCount = 0;
 
-  for (let i = 0; i < validMiddleware.length; i++) {
-    const {name, fn} = validMiddleware[i];
+  const middlewareData: MiddlewareData = {};
+
+  for (let i = 0; i < middleware.length; i++) {
+    const currentMiddleware = middleware[i] as Middleware | undefined;
+
+    if (!currentMiddleware) {
+      continue;
+    }
+
+    const {name, fn} = currentMiddleware;
 
     const {
       x: nextX,
@@ -45,22 +63,19 @@ export const computePosition: ComputePosition = async (
       strategy,
       middlewareData,
       rects,
-      platform,
+      platform: platformWithDetectOverflow,
       elements: {reference, floating},
     });
 
     x = nextX ?? x;
     y = nextY ?? y;
 
-    middlewareData = {
-      ...middlewareData,
-      [name]: {
-        ...middlewareData[name],
-        ...data,
-      },
+    middlewareData[name] = {
+      ...middlewareData[name],
+      ...data,
     };
 
-    if (reset && resetCount <= 50) {
+    if (reset && resetCount < MAX_RESET_COUNT) {
       resetCount++;
 
       if (typeof reset === 'object') {
diff --git a/packages/core/src/middleware/autoPlacement.ts b/packages/core/src/middleware/autoPlacement.ts
index fb7d812f..e769967c 100644
--- a/packages/core/src/middleware/autoPlacement.ts
+++ b/packages/core/src/middleware/autoPlacement.ts
@@ -9,7 +9,6 @@ import {
 } from '@floating-ui/utils';
 
 import type {DetectOverflowOptions} from '../detectOverflow';
-import {detectOverflow} from '../detectOverflow';
 import type {Derivable, Middleware} from '../types';
 
 export function getPlacementList(
@@ -95,7 +94,10 @@ export const autoPlacement = (
         ? getPlacementList(alignment || null, autoAlignment, allowedPlacements)
         : allowedPlacements;
 
-    const overflow = await detectOverflow(state, detectOverflowOptions);
+    const overflow = await platform.detectOverflow(
+      state,
+      detectOverflowOptions,
+    );
 
     const currentIndex = middlewareData.autoPlacement?.index || 0;
     const currentPlacement = placements[currentIndex];
diff --git a/packages/core/src/middleware/flip.ts b/packages/core/src/middleware/flip.ts
index f1a619c4..8f87f499 100644
--- a/packages/core/src/middleware/flip.ts
+++ b/packages/core/src/middleware/flip.ts
@@ -10,7 +10,6 @@ import {
 } from '@floating-ui/utils';
 
 import type {DetectOverflowOptions} from '../detectOverflow';
-import {detectOverflow} from '../detectOverflow';
 import type {Derivable, Middleware} from '../types';
 
 export interface FlipOptions extends DetectOverflowOptions {
@@ -118,7 +117,10 @@ export const flip = (
 
     const placements = [initialPlacement, ...fallbackPlacements];
 
-    const overflow = await detectOverflow(state, detectOverflowOptions);
+    const overflow = await platform.detectOverflow(
+      state,
+      detectOverflowOptions,
+    );
 
     const overflows = [];
     let overflowsData = middlewareData.flip?.overflows || [];
diff --git a/packages/core/src/middleware/hide.ts b/packages/core/src/middleware/hide.ts
index 7487cc95..914db8be 100644
--- a/packages/core/src/middleware/hide.ts
+++ b/packages/core/src/middleware/hide.ts
@@ -2,7 +2,6 @@ import type {Rect, SideObject} from '@floating-ui/utils';
 import {evaluate, sides} from '@floating-ui/utils';
 
 import type {DetectOverflowOptions} from '../detectOverflow';
-import {detectOverflow} from '../detectOverflow';
 import type {Derivable, Middleware} from '../types';
 
 function getSideOffsets(overflow: SideObject, rect: Rect) {
@@ -36,7 +35,7 @@ export const hide = (
   name: 'hide',
   options,
   async fn(state) {
-    const {rects} = state;
+    const {rects, platform} = state;
 
     const {strategy = 'referenceHidden', ...detectOverflowOptions} = evaluate(
       options,
@@ -45,7 +44,7 @@ export const hide = (
 
     switch (strategy) {
       case 'referenceHidden': {
-        const overflow = await detectOverflow(state, {
+        const overflow = await platform.detectOverflow(state, {
           ...detectOverflowOptions,
           elementContext: 'reference',
         });
@@ -58,7 +57,7 @@ export const hide = (
         };
       }
       case 'escaped': {
-        const overflow = await detectOverflow(state, {
+        const overflow = await platform.detectOverflow(state, {
           ...detectOverflowOptions,
           altBoundary: true,
         });
diff --git a/packages/core/src/middleware/shift.ts b/packages/core/src/middleware/shift.ts
index 6f893e11..7c9ca94a 100644
--- a/packages/core/src/middleware/shift.ts
+++ b/packages/core/src/middleware/shift.ts
@@ -9,7 +9,6 @@ import {
 
 import {originSides} from '../constants';
 import type {DetectOverflowOptions} from '../detectOverflow';
-import {detectOverflow} from '../detectOverflow';
 import type {Derivable, Middleware, MiddlewareState} from '../types';
 
 export interface ShiftOptions extends DetectOverflowOptions {
@@ -46,7 +45,7 @@ export const shift = (
   name: 'shift',
   options,
   async fn(state) {
-    const {x, y, placement} = state;
+    const {x, y, placement, platform} = state;
 
     const {
       mainAxis: checkMainAxis = true,
@@ -56,7 +55,10 @@ export const shift = (
     } = evaluate(options, state);
 
     const coords = {x, y};
-    const overflow = await detectOverflow(state, detectOverflowOptions);
+    const overflow = await platform.detectOverflow(
+      state,
+      detectOverflowOptions,
+    );
     const crossAxis = getSideAxis(getSide(placement));
     const mainAxis = getOppositeAxis(crossAxis);
 
diff --git a/packages/core/src/middleware/size.ts b/packages/core/src/middleware/size.ts
index 3ddc9a75..2d25b6f2 100644
--- a/packages/core/src/middleware/size.ts
+++ b/packages/core/src/middleware/size.ts
@@ -8,7 +8,6 @@ import {
 } from '@floating-ui/utils';
 
 import type {DetectOverflowOptions} from '../detectOverflow';
-import {detectOverflow} from '../detectOverflow';
 import type {Derivable, Middleware, MiddlewareState} from '../types';
 
 export interface SizeOptions extends DetectOverflowOptions {
@@ -44,7 +43,10 @@ export const size = (
       state,
     );
 
-    const overflow = await detectOverflow(state, detectOverflowOptions);
+    const overflow = await platform.detectOverflow(
+      state,
+      detectOverflowOptions,
+    );
     const side = getSide(placement);
     const alignment = getAlignment(placement);
     const isYAxis = getSideAxis(placement) === 'y';
diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts
index 57d39532..c7402c13 100644
--- a/packages/core/src/types.ts
+++ b/packages/core/src/types.ts
@@ -9,6 +9,7 @@ import type {
   SideObject,
   Strategy,
 } from '@floating-ui/utils';
+import type {detectOverflow} from './detectOverflow';
 
 type Promisable<T> = T | Promise<T>;
 
@@ -49,6 +50,7 @@ export interface Platform {
   getClientRects?: (element: any) => Promisable<Array<ClientRectObject>>;
   isRTL?: (element: any) => Promisable<boolean>;
   getScale?: (element: any) => Promisable<{x: number; y: number}>;
+  detectOverflow?: typeof detectOverflow;
 }
 
 export interface MiddlewareData {
@@ -157,7 +159,7 @@ export interface MiddlewareState extends Coords {
   middlewareData: MiddlewareData;
   elements: Elements;
   rects: ElementRects;
-  platform: Platform;
+  platform: {detectOverflow: typeof detectOverflow} & Platform;
 }
 /**
  * @deprecated use `MiddlewareState` instead.

Full diff
1.7.3...1.7.5.

@DanielleHuisman DanielleHuisman marked this pull request as ready for review March 12, 2026 10:18
@DanielleHuisman DanielleHuisman merged commit 5a07bfa into main Mar 12, 2026
4 of 5 checks passed
@DanielleHuisman DanielleHuisman deleted the upstream/core-1.7.5 branch March 12, 2026 10:18
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