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 @@
+