Port the remaining tabs to the macOS client

This commit is contained in:
Ian Gulliver
2026-10-17 07:26:18 -07:00
parent 9b3f775dac
commit e28c313854
15 changed files with 3648 additions and 50 deletions
+4 -2
View File
@@ -1,6 +1,6 @@
# byre for macOS
This is a design, partly built. What exists under `mac/`: the generated API client, the SSE client, `Store` and `Feed`, the startup sequence, the connection screen with Change Server…, the generated palette, the window with its two panes and tab strips (More included), the Lead and task transcripts through `TranscriptBuilder`, the composer with drafts and images, the Markdown port, native flowchart diagrams, pane-focus reporting and the identity banner. Overlays so far are alerts, the More menu and the full-size image view. The other tabs (Changes, Files, Terminal, Inbox, Reviews, Workflow, Project, Status, Settings) show `<tab> isn't in the macOS app yet.`. Until the switcher exists, the task picker is a plain menu of the active tasks, and the transcript head has Compact and Sync but not yet Merge or Discard. The rest of the work is under "M8 — macOS client" in `TODO.md`.
This is a design, partly built. What exists under `mac/`: the generated API client, the SSE client, `Store` and `Feed`, the startup sequence, the connection screen with Change Server…, the generated palette, the window with its two panes and tab strips (More included), the Lead and task transcripts through `TranscriptBuilder`, the composer with drafts and images, the Markdown port, native flowchart diagrams, pane-focus reporting, the identity banner, and every other tab: Changes, Files, Terminal, Inbox, Reviews, Workflow (its stage graph drawn natively), Project, Status and Settings. Overlays so far are alerts, confirmations (used by Settings to delete a lead note), the More menu and the full-size image view. Settings asks for notification permission, but nothing delivers notifications until `Notifications.swift` exists. Until the switcher exists, the task picker is a plain menu of the active tasks, and the transcript head has Compact and Sync but not yet Merge or Discard. The rest of the work is under "M8 — macOS client" in `TODO.md`.
## Decision
@@ -59,7 +59,7 @@ The Swift files follow the TypeScript ones, so a change in one points at the sam
| `switcher.ts` | `Switcher.swift` | ⌘K overlay and the shortcuts help |
| `drafts.ts` | `Drafts.swift` | Composer and answer drafts |
| `notifications.ts` | `Notifications.swift` | `UNUserNotificationCenter` delivery |
| `dom.ts` | `Dialogs.swift`, `Format.swift` | Overlays (alerts, the More menu, the image view; confirm to come), `ago`, Copy, shared button and layout styles |
| `dom.ts` | `Dialogs.swift`, `Format.swift` | Overlays (alerts, confirmations, the More menu, the image view), `ago`, Copy, shared button and layout styles, diff lines |
| `images.ts` | `Images.swift` | Blob, worktree and `data:` images, their cache and the full-size overlay |
## Store and events
@@ -176,6 +176,8 @@ Platform differences the copy can't avoid, each with what the web client does an
| Where | Web client | App |
| --- | --- | --- |
| Settings, notifications line | `This browser shows notifications while a byre page is open.` | `This Mac shows notifications while byre is running.` |
| Settings, notifications not yet allowed | `This browser doesn't show notifications.` and a **Turn on for this browser** button | `This Mac doesn't show notifications from byre.` and a **Turn on for this Mac** button, which asks macOS for permission |
| Settings, notifications refused | `Notifications are blocked for this site in the browser's settings.` | `Notifications are blocked for byre in System Settings.` |
| Opening a task by address | `#/task/<id>` in the URL bar | None; tasks open from the switcher, links and notifications |
| Clicking a transcript image | Opens the image in a new browser tab | Opens it in an in-window overlay |
| Preview links (`expose_port`) | Open in a new browser tab | Open in the default browser |