diff --git a/packages/main/cypress/specs/Popover.cy.tsx b/packages/main/cypress/specs/Popover.cy.tsx index 711fb7ea86a3..538582752702 100644 --- a/packages/main/cypress/specs/Popover.cy.tsx +++ b/packages/main/cypress/specs/Popover.cy.tsx @@ -3,6 +3,40 @@ import Toolbar from "../../src/Toolbar.js"; import Popover from "../../src/Popover.js"; import Button from "../../src/Button.js"; +describe("Rendering", () => { + it("tests arrow positioning", () => { + cy.mount( + <> +
+ + + + + ); + + // act + cy.get("#popup") + .invoke("prop", "open", "true"); + + cy.get("#popup") + .ui5PopoverOpened(); + + cy.get("#popup") + .shadow() + .find(".ui5-popover-arrow") + .should("be.visible"); + + cy.get("#popup") + .shadow() + .find(".ui5-popover-arrow") + .should("have.css", "transform", "matrix(1, 0, 0, 1, 0, -42)"); + }); +}); + describe("Popover opener", () => { it("tests 'opener' set as string of abstract element's ID ", () => { cy.mount( @@ -110,7 +144,7 @@ describe("Popover opener", () => { }); cy.get("#popover") - .should("be.visible"); + .ui5PopoverOpened(); cy.get("@showOutsideViewport") .should("have.been.calledOnce"); @@ -129,7 +163,7 @@ describe("Popover interaction", () => { ); - cy.get("#pop").should("be.visible"); + cy.get("#pop").ui5PopoverOpened(); // act cy.get("body").realClick(); @@ -148,13 +182,13 @@ describe("Popover interaction", () => { ); - cy.get("#pop").should("be.visible"); + cy.get("#pop").ui5PopoverOpened(); // act cy.get("#opener").realClick(); // assert - cy.get("#pop").should("be.visible"); + cy.get("#pop").ui5PopoverOpened(); }); it("tests clicking on the opener if both the popover and the opener are located in a shadow root", () => { @@ -197,13 +231,13 @@ describe("Popover interaction", () => { ); // assert - cy.get("#openerShadowRooTest").shadow().find("[ui5-popover]").should("be.visible"); + cy.get("#openerShadowRooTest").shadow().find("[ui5-popover]").ui5PopoverOpened(); // act cy.get("#openerShadowRooTest").shadow().find("button").realClick(); // assert - cy.get("#openerShadowRooTest").shadow().find("[ui5-popover]").should("be.visible"); + cy.get("#openerShadowRooTest").shadow().find("[ui5-popover]").ui5PopoverOpened(); }); it("tests clicking outside the popover when 'mousedown' event propagation is stopped", () => { @@ -217,7 +251,7 @@ describe("Popover interaction", () => { ); - cy.get("#pop").should("be.visible"); + cy.get("#pop").ui5PopoverOpened(); cy.get("#btn").then(btn => { btn.get(0).addEventListener("mousedown", event => { event.stopPropagation(); @@ -334,7 +368,7 @@ describe("Events", () => { .invoke("prop", "open", true); cy.get("#popoverId") - .should("be.visible"); + .ui5PopoverOpened(); }); it("before-close", () => { @@ -356,7 +390,7 @@ describe("Events", () => { .invoke("prop", "open", true); cy.get("#popoverId") - .should("be.visible"); + .ui5PopoverOpened(); const preventDefault = (e : Event) => { e.preventDefault(); @@ -370,7 +404,7 @@ describe("Events", () => { .invoke("prop", "open", false); cy.get("#popoverId") - .should("be.visible"); + .ui5PopoverOpened(); cy.get("#popoverId").then($popover => { $popover.get(0).removeEventListener("before-close", preventDefault); diff --git a/packages/main/src/Popover.ts b/packages/main/src/Popover.ts index cf22bbdecfe3..0408a9dfd942 100644 --- a/packages/main/src/Popover.ts +++ b/packages/main/src/Popover.ts @@ -647,14 +647,14 @@ class Popover extends Popup { // Restricts the arrow's translate value along each dimension, // so that the arrow does not clip over the popover's rounded borders. - const safeRangeForArrowY = popoverSize.height / 2 - borderRadius - ARROW_SIZE / 2; + const safeRangeForArrowY = popoverSize.height / 2 - borderRadius - ARROW_SIZE / 2 - 2; arrowTranslateY = clamp( arrowTranslateY, -safeRangeForArrowY, safeRangeForArrowY, ); - const safeRangeForArrowX = popoverSize.width / 2 - borderRadius - ARROW_SIZE / 2; + const safeRangeForArrowX = popoverSize.width / 2 - borderRadius - ARROW_SIZE / 2 - 2; arrowTranslateX = clamp( arrowTranslateX, -safeRangeForArrowX, diff --git a/packages/main/test/pages/Popover.html b/packages/main/test/pages/Popover.html index fd85079a82ac..ed373293592a 100644 --- a/packages/main/test/pages/Popover.html +++ b/packages/main/test/pages/Popover.html @@ -99,6 +99,26 @@

+ + + +
+ Email + + Note: If you open the page in mobile, a dialog would be displayed. +
+ +
+ +
+
+ Hello World @@ -941,6 +961,10 @@

Popover in ShadowRoot, Opener set as ID in window.document

respPopover4.open = !respPopover4.open; }); + icon1.addEventListener("click", () => { + popoverAlignedToIcon.open = true; + }); + class OpenerTestShadowRootId extends HTMLElement { constructor() { super();