Skip to content

fix: preserve Duo toolbar buttons behind modals - #324

Merged
rdlabo merged 4 commits into
mainfrom
fix/duo-modal-toolbar-handoff
Oct 23, 2026
Merged

rdlabo merged 4 commits into
mainfrom
fix/duo-modal-toolbar-handoff

Conversation

@rdlabo

@rdlabo rdlabo commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Opening a modal on Duo removed the covered page's vertical-bar buttons instead of handing them back to Web projection. Keep each covered button or group on its own surface, aligned to native measurements, and restore foreground/native ownership after dismissal.

Covered projections are inert and hidden from accessibility; delayed clicks cannot activate the underlying page. Disabled state follows the source. Account for the group border when translating native item coordinates to avoid a 1px handoff shift.

Edge-case verification also found that collapsing an ion-buttons group after projecting its Ionic children hid a remaining explicit HTML button. Collapse the group only when no unprojected element children remain. This preserves mixed automatic and data-native-ui ownership without adding runtime machinery.

Validation:

  • 12 Chromium/WebKit edge cases passed: native/Web origins, standalone/grouped buttons, mixed automatic and explicit controls in one toolbar/group, disabled updates, left/RTL and right/LTR rails, centered/full-width and nested modals, dismissal, and exactly one action per accepted click.
  • 24 additional Chromium/WebKit regressions passed: theme-disabled groups, shell opt-outs, external form submission, duplicate protection, and single/group resizing. Older local WebKit explicitly selects the iOS27 stylesheet branch.
  • Native TypeScript build/typecheck, theme CSS build, lint, and diff checks passed.
  • Updated with main including fix: recover native UI synchronization without navigation #325; CI runs on the updated branch.

Final local integration of #323, #324 and #325 passed 157 unit tests, 26 Chromium/WebKit edge tests, TypeScript checking, CSS/native package builds and workspace lint. Native width measurement also passed on both iPhone and Duo simulators. No additional runtime changes were needed after integration.

@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Playwright test results

passed  496 passed
flaky  1 flaky

Details

stats  497 tests across 26 suites
duration  3 minutes, 2 seconds
commit  ce17d48
info  This detailed result covers Ionic 9 only. Ionic 8 runs against the same screenshots in a separate matrix job; check the workflow run for both results. To update the screenshots, comment with /update-screenshots.

Flaky tests

chromium › native-ui.spec.ts › horizontal tabs retain measured native width on Web handoff without feeding it back

@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

📊 Ionic 9 Playwright Test Report

View the detailed Ionic 9 report after GitHub Pages deployment completes: https://rdlabo-dev.github.io/ionic-theme-ios27/pr-324/

Ionic 8 runs against the same screenshots in a separate matrix job. View both results in the workflow run.

…-handoff

# Conflicts:
#	demo/e2e/native-ui.spec.ts
@rdlabo
rdlabo merged commit 95e12db into main Oct 23, 2026
16 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

npm beta published

CI passed for the merge commit 95e12dbfe5f9. Install the immutable version with:

npm install @rdlabo/ionic-theme-ios27@2.0.2-beta.pr324.sha95e12dbfe5f9 @rdlabo/capacitor-native-ui@2.0.2-beta.pr324.sha95e12dbfe5f9

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