Skip to content

fix: preserve vertical alignment for horizontal popovers - #7

Merged
rdlabo merged 2 commits into
mainfrom
fix/horizontal-popover-alignment
Oct 1, 2026
Merged

rdlabo merged 2 commits into
mainfrom
fix/horizontal-popover-alignment

Conversation

@rdlabo

@rdlabo rdlabo commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Horizontal popovers receive the vertical 8px body margin, shifting a centered callout below its button. Short callouts also clamp their arrow to the vertical center, so the arrow visibly misses the trigger.

Keep the calculated top position for left, right, start, and end. Vertical placement and replacement animations retain their existing behavior.

Validation: all 20 unit tests, lint, formatting, and the TypeScript build passed. The consuming theme's 10 projection cases passed with this change applied locally, covering native-to-Web handoff and left/right, trigger/event, offset, and scaled positioning.

Required by rdlabo-dev/ionic-theme-ios27#258. A package release is needed before the consuming PR can update its dependency.


Devin Review

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 potential issue.

Devin Review

Comment thread src/popover/utils.ts
Comment on lines +619 to +620
const horizontal = side === 'left' || side === 'right' || side === 'start' || side === 'end';
let top = !isReplace ? coordTop + (horizontal ? 0 : POPOVER_IOS_BODY_MARGIN) : coordTop - triggerHeight;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 画面上端付近の横向きポップオーバーが見切れる

上端付近で中央揃えの横向きポップオーバーを開くと、負の top が補正されず、内容が画面外に出ます。以前の 8px 補正で収まっていた位置でも発生します。

Learn more

横向き配置の座標は getPopoverPosition がトリガーと内容の寸法から算出します。中央揃えでは、トリガーが上端に近いと算出された top が負になることがあります。今回 8px の加算がなくなり、その負値が iosEnterAnimation の表示位置に使われます。

Example: 上端 7px、高さ 30px のトリガーに高さ 52px のポップオーバーを右側中央揃えで表示すると、算出座標は -4px です。従来の表示位置は 4px ですが、変更後は -4px になり上部が見切れます。

Recommended fix: 通常は算出座標を維持し、画面上端に出るときだけ表示位置を補正してください。補正時の矢印位置も確認してください。

Devin Review


Was this helpful? React with 👍 or 👎 to provide feedback.

@rdlabo
rdlabo merged commit d0722cb into main Oct 1, 2026
5 checks passed
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.

1 participant