Polish folder picker, theme switching, and timer UX#3
Open
SagarSDagdu wants to merge 5 commits into
Open
Conversation
- NSOpenPanel for the markdown folder now allows creating a new folder and uses a clearer "Choose" prompt - syncPanelAppearance resolves the system appearance explicitly and forces the hosting view to re-pick it up, so theme switches apply immediately instead of waiting for the panel to resign key - "Start from the todos list" hint on the timer home view is now a tappable button that routes to the todos screen
The title bar's `sidebar.right` icon suggested a side panel but actually replaced the timer home view with the todos list. Rework the timer screen so the home view is always the left pane and the todos list is shown to the right of it when toggled on (default). - TimerService: replace `Screen` enum + `screen` field with `todosVisible: Bool` and `toggleTodosPanel()` - TimerContainerView: HStack of TimerHomeView + (optional) TimerTodosView separated by a Divider; animated insertion from the trailing edge - TitleBarView: button now reads `titlebar-toggle-todos` and its icon brightens when the panel is open - MainView: ⌥⌘T closes the todos panel, ⌥⌘L opens it (both ensure the timer is the active panel) - TimerHomeView: empty-state hint adapts — calls out the side panel when visible, otherwise offers a button to open it - Tests and screenshot SKILL.md updated for the new state shape and id
Mirrors the file sidebar's draggable divider, with the delta inverted so dragging the handle left grows the panel and right shrinks it. Width is clamped to [220, 450] and persists via `todosPanelWidth` in SidebarState. Dragging below the collapse threshold snaps the panel closed by toggling `todosVisible`.
Removed the hard 25-character cap on the active task label. `.lineLimit(1)` and `.truncationMode(.tail)` already truncate when there's actually no room, so the cap was clipping titles even when the title bar had space to render them in full.
|
@SagarSDagdu is attempting to deploy a commit to the triptu's projects Team on Vercel. A member of the Team first needs to authorize it. |
There was a problem hiding this comment.
Code Review
This pull request transitions the Timer screen from a full-screen view switcher to a side-panel layout, allowing the todos list to be displayed alongside the timer. It introduces a resizable divider for the todos panel, persists its width, and improves theme synchronization in the window manager. A review comment suggests grouping the todos panel and its divider in a nested HStack to ensure they share the same transition animation for a smoother visual effect.
The divider had no explicit transition, so it would fade while the todos view slid out, making the dismissal look ragged. Wrapping both in a nested HStack with the slide+opacity transition applied to the group keeps them in sync. Spotted in PR review.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
NSOpenPanelnow exposes the New Folder button and uses a clearer "Choose" confirm label so users can create a notes folder from the picker itself.WindowManager.syncPanelAppearance()resolves the system appearance explicitly and forces theNSHostingViewto re-pick it up. Theme switches via the Picker (e.g. Light → System, Light → Dark) used to leave the panel rendered with the old theme until it resigned key — SwiftUI's.preferredColorSchemeoverride on the hosting view wasn't being cleared synchronously.sidebar.righticon used to swap the timer home view for the todos list. Reworked into a real side panel —TimerHomeViewstays as the left pane andTimerTodosViewis rendered to its right via a draggable, persistable divider (SidebarState.todosPanelWidth, clamped[220, 450], snaps closed when dragged narrow). ReplacesTimerService.Screenenum withtodosVisible: Bool+toggleTodosPanel(). Renamestitlebar-toggle-timeline→titlebar-toggle-todos..lineLimit(1)+.truncationMode(.tail)already truncate when space runs out, so the cap was clipping titles even when the title bar had room to render them in full.Screen recording of the proposed UX
Screen.Recording.2026-05-16.at.5.41.27.PM.mov
Test plan
xcodebuild test … -only-testing:FlowbarTests— all 144 unit tests pass (tests updated for the newtodosVisiblestate shape)sidebar.rightbutton toggles the panelresizeLeftRight; width persists across launches