Skip to content

Conversation

@github-actions
Copy link
Contributor

Release
@floating-ui/utils@0.2.3

Diff for packages/utils

Diff
diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md
index f7a73e57..cec3bf94 100644
--- a/packages/utils/CHANGELOG.md
+++ b/packages/utils/CHANGELOG.md
@@ -1,5 +1,13 @@
 # @floating-ui/utils
 
+## 0.2.3
+
+### Patch Changes
+
+- fix(getContainingBlock): detect top layer elements
+- fix(types): add optional `getClientRects()` method to `VirtualElement`
+- refactor: improve types and internal codebase consistency. All documented types are now exported.
+
 ## 0.2.2
 
 ### Patch Changes
diff --git a/packages/utils/package.json b/packages/utils/package.json
index b755ab8f..fd2d166a 100644
--- a/packages/utils/package.json
+++ b/packages/utils/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@floating-ui/utils",
-  "version": "0.2.2",
+  "version": "0.2.3",
   "description": "Utilities for Floating UI",
   "publishConfig": {
     "access": "public"
diff --git a/packages/utils/src/dom.ts b/packages/utils/src/dom.ts
index d2488d17..1c5968c7 100644
--- a/packages/utils/src/dom.ts
+++ b/packages/utils/src/dom.ts
@@ -58,6 +58,16 @@ export function isTableElement(element: Element): boolean {
   return ['table', 'td', 'th'].includes(getNodeName(element));
 }
 
+export function isTopLayer(element: Element): boolean {
+  return [':popover-open', ':modal'].some((selector) => {
+    try {
+      return element.matches(selector);
+    } catch (e) {
+      return false;
+    }
+  });
+}
+
 export function isContainingBlock(element: Element): boolean {
   const webkit = isWebKit();
   const css = getComputedStyle(element);
@@ -82,6 +92,10 @@ export function getContainingBlock(element: Element): HTMLElement | null {
   let currentNode: Node | null = getParentNode(element);
 
   while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {
+    if (isTopLayer(currentNode)) {
+      return null;
+    }
+
     if (isContainingBlock(currentNode)) {
       return currentNode;
     }
diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts
index b62cbdd8..b5e37cee 100644
--- a/packages/utils/src/index.ts
+++ b/packages/utils/src/index.ts
@@ -1,16 +1,20 @@
+type Prettify<T> = {
+  [K in keyof T]: T[K];
+} & {};
+
 export type Alignment = 'start' | 'end';
 export type Side = 'top' | 'right' | 'bottom' | 'left';
 export type AlignedPlacement = `${Side}-${Alignment}`;
-export type Placement = Side | AlignedPlacement;
+export type Placement = Prettify<Side | AlignedPlacement>;
 export type Strategy = 'absolute' | 'fixed';
 export type Axis = 'x' | 'y';
 export type Coords = {[key in Axis]: number};
 export type Length = 'width' | 'height';
 export type Dimensions = {[key in Length]: number};
 export type SideObject = {[key in Side]: number};
-export type Rect = Coords & Dimensions;
-export type Padding = number | Partial<SideObject>;
-export type ClientRectObject = Rect & SideObject;
+export type Rect = Prettify<Coords & Dimensions>;
+export type Padding = number | Prettify<Partial<SideObject>>;
+export type ClientRectObject = Prettify<Rect & SideObject>;
 
 export interface ElementRects {
   reference: Rect;
@@ -21,10 +25,11 @@ export interface ElementRects {
  * Custom positioning reference element.
  * @see https://floating-ui.com/docs/virtual-elements
  */
-export type VirtualElement = {
+export interface VirtualElement {
   getBoundingClientRect(): ClientRectObject;
+  getClientRects?(): Array<ClientRectObject>;
   contextElement?: any;
-};
+}
 
 export const sides: Side[] = ['top', 'right', 'bottom', 'left'];
 export const alignments: Alignment[] = ['start', 'end'];

Full diff
0.2.2...0.2.3.

@DanielleHuisman DanielleHuisman marked this pull request as ready for review June 26, 2024 06:25
@DanielleHuisman DanielleHuisman enabled auto-merge (squash) June 26, 2024 06:35
@DanielleHuisman DanielleHuisman merged commit d857992 into main Jun 26, 2024
@DanielleHuisman DanielleHuisman deleted the upstream/utils-0.2.3 branch June 26, 2024 06:38
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.

2 participants