diff --git a/docs/src/data/tailwind-migration-status.yaml b/docs/src/data/tailwind-migration-status.yaml index ae7cb348bc..3b9d8e7911 100644 --- a/docs/src/data/tailwind-migration-status.yaml +++ b/docs/src/data/tailwind-migration-status.yaml @@ -65,7 +65,7 @@ NavigationBar: true NotificationBadge: true OrbitProvider: true Pagination: false -Popover: false +Popover: true Portal: true Radio: true NewSeatIcon: false diff --git a/packages/orbit-components/cypress/integration/pages/lock-scrolling.test.ts b/packages/orbit-components/cypress/integration/pages/lock-scrolling.test.ts index e2aeb6a684..0dc8756fe2 100644 --- a/packages/orbit-components/cypress/integration/pages/lock-scrolling.test.ts +++ b/packages/orbit-components/cypress/integration/pages/lock-scrolling.test.ts @@ -6,7 +6,7 @@ describe("useLockScrolling", () => { it("should listen for viewport resize", () => { cy.viewport(breakpoint - 1, 600); cy.visit("/lock-scrolling"); - cy.findByRole("button", { name: "Open" }).click(); + cy.findAllByRole("button", { name: "Open" }).eq(1).click(); cy.get("body").should("have.css", "overflow-y", "hidden"); // cy.get("body").should("have.css", "padding-right", "15px"); cy.viewport(breakpoint, 600); @@ -20,8 +20,8 @@ describe("useLockScrolling", () => { it("should unlock scrolling after last lock is cleared", () => { cy.viewport(breakpoint - 1, 600); cy.visit("/lock-scrolling"); - cy.findByRole("button", { name: "Open" }).click(); - cy.findByRole("button", { name: "Open nested" }).click(); + cy.findAllByRole("button", { name: "Open" }).eq(1).click(); + cy.findAllByRole("button", { name: "Open nested" }).eq(1).click(); cy.findByRole("button", { name: "Close nested" }).click(); cy.get("body").should("have.css", "overflow-y", "hidden"); cy.findByRole("button", { name: "Close" }).click(); diff --git a/packages/orbit-components/src/Popover/Popover.ct-story.tsx b/packages/orbit-components/src/Popover/Popover.ct-story.tsx new file mode 100644 index 0000000000..6239bca6e5 --- /dev/null +++ b/packages/orbit-components/src/Popover/Popover.ct-story.tsx @@ -0,0 +1,82 @@ +import React from "react"; +import type { Placement } from "@popperjs/core/lib/enums"; + +import Text from "../Text"; +import Button from "../Button"; +import Stepper from "../Stepper"; +import Stack from "../Stack"; + +import Popover from "."; + +const content = Popover content; + +const selects = ( + + + + Adult + 11+ + + + + + + Child + 2-11 + + + + +); + +export function DefaultPopover() { + return ( +
+ + + +
+ ); +} + +export function PopoverWithCustomWidth() { + return ( +
+ + + +
+ ); +} + +export const PopoverPlacements = ({ placement }: { placement: Placement }) => ( +
+ + + +
+); + +export const PopoverWithFixedPosition = () => ( +
+ + + +
+); + +export const PopoverOverlapped = () => ( +
+ + + +
+); + +export const PopoverLongContent = () => ( +
+ {Array.from({ length: 8 }).map(() => selects)}}> + + +
+); diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx b/packages/orbit-components/src/Popover/Popover.ct.tsx new file mode 100644 index 0000000000..1775897430 --- /dev/null +++ b/packages/orbit-components/src/Popover/Popover.ct.tsx @@ -0,0 +1,64 @@ +import * as React from "react"; +import { test, expect } from "@playwright/experimental-ct-react"; + +import { + DefaultPopover, + PopoverWithCustomWidth, + PopoverWithFixedPosition, + PopoverPlacements, + PopoverOverlapped, + PopoverLongContent, +} from "./Popover.ct-story"; +import { PLACEMENTS } from "../common/consts"; + +test.describe("visual Popover", () => { + test(`screenshot for default`, async ({ mount }, { project }) => { + if (project.name === "Desktop") { + const component = await mount(); + + await expect(component).toHaveScreenshot(); + } + }); + + Object.values(PLACEMENTS).forEach(placement => { + test(`screenshot for placement ${placement}`, async ({ mount }, { project }) => { + if (project.name === "Desktop") { + const component = await mount(); + + await expect(component).toHaveScreenshot(); + } + }); + }); + + test(`screenshot for custom width`, async ({ mount }, { project }) => { + if (project.name === "Desktop") { + const component = await mount(); + + await expect(component).toHaveScreenshot(); + } + }); + + test(`screenshot for fixed position`, async ({ mount }, { project }) => { + if (project.name === "Desktop") { + const component = await mount(); + + await expect(component).toHaveScreenshot(); + } + }); + + test(`screenshot for overlapped`, async ({ mount }, { project }) => { + if (project.name === "Desktop") { + const component = await mount(); + + await expect(component).toHaveScreenshot(); + } + }); + + test(`screenshot for long content`, async ({ mount }, { project }) => { + if (project.name === "Desktop") { + const component = await mount(); + + await expect(component).toHaveScreenshot(); + } + }); +}); diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-custom-width-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-custom-width-1-Desktop-darwin.png new file mode 100644 index 0000000000..cb07a584a3 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-custom-width-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-custom-width-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-custom-width-1-Desktop-linux.png new file mode 100644 index 0000000000..733b906021 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-custom-width-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-default-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-default-1-Desktop-darwin.png new file mode 100644 index 0000000000..07583997c2 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-default-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-default-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-default-1-Desktop-linux.png new file mode 100644 index 0000000000..4a1f73b92f Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-default-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-fixed-position-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-fixed-position-1-Desktop-darwin.png new file mode 100644 index 0000000000..511713cba5 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-fixed-position-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-fixed-position-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-fixed-position-1-Desktop-linux.png new file mode 100644 index 0000000000..e7d02320b3 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-fixed-position-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-long-content-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-long-content-1-Desktop-darwin.png new file mode 100644 index 0000000000..6623da1836 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-long-content-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-long-content-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-long-content-1-Desktop-linux.png new file mode 100644 index 0000000000..d03de503a5 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-long-content-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-overlapped-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-overlapped-1-Desktop-darwin.png new file mode 100644 index 0000000000..587c41f512 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-overlapped-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-overlapped-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-overlapped-1-Desktop-linux.png new file mode 100644 index 0000000000..0f02254619 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-overlapped-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-1-Desktop-darwin.png new file mode 100644 index 0000000000..1b17f65437 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-1-Desktop-linux.png new file mode 100644 index 0000000000..27b2b42869 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-end-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-end-1-Desktop-darwin.png new file mode 100644 index 0000000000..22051977b4 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-end-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-end-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-end-1-Desktop-linux.png new file mode 100644 index 0000000000..8586cfc4d0 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-end-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-start-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-start-1-Desktop-darwin.png new file mode 100644 index 0000000000..22051977b4 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-start-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-start-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-start-1-Desktop-linux.png new file mode 100644 index 0000000000..8586cfc4d0 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-auto-start-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-1-Desktop-darwin.png new file mode 100644 index 0000000000..92313e1dad Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-1-Desktop-linux.png new file mode 100644 index 0000000000..75567b41c9 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-end-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-end-1-Desktop-darwin.png new file mode 100644 index 0000000000..49cc66f89f Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-end-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-end-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-end-1-Desktop-linux.png new file mode 100644 index 0000000000..960aa331c1 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-end-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-start-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-start-1-Desktop-darwin.png new file mode 100644 index 0000000000..07583997c2 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-start-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-start-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-start-1-Desktop-linux.png new file mode 100644 index 0000000000..4a1f73b92f Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-bottom-start-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-1-Desktop-darwin.png new file mode 100644 index 0000000000..488d172b18 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-1-Desktop-linux.png new file mode 100644 index 0000000000..3f965ddebd Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-end-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-end-1-Desktop-darwin.png new file mode 100644 index 0000000000..748362a902 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-end-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-end-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-end-1-Desktop-linux.png new file mode 100644 index 0000000000..f1ee065241 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-end-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-start-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-start-1-Desktop-darwin.png new file mode 100644 index 0000000000..657cb56c55 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-start-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-start-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-start-1-Desktop-linux.png new file mode 100644 index 0000000000..7450d4e70b Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-left-start-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-1-Desktop-darwin.png new file mode 100644 index 0000000000..1b17f65437 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-1-Desktop-linux.png new file mode 100644 index 0000000000..27b2b42869 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-end-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-end-1-Desktop-darwin.png new file mode 100644 index 0000000000..19489fec09 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-end-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-end-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-end-1-Desktop-linux.png new file mode 100644 index 0000000000..39a7d2df10 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-end-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-start-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-start-1-Desktop-darwin.png new file mode 100644 index 0000000000..22051977b4 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-start-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-start-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-start-1-Desktop-linux.png new file mode 100644 index 0000000000..8586cfc4d0 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-right-start-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-1-Desktop-darwin.png new file mode 100644 index 0000000000..c4b407a285 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-1-Desktop-linux.png new file mode 100644 index 0000000000..92e0815f6f Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-end-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-end-1-Desktop-darwin.png new file mode 100644 index 0000000000..0e509d1d3f Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-end-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-end-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-end-1-Desktop-linux.png new file mode 100644 index 0000000000..f025af56a0 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-end-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-start-1-Desktop-darwin.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-start-1-Desktop-darwin.png new file mode 100644 index 0000000000..024a3e0096 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-start-1-Desktop-darwin.png differ diff --git a/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-start-1-Desktop-linux.png b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-start-1-Desktop-linux.png new file mode 100644 index 0000000000..e93ae27d98 Binary files /dev/null and b/packages/orbit-components/src/Popover/Popover.ct.tsx-snapshots/visual-Popover-screenshot-for-placement-top-start-1-Desktop-linux.png differ diff --git a/packages/orbit-components/src/Popover/Popover.stories.tsx b/packages/orbit-components/src/Popover/Popover.stories.tsx index 379768272c..acd2f993bc 100644 --- a/packages/orbit-components/src/Popover/Popover.stories.tsx +++ b/packages/orbit-components/src/Popover/Popover.stories.tsx @@ -34,22 +34,22 @@ const ScrollWrapper = styled.div` `; const selects = ( - <> - - + + + Adult 11+ - - + + Child 2-11 - + ); const content = {selects}; diff --git a/packages/orbit-components/src/Popover/__tests__/index.test.tsx b/packages/orbit-components/src/Popover/__tests__/index.test.tsx index a9ccf8d382..58b0dfdad9 100644 --- a/packages/orbit-components/src/Popover/__tests__/index.test.tsx +++ b/packages/orbit-components/src/Popover/__tests__/index.test.tsx @@ -37,7 +37,7 @@ describe("Popover", () => { , ); - const openButton = screen.getByRole("button", { name: "Open" }); + const openButton = screen.getAllByRole("button", { name: "Open" })[1]; await user.click(openButton); expect(onOpen).toHaveBeenCalled(); expect(screen.getByTestId(dataTest)).toBeInTheDocument(); @@ -88,7 +88,7 @@ describe("Popover", () => { ); // default is 4px - expect(screen.getByRole("tooltip")).toHaveStyle({ top: "10" }); + expect(screen.getByRole("dialog")).toHaveStyle({ top: "10" }); // Needs to flush async `floating-ui` hooks // https://github.com/floating-ui/floating-ui/issues/1520 await act(async () => {}); @@ -100,10 +100,11 @@ describe("Popover", () => { , ); - await user.click(screen.getByRole("button")); + + await user.click(screen.getAllByRole("button")[1]); const overlay = (await screen.findByTestId("popover")).previousElementSibling; expect(overlay).toBeInTheDocument(); if (overlay) await user.click(overlay); - expect(screen.queryByTestId("popover")).not.toBeInTheDocument(); + expect(screen.queryByTestId("dialog")).not.toBeInTheDocument(); }); }); diff --git a/packages/orbit-components/src/Popover/components/ContentWrapper.tsx b/packages/orbit-components/src/Popover/components/ContentWrapper.tsx index 7445ad63b7..86c1f6e0f9 100644 --- a/packages/orbit-components/src/Popover/components/ContentWrapper.tsx +++ b/packages/orbit-components/src/Popover/components/ContentWrapper.tsx @@ -1,15 +1,13 @@ +"use client"; + import * as React from "react"; -import styled, { css } from "styled-components"; -import { convertHexToRgba } from "@kiwicom/orbit-design-tokens"; import { usePopper } from "react-popper"; import type { Placement } from "@popperjs/core/lib/enums"; +import cx from "clsx"; import type * as Common from "../../common/types"; -import defaultTheme from "../../defaultTheme"; -import mq from "../../utils/mediaQuery"; import Button from "../../Button"; import useMediaQuery from "../../hooks/useMediaQuery"; -import transition from "../../utils/transition"; import useClickOutside from "../../hooks/useClickOutside"; import useLockScrolling from "../../hooks/useLockScrolling"; import { ModalContext } from "../../Modal/ModalContext"; @@ -17,12 +15,8 @@ import { PLACEMENTS } from "../../common/consts"; import boundingClientRect from "../../utils/boundingClientRect"; import type { Offset } from "../types"; -const mobileTop = ({ theme }) => theme.orbit.spaceXLarge; -const popoverPadding = ({ theme }) => theme.orbit.spaceMedium; - export interface Props extends Common.Globals { children: React.ReactNode; - closeText?: React.ReactNode; referenceElement: HTMLElement | null; placement: Placement; width?: string; @@ -41,195 +35,6 @@ export interface Props extends Common.Globals { onClose: (ev?: MouseEvent | React.SyntheticEvent) => void; } -const StyledContentWrapper = styled.div<{ - maxHeight?: string; - windowHeight?: number | null; - actionsHeight?: number | null; -}>` - ${({ theme, windowHeight, actionsHeight, maxHeight }) => css` - overflow: auto; - border-top-left-radius: ${theme.orbit.spaceSmall}; - border-top-right-radius: ${theme.orbit.spaceSmall}; - position: absolute; - left: 0; - width: 100%; - background-color: ${theme.orbit.paletteWhite}; - max-height: ${windowHeight && actionsHeight && windowHeight - actionsHeight - 32}px; - bottom: ${actionsHeight || 0}px; - - ${mq.largeMobile(css` - max-height: ${maxHeight || "100%"}; - border-radius: ${theme.orbit.borderRadiusNormal}; - bottom: auto; - left: auto; - position: relative; - `)} - `} -`; - -StyledContentWrapper.defaultProps = { - theme: defaultTheme, -}; - -const StyledActions = styled.div` - ${({ theme }) => css` - position: fixed; - bottom: 0; - left: 0; - width: 100%; - box-sizing: border-box; - padding: ${popoverPadding}; - padding-top: ${theme.orbit.spaceSmall}; - background-color: ${theme.orbit.paletteWhite}; - .orbit-button-primitive { - width: 100%; - flex: 1 1 auto; - } - ${mq.largeMobile(css` - position: relative; - bottom: auto; - left: auto; - border-bottom-left-radius: ${theme.orbit.borderRadiusNormal}; - border-bottom-right-radius: 3px; - .orbit-button-primitive { - width: auto; - flex-grow: 0; - } - `)}; - `} -`; - -StyledActions.defaultProps = { - theme: defaultTheme, -}; - -const StyledPopoverParent = styled.div<{ - isInsideModal?: boolean; - width?: string | number; - shown?: boolean; - fixed?: boolean; - $zIndex?: number; - transform?: string; - overlapped?: boolean; - noPadding?: boolean; - top?: string | number; - left?: string | number; - bottom?: string | number; - right?: string | number; - position?: string; -}>` - ${({ - isInsideModal, - width, - shown, - theme, - transform, - top, - left, - bottom, - right, - position, - $zIndex, - }) => css` - position: fixed; - bottom: 0; - left: 0; - right: 0; - height: auto; - width: 100%; - z-index: 1000; - box-sizing: border-box; - box-shadow: ${theme.orbit.boxShadowRaisedReverse}; - background-color: ${theme.orbit.backgroundModal}; - max-height: calc(100% - ${mobileTop}); - &:focus { - outline: 0; - } - - ${mq.largeMobile(css` - top: ${top}; - left: ${left}; - bottom: ${bottom}; - right: ${right}; - transform: ${transform}; - transition: ${transition(["opacity"], "fast", "ease-in-out")}; - position: ${position}; - z-index: ${isInsideModal ? "1000" : $zIndex}; - width: ${width ? `${width}` : "auto"}; - border-radius: ${theme.orbit.borderRadiusNormal}; - box-shadow: ${theme.orbit.boxShadowRaised}; - opacity: ${shown ? "1" : "0"}; - max-height: none; - `)} - `} -`; - -StyledPopoverParent.defaultProps = { - theme: defaultTheme, -}; - -const StyledPopoverPadding = styled.div<{ noPadding?: boolean }>` - padding: ${({ noPadding }) => (noPadding ? 0 : popoverPadding)}; -`; - -StyledPopoverPadding.defaultProps = { - theme: defaultTheme, -}; - -const StyledPopoverContent = styled.div<{ shownMobile?: boolean }>` - ${({ shownMobile }) => css` - transform: translateY(${shownMobile ? "0%" : "100%"}); - will-change: transform; - transition: ${transition(["opacity, transform"], "fast", "ease-in-out")}; - - ${mq.largeMobile(css` - transform: none; - transition: none; - `)} - `} -`; - -StyledPopoverContent.defaultProps = { - theme: defaultTheme, -}; - -const StyledOverlay = styled.div<{ shown?: boolean }>` - ${({ theme, shown }) => css` - display: block; - position: fixed; - opacity: ${shown ? "1" : "0"}; - top: 0; - left: 0; - right: 0; - width: 100%; - height: 100%; - background-color: ${convertHexToRgba(theme.orbit.paletteInkDark, 60)}; - transition: ${transition(["opacity", "transform"], "normal", "ease-in-out")}; - z-index: 999; - - ${mq.largeMobile(css` - display: none; - `)}; - `} -`; - -StyledOverlay.defaultProps = { - theme: defaultTheme, -}; - -const StyledPopoverClose = styled.div` - padding: ${popoverPadding}; - ${mq.largeMobile(css` - display: none; - visibility: hidden; - padding-bottom: 0; - `)} -`; - -StyledPopoverClose.defaultProps = { - theme: defaultTheme, -}; - const PopoverContentWrapper = ({ children, onClose, @@ -297,60 +102,154 @@ const PopoverContentWrapper = ({ setActionsHeight(height); } + const handleKeyDown = (ev: KeyboardEvent) => { + if (ev.code === "Escape" && onClose) { + onClose(); + } + }; + + document.addEventListener("keydown", handleKeyDown); + return () => { clearTimeout(timer); + document.removeEventListener("keydown", handleKeyDown); }; - }, [update, actions, setActionsHeight]); + }, [update, actions, setActionsHeight, onClose]); useClickOutside(content, ev => { if (isLargeMobile) onClose(ev); }); - const handleKeyDown = (ev: React.KeyboardEvent) => { - if (ev.keyCode === 27 && onClose) onClose(); - }; + const cssVars = { + "--popper-top": popper.top, + "--popper-left": popper.left, + "--popper-right": popper.right, + "--popper-bottom": popper.bottom, + "--popper-transform": popper.transform, + "--popper-position": popper.position, + "--popover-zIndex": zIndex, + "--popover-width": width, + } as React.CSSProperties; return ( <> - - {/* @ts-expect-error popper */} - + + ); }; diff --git a/packages/orbit-components/src/Popover/index.tsx b/packages/orbit-components/src/Popover/index.tsx index c1b88f2d33..f845a08c42 100644 --- a/packages/orbit-components/src/Popover/index.tsx +++ b/packages/orbit-components/src/Popover/index.tsx @@ -1,7 +1,6 @@ "use client"; import * as React from "react"; -import styled from "styled-components"; import useStateWithTimeout from "../hooks/useStateWithTimeout"; import { PLACEMENTS } from "../common/consts"; @@ -10,10 +9,6 @@ import Portal from "../Portal"; import handleKeyDown from "../utils/handleKeyDown"; import type { Props } from "./types"; -const StyledPopoverChild = styled.div` - position: relative; -`; - const Popover = ({ children, renderInPortal = true, @@ -39,6 +34,7 @@ const Popover = ({ dataTest, }: Props) => { const ref = React.useRef(null); + const popoverId = React.useId(); const [shown, setShown, setShownWithTimeout, clearShownTimeout] = useStateWithTimeout( false, @@ -128,7 +124,7 @@ const Popover = ({ const popover = ( - (handleClick)} > {children} - + {render && (renderInPortal ? {popover} : popover)} );