Skip to content

feat: support iPhone Duo with vertical bars - #213

Merged
rdlabo merged 51 commits into
feat/support_foldablefrom
feat/foldable-toggle
Sep 25, 2026
Merged

rdlabo merged 51 commits into
feat/support_foldablefrom
feat/foldable-toggle

Conversation

@rdlabo

@rdlabo rdlabo commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Opt in to the iPhone Duo layout with ion-app.ios-theme-vertical-bars; keep ordinary iPhone and iPad layouts unchanged.
  • Reserve the physical side region for Web content and project eligible tabs, back/menu controls, and toolbar actions there.
  • Use the same placement decision for Web fallback and Native UI Shell; .ios-theme-horizontal-only keeps an ion-buttons group or individual ion-button in the Web toolbar.
  • Keep the user-facing guide under Support iPhone Duo, while naming the API for the vertical control layout.

Verification

  • Theme and demo production builds passed.
  • 12 focused Web layout/navigation tests passed; Angular unit test passed.
  • Swift sources passed syntax parsing.
  • Screenshot baselines were renamed byte-for-byte. Local macOS screenshot comparisons differ from the CI baseline; CI remains the visual source of truth.
  • Senior and independent reviews completed with no outstanding findings.

Stack

#214 (native SwiftUI projection) has been merged into this branch. Base: feat/support_foldable.

@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: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Devin Review

@rdlabo
rdlabo force-pushed the feat/foldable-toggle branch from 2f3b310 to 81e5dc2 Compare September 22, 2026 01:00
@rdlabo
rdlabo changed the base branch from feat/foldable-back-button to feat/support_foldable September 22, 2026 01:00
@rdlabo
rdlabo force-pushed the feat/foldable-toggle branch from 81e5dc2 to 37381e9 Compare September 22, 2026 02:35
@rdlabo rdlabo changed the title feat(demo): add foldable mode toggle feat: add foldable Web UI support Sep 22, 2026
@rdlabo rdlabo changed the title feat: add foldable Web UI support feat: support iPhone Duo with vertical bars Sep 24, 2026
rdlabo and others added 17 commits September 24, 2026 18:15
Replace separate placement/metrics getters and listeners with a single
device-layout API (getDeviceLayout + deviceLayoutChange) so vertical-bar
placement, hinge posture, and WebView corner radius stay synchronized.
Monitoring is reference-counted, error paths no longer decrement other
callers' counts, and destroy is idempotent.

The demo split pane now follows the hinge posture (320px fully open,
50vw partially open) via the `when` attribute, side-menu items use
routerLink for tab-consistent navigation, and screenshot coverage
guards both widths.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…er web view

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…e mocks

Merge the withReason/withPlacementListener/resetOnDestroy wrappers into a
single manage() helper and drop the dead lifecycle module so handle
ownership lives in one place. Reuse inFixedToolbar for toolbar
eligibility instead of duplicating the same structural check.

E2E mocks now model the plugin implementation returned by
registerPlugin for IonicNativeUIShell instead of bridging through
window.__nativeUIShell or PluginHeaders, so tests exercise the same
registration path as the app and emit events through the plugin listener
registry. Test probes move off window onto the ion-app element and
document, and the remaining any types are replaced with the public
ShellSnapshot/ShellControl/ShellItem surface.

Style-value specs that re-verified what screenshot regression already
covers are removed.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
- Store search controllers behind ShellSearchControlling so the
  UIViewController dictionary stops round-tripping through as? casts.
- Replace the erased trait-registration token with an unregister
  closure and hold the hinge interaction as UIInteraction.
- Gate iOS 27.1-only SwiftUI symbols in ShellVerticalBars behind the
  same canImport check the plugin uses; Xcode 27.0 cannot see them.
- Move the Duo content out of special-markup into docs/iphone-duo.md
  so readers who only want Duo support have one page: device-layout
  reporting without a runtime, the vertical rail, and the posture-driven
  split pane.
- Document that device-layout monitoring is reference-counted and
  independent of configure(), and that the enable* runtimes already
  hold a monitoring reference while native projection is active.
- Note that the plugin reports device facts and never applies them to
  the DOM; the application owns placement decisions.
- Extend docgen to emit the VerticalControlAreaHandle reference and
  link the new page from the README and native-ui-shell guide.
feat: use Vertical Control Area without the iOS 27 theme
@rdlabo
rdlabo merged commit 176515e into feat/support_foldable Sep 25, 2026
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