Skip to content

fix(mobile): polish small-screen stacked panes, in-flow seam, compact headers, and collapsible options - #222

Merged
obvious-autobuild-staging[bot] merged 6 commits into
masterfrom
fix/mobile-small-screen-polish
Oct 17, 2026
Merged

obvious-autobuild-staging[bot] merged 6 commits into
masterfrom
fix/mobile-small-screen-polish

Conversation

@obvious-autobuild-staging

@obvious-autobuild-staging obvious-autobuild-staging Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Why

On narrow viewports (<768px), the converter shell clamped both stacked panes plus the top bar, launch banner, and options bar inside a fixed 100svh column without overflow-hidden or minimum pane heights. As a result, Dropzone and CsvTable bled across the seam, the floating DividerSwitch (⇄ CSV → JSON) overlapped table rows and the output header, the InputPane action buttons wrapped to 3 rows (103.5px), and the multi-row OptionsRow consumed a third of a 375×667 screen.

What

  • Unclamped mobile shell & bounded stacked panes (App.tsx, SplitPane.tsx): Use flex min-h-svh flex-col md:h-svh md:min-h-0 on the converter column and add overflow-hidden + responsive minimum heights (max-md:min-h-[280px] on pane-left, max-md:min-h-[240px] on pane-right) while preserving desktop's exact 100svh split-screen layout and all CSS-first SplitPane invariants.
  • In-flow mobile seam (SplitPane.tsx): Place data-testid="seam" between pane-left and pane-right in the DOM as a relative h-9 flex row on <md (md:absolute on desktop) so DividerSwitch never overlaps table rows, the search bar, or the OutputPane header on mobile.
  • Compact mobile headers, dropzone & banner (PaneShell.tsx, InputPane.tsx, Dropzone.tsx, FeedbackBanner.tsx): Hide secondary text labels (Upload, Copy, Clear, Download) on <sm while keeping aria-label and title on the buttons so the 375px header stays on one compact row; tighten mobile PaneShell, Dropzone, and FeedbackBanner spacing.
  • CSS-first collapsible mobile OptionsRow (OptionsRow.tsx): Add a <md disclosure bar (data-testid="options-mobile-toggle", aria-expanded) with an active-options summary badge that hides the option controls with max-md:hidden when collapsed while keeping every option control and data-hint node mounted in the initial DOM for verify-seo.sh.
  • Viewport-anchored small-screen FeedbackVote popout (FeedbackVote.tsx): Match ChangelogButton with max-sm:static on the wrapper and max-sm:inset-x-2 max-sm:top-14 max-sm:w-auto on data-testid="feedback-popover".
  • Bundled changelog entry #14 (entries.ts) & rebuilt app/dist.

How to Review

  • app/src/App.tsx & app/src/components/SplitPane.tsx: stacked pane layout, overflow-hidden, and in-flow <md seam vs md:absolute desktop seam.
  • app/src/components/OptionsRow.tsx: mobile disclosure toggle (options-mobile-toggle) and CSS-only visibility (max-md:hidden) preserving initial-DOM SEO invariants.
  • app/src/components/InputPane.tsx, PaneShell.tsx, Dropzone.tsx, FeedbackBanner.tsx, FeedbackVote.tsx: small-screen compaction and popout anchoring.

Human author: David Boskovic ([email protected])

🔗 Obvious Project · 🧵 Obvious Thread · 🔀 Obvious PR Artifact

Test Evidence

AC-8: Mobile & small-screen layout (<768px) stacked panes, in-flow seam, compact headers, collapsible options, and 1280x800 desktop parity
AC-8: Mobile & small-screen layout (<768px) stacked panes, in-flow seam, compact headers, collapsible options, and 1280x800 desktop parity — result
AC-8: Mobile & small-screen layout (<768px) stacked panes, in-flow seam, compact headers, collapsible options, and 1280x800 desktop parity — result
AC-8: Mobile & small-screen layout (<768px) stacked panes, in-flow seam, compact headers, collapsible options, and 1280x800 desktop parity — result
AC-8: Mobile & small-screen layout (<768px) stacked panes, in-flow seam, compact headers, collapsible options, and 1280x800 desktop parity — result
AC-8: Mobile & small-screen layout (<768px) stacked panes, in-flow seam, compact headers, collapsible options, and 1280x800 desktop parity — result
AC-8: Mobile & small-screen layout (<768px) stacked panes, in-flow seam, compact headers, collapsible options, and 1280x800 desktop parity — result
AC-8: Mobile & small-screen layout (<768px) stacked panes, in-flow seam, compact headers, collapsible options, and 1280x800 desktop parity — recording

ObviousApp and others added 5 commits October 17, 2026 19:05
… bar, and feedback popout

Co-authored-by: David Boskovic <[email protected]>
…elog #14, and rebuild dist

Add unit and component tests covering stacked-pane minimum heights,
in-flow mobile seam ordering, collapsible mobile OptionsRow disclosure
with preserved initial-DOM options/hints, small-screen FeedbackVote
popover anchoring, and compact mobile header action labels. Add bundled
changelog entry #14 and rebuild app/dist.

Co-authored-by: David Boskovic <[email protected]>
Ensure app/dist matches a clean npm run build output byte-for-byte.

Co-authored-by: David Boskovic <[email protected]>
… in-pane

Add max-md:max-h-[360px] on pane-left and max-md:max-h-[340px] on
pane-right so multi-line JSON documents scroll inside the stacked mobile
panes rather than expanding the page vertically.

Co-authored-by: David Boskovic <[email protected]>
Ensure Copy and Download read currentValidOutput (matching displayedOutput)
rather than the effect-lagged lastValidOutput state so immediate exports
after conversion or upload never read a stale or null value.

Co-authored-by: David Boskovic <[email protected]>
@obvious-autobuild-staging
obvious-autobuild-staging Bot marked this pull request as ready for review October 17, 2026 19:22
@obvious-autobuild-staging
obvious-autobuild-staging Bot merged commit e046f76 into master Oct 17, 2026
2 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.

2 participants