Skip to content

fix(native): Sankey hover, persistent aurora, scrolling tables and field alignment (UI batch 5) - #446

Merged
EraPartner merged 6 commits into
mainfrom
claude/project-thread-1gb9ji
Nov 14, 2026
Merged

EraPartner merged 6 commits into
mainfrom
claude/project-thread-1gb9ji

Conversation

@EraPartner

Copy link
Copy Markdown
Owner

Requested by EraPartner · project thread

Summary

Batch 5 of the Swift vs TypeScript UI parity work (TS app is the reference).

  • Sankey hover (StatisticsFlowView.swift): SwiftUI onHover tracks a view's frame, not its shape, so after fix(native): match the web aurora, glass cards, ticker and remaining UI audit rows (batch 3) #444 every band covered the whole chart and the topmost band lit everywhere. One onContinuousHover now hit-tests SVG-style: node rects first, then band stroked outlines, last drawn first; empty space hovers nothing.
  • Aurora (ShellRootView.swift): the canvas was the page container's background inside the zoom view, so it was re-laid out with every page and stopped at the titlebar strip (the band in the Enhanced screenshot). It is now a sibling layer in the detail column, outside the route-keyed page, and runs under the titlebar strip like the web .liquid-canvas.
  • Tables scroll sideways instead of squeezing: VisionTable keeps content widths and scrolls (fixes the diagnostics MAPE wrap); TransactionsTable stops at its column minimums and scrolls; new HorizontalOverflowScroll wraps the grid tables on account detail, rebalance and the analysis report. LocalDataTable already scrolled.
  • Cards: net worth daily breakdown, Insights payee details and the holding history table are now in cards (web VirtualDataTable is always a Card).
  • Accounts row: title type-body regular, subtitle type-footnote, drift chip at the default badge size, as AccountsPage/ListRow.
  • Text editor caret: the vertical padding no longer subtracts NSTextView's horizontal-only 5 pt line fragment padding, which put caret and text 5 pt above the placeholder.

Type of change

  • fix — bug fix

Checklist

  • Tests pass / lint clean: Swift is checked by the CI swift job only (no Swift toolchain in the cloud container)
  • Conventional Commit title
  • No leftover debug code
  • Affected docs/ pages updated: none reference the changed code
  • i18n: no new strings

Architecture & data

  • No architectural change
  • No API change
  • No schema change

Verification

Not built or run locally: there is no Swift toolchain in the cloud container. The CI swift job is the compile and test check. All look changes are unverified on a Mac.

Residual risk & follow-ups

  • Tables now take their content width and never wrap cells. CSS wraps at word breaks before it overflows, so a few tables may scroll a little earlier than on the web.
  • Canvas is no longer scaled by page zoom.
  • Not done in this PR: colours across performance profiles (waiting on Tor's decision; TS shifts them too), S-98, S-16, K4.

Generated by Claude Code

SwiftUI's onHover tracks a view's frame, not its shape, so every band covered
the whole chart and the topmost band lit wherever the pointer was. One tracker
now hit-tests like the SVG: node bars by their rectangles first, then bands by
their stroked outlines, last drawn first; empty space hovers nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018QJtaMxiuFABVL2LiMKy5m
The canvas was the page container's background inside the zoom view, so a page
switch re-laid it out with the new page and it stopped at the titlebar strip.
It now sits beside the page in the detail column, runs under the titlebar
strip as the web canvas does and is not rebuilt when the route changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018QJtaMxiuFABVL2LiMKy5m
Like the web <Table> overflow-auto wrapper: VisionTable keeps its columns at
their content widths and scrolls horizontally when the card is narrower (the
diagnostics MAPE column no longer wraps), the transactions table stops at its
column minimums and scrolls, and the grid tables on account detail, rebalance
and the analysis report use HorizontalOverflowScroll.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018QJtaMxiuFABVL2LiMKy5m
…cards

The web VirtualDataTable is always a Card; these three LocalDataTables were
painted straight on the page background.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018QJtaMxiuFABVL2LiMKy5m
…stRow

Title in type-body regular, subtitle lines in type-footnote and the drift chip
at the default badge size, as AccountsPage renders them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018QJtaMxiuFABVL2LiMKy5m
NSTextView pads its text horizontally only; taking that 5 pt off the vertical
padding too put the caret and typed text 5 pt above the placeholder.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018QJtaMxiuFABVL2LiMKy5m
@EraPartner
EraPartner marked this pull request as ready for review November 14, 2026 17:31
@EraPartner
EraPartner merged commit 8dd3729 into main Nov 14, 2026
11 checks passed
@EraPartner
EraPartner deleted the claude/project-thread-1gb9ji branch November 14, 2026 17:31
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