GitWorkbench 1.6.0
What's new
-
Image & PDF diff viewing (#12, #15): the diff pane now renders images and PDFs the host provides bytes for, instead of a "Binary file" placeholder.
- Images — added/deleted show on their own over a transparency checkerboard; modified images offer a before/after comparison in three modes: Side by Side, Swipe (draggable divider, vertical or horizontal), and Fade (opacity cross-fade / onion skin).
- PDFs — old and new rendered side by side (PDFKit).
CLIGitProviderloads the old/new blob bytes across working-tree, commit, and stash contexts, size-capped at 10 MB and best-effort — an oversized blob or an unclassifiable git error (e.g. a conflicted blob) falls back to the placeholder rather than blanking the pane. Rendering uses only system frameworks (AppKit / PDFKit), so the zero-dependency rule holds.
-
Resizable commit-message / diff split in History (#15): drag the divider at the changed-files / diff boundary to grow the diff; the commit message shrinks and scrolls (keeping a 2-line minimum) and grows back to its natural height. A long commit body now caps automatically so it can't push the diff off-screen. The chosen height persists per-repo, alongside the column widths.
-
Ahead/behind for local branches in the rail (#14): each local branch row shows how far it has diverged from its upstream as
{ahead}↑ {behind}↓, matching the toolbar's Pull/Push convention.
Fixes
- Dark mode: the selected segmented-control label (e.g. "Side by Side", the unified/split toggle) was white-on-white and unreadable — now pinned to a dark ink on the white pill. Neutral tints used for chips, tracks, hover states, and secondary/disabled button fills now invert to a light tint in dark mode (via
WorkbenchTheme.neutralFill) instead of vanishing on the dark surface. - Staging a binary image/PDF in the mock-backed demo no longer drops its diff.
Breaking
WorkbenchTheme.init'sisDarkis now a required parameter (no default). A host building a custom theme must state whether the surfaces it supplies are light or dark, so its neutral tints render correctly in dark mode..standard/.darkStandardare unaffected.
Zero new third-party dependencies; Swift 6 language mode preserved.
Full Changelog: 1.5.0...1.6.0