Skip to content

fix(native): match the web app's hover, tables, sidebar and menus (UI audit batch 2) - #442

Merged
EraPartner merged 3 commits into
mainfrom
claude/project-thread-ny362q
Nov 14, 2026
Merged

EraPartner merged 3 commits into
mainfrom
claude/project-thread-ny362q

Conversation

@EraPartner

@EraPartner EraPartner commented Nov 14, 2026 •

Copy link
Copy Markdown
Owner

Requested by EraPartner · project thread

Summary

Batch 2 of the 2026-11-14 Swift vs TypeScript UI audit: interaction and component parity. The TS app is the reference. K1/K2 (grain, card material), colour matching and the ticker are left for a later batch.

Audit row Change
K5 / S-01, S-02 Sidebar is no longer a system List: rows use SidebarRowButtonStyle (emerald active pill, foreground/0.06 hover, 0.08 pressed), arrow keys still move between pages. From draft #440. Expanded rows lose their tooltip; the web shows "<title> · G X" only on the collapsed rail (TooltipContent hidden={state !== "collapsed"})
S-05 Logo and collapse buttons lose .help: the web buttons carry only an aria-label
K6 / S-39, S-56, S-82 VisionTable (automatic table layout, fills the card) for data source health, database maintenance, endpoints, exchange rates and the returns heat map; Planned, tax and compare tables fill their cards. From #440
K7 / S-14, S-31, S-32, S-43 ChartHoverTooltip (web ChartTooltip) floats over InsightTimelineChart instead of the readout row under it; that chart backs Home, Insights and Net worth. From #440
K9 / S-35 Sankey hover on every node and link, hit area is the bar. From #440
S-49 Forecast "Projected value range": floating tooltip (date, P90…P10, Capital in) and ring markers at the hovered month instead of a readout panel
S-33 Insights categories donut: hovered slice computed from the pointer and written to the selection directly (the angle binding missed a re-entered slice); centre shows swatch, name and amount like DonutChart
S-42, S-59 TableRow hover band (foreground/0.03) in VisionTable (band laid out behind the pointer's row) and LocalDataTable
S-61, S-62 New VisionMenu: the web DropdownMenu as an in-page glass popover with item icons, destructive items in red (icon too) and helper lines. Used for the Accounts, Account detail, Categories, Payees, payee rules, holdings card, database-maintenance row menus and the Home/Portfolio/holdings header "…" menus. Menus that hold toggles stay Menu
S-60 Settings rows: the label's ideal width is pinned, so rows with a footnote no longer fail ViewThatFits and stack the control under the label
S-10 A page dialog or sheet dims and blurs the sidebar too (same scrim/blur tokens as VisionModalPresenter), sidebar takes no clicks meanwhile
S-11 API pill hidden while a page dialog or sheet is open
S-57 Database maintenance rows use the web py-3 cell padding

Checked and left alone:

  • S-09 command palette "Recent": already implemented (NativeCommandPaletteModel.groups, stored under paletteRecents); the group appears once a page has been opened from the palette. The Swift Demo had no history.
  • S-19 Home recent transactions: HomeInsetRow already has a hover fill.

PR #440: still an open draft. This branch takes only #440's sidebar, table, tooltip, Sankey, tax/planned/compare width and Home icon changes (first commit). #440's card, aurora and ticker files are not touched here.

Type of change

  • fix — bug fix

Checklist

Verification

  • CI on d240ee1: the app and tests compiled; 1 Core test failed, ResearchMarketLookupTests.bookingCurrencyChangeRetiresAwaitedTradeValidationWithoutDiscardingDraft (tradeWrites expectations), in code this PR does not touch. Re-running the job was refused (403). The next push (e4bdb48, removes the now-unused SidebarSelectionPill) ran the full job: Swift app (macOS) and CI Complete passed. The test's single failure is unexplained (inference: timing under load).
  • Nothing was run on a Mac. Every row above is unverified in the running app.

Residual risk & follow-ups

  • VisionMenu has no arrow-key navigation between items (Escape and click-outside close it; Tab moves focus).
  • The sidebar scrim does not dismiss the page dialog on click (the dialog's own scrim does).

🤖 Generated with Claude Code

https://claude.ai/code/session_018QJtaJCKqt1ZHb1c3miwSJ

… and sankey hover from #440

Takes the parts of draft PR #440 that are in this audit batch (K5, K6, K7, K9):
sidebar rows with the web's emerald active pill and neutral hover, VisionTable
layouts that fill their cards, the floating ChartTooltip on the timeline charts,
and the Sankey hover. Leaves out #440's card, aurora and ticker changes.
The expanded sidebar rows and the collapse/logo buttons lose their tooltip, as
on the web (tooltips only on the collapsed rail).

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

UI audit batch 2 (TS app is the reference):
- Forecast "Projected value range": floating ChartTooltip with ring markers
  instead of a readout under the chart (S-49).
- Insights categories donut: hovered slice worked out from the pointer and
  written straight to the selection; centre shows swatch, name and amount (S-33).
- VisionTable and LocalDataTable rows get the TableRow hover band (S-42, S-59).
- New VisionMenu: the web DropdownMenu as an in-page glass popover with item
  icons, destructive items in red and helper lines; used for the row and
  header "..." menus (S-61, S-62).
- Settings rows keep the control right of the label; rows with a footnote
  no longer fall back to the stacked layout (S-60).
- A page's dialog or sheet now dims and blurs the sidebar and hides the API
  pill (S-10, S-11).
- Database maintenance rows use the web cell padding (S-57).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018QJtaJCKqt1ZHb1c3miwSJ
The sidebar rows draw their own surface (SidebarRowButtonStyle) since the
List was replaced, so SidebarSelectionPill had no caller left.

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