diff --git a/core/src/components/popover/animations/ios.enter.ts b/core/src/components/popover/animations/ios.enter.ts index f9cf995f62..ccbe34f481 100644 --- a/core/src/components/popover/animations/ios.enter.ts +++ b/core/src/components/popover/animations/ios.enter.ts @@ -19,7 +19,8 @@ export const iosEnterAnimation = (baseEl: HTMLElement, opts?: any): Animation => const contentEl = root.querySelector('.popover-content') as HTMLElement; const arrowEl = root.querySelector('.popover-arrow') as HTMLElement | null; - const { contentWidth, contentHeight } = getPopoverDimensions(size, contentEl, trigger); + const referenceSizeEl = trigger || ev?.detail?.ionShadowTarget || ev?.target; + const { contentWidth, contentHeight } = getPopoverDimensions(size, contentEl, referenceSizeEl); const { arrowWidth, arrowHeight } = getArrowDimensions(arrowEl); const defaultPosition = { diff --git a/core/src/components/popover/animations/md.enter.ts b/core/src/components/popover/animations/md.enter.ts index d925364ea2..db76390bcf 100644 --- a/core/src/components/popover/animations/md.enter.ts +++ b/core/src/components/popover/animations/md.enter.ts @@ -18,7 +18,9 @@ export const mdEnterAnimation = (baseEl: HTMLElement, opts?: any): Animation => const root = getElementRoot(baseEl); const contentEl = root.querySelector('.popover-content') as HTMLElement; - const { contentWidth, contentHeight } = getPopoverDimensions(size, contentEl, trigger); + + const referenceSizeEl = trigger || ev?.detail?.ionShadowTarget || ev?.target; + const { contentWidth, contentHeight } = getPopoverDimensions(size, contentEl, referenceSizeEl); const defaultPosition = { top: bodyHeight / 2 - contentHeight / 2, diff --git a/core/src/components/popover/test/size/e2e.ts b/core/src/components/popover/test/size/e2e.ts index 051414c248..719b6daf64 100644 --- a/core/src/components/popover/test/size/e2e.ts +++ b/core/src/components/popover/test/size/e2e.ts @@ -49,3 +49,54 @@ test('should calculate popover width based on trigger width', async () => { expect(screenshotCompare).toMatchScreenshot(); } }); + +test('should calculate popover width based on event width', async () => { + const page = await newE2EPage({ url: '/src/components/popover/test/size?ionic:_testing=true' }); + + const screenshotCompares = []; + + const trigger = await page.find('#event-trigger'); + trigger.click(); + + await page.waitForSelector('.event-popover'); + const popover = await page.find('.event-popover'); + await popover.waitForVisible(); + + const triggerHandler = await page.$('#event-trigger'); + const popoverContentHandle = await page.evaluateHandle(`document.querySelector('.event-popover').shadowRoot.querySelector('.popover-content')`); + const triggerBbox = await triggerHandler.boundingBox(); + const popoverBbox = await popoverContentHandle.boundingBox(); + expect(popoverBbox.width).toEqual(triggerBbox.width); + + screenshotCompares.push(await page.compareScreenshot()); + + for (const screenshotCompare of screenshotCompares) { + expect(screenshotCompare).toMatchScreenshot(); + } +}); + + +test('should not calculate popover width with no trigger or event', async () => { + const page = await newE2EPage({ url: '/src/components/popover/test/size?ionic:_testing=true' }); + + const screenshotCompares = []; + + const trigger = await page.find('#no-event-trigger'); + trigger.click(); + + await page.waitForSelector('.no-event-popover'); + const popover = await page.find('.no-event-popover'); + await popover.waitForVisible(); + + const triggerHandler = await page.$('#no-event-trigger'); + const popoverContentHandle = await page.evaluateHandle(`document.querySelector('.no-event-popover').shadowRoot.querySelector('.popover-content')`); + const triggerBbox = await triggerHandler.boundingBox(); + const popoverBbox = await popoverContentHandle.boundingBox(); + expect(popoverBbox.width).not.toEqual(triggerBbox.width); + + screenshotCompares.push(await page.compareScreenshot()); + + for (const screenshotCompare of screenshotCompares) { + expect(screenshotCompare).toMatchScreenshot(); + } +}); diff --git a/core/src/components/popover/test/size/index.html b/core/src/components/popover/test/size/index.html index de2c66b958..7bab7545e0 100644 --- a/core/src/components/popover/test/size/index.html +++ b/core/src/components/popover/test/size/index.html @@ -8,10 +8,14 @@ +