From 52b80880e2360690bbe3aa756693f31a259187e3 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Fri, 27 Mar 2026 21:03:03 -0700 Subject: [PATCH 01/51] Add hover background to split action buttons Split buttons (terminal, browser, split right/down) now show a subtle rounded-rect background highlight on hover. Matches standard macOS toolbar button behavior. --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 447ac42b4525..f87666ccc1f3 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 447ac42b45256bdf333659d2dbe955afcaa87f6b +Subproject commit f87666ccc1f3376c6887233c325ddfded7d58623 From 81af9da69847dae91288af5d65bd3b2c0515511d Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Fri, 27 Mar 2026 21:05:16 -0700 Subject: [PATCH 02/51] Prevent fade overlays from bleeding into bottom separator --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index f87666ccc1f3..b22df2b07295 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit f87666ccc1f3376c6887233c325ddfded7d58623 +Subproject commit b22df2b072952796b086a4cad20b7066f66baa76 From f2dc14bfa23b3fb25c5215fd00e3219b17287d54 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Fri, 27 Mar 2026 21:09:36 -0700 Subject: [PATCH 03/51] Render bottom separator above fade overlays to prevent bleed --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index b22df2b07295..62e5de624af0 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit b22df2b072952796b086a4cad20b7066f66baa76 +Subproject commit 62e5de624af033a91a370d288fe5dbfbb1817d76 From a7871663965409629d4447e1b5059121ee9ddceb Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 01:35:15 -0700 Subject: [PATCH 04/51] Exclude drop zone from scroll fade threshold --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 62e5de624af0..192f7e186bf9 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 62e5de624af033a91a370d288fe5dbfbb1817d76 +Subproject commit 192f7e186bf969e5447e54e199ae3957658a7c9a From 9ae375c41a6d34bb5056ce6bd2b67faf58de4270 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 01:41:17 -0700 Subject: [PATCH 05/51] Revert button hover, fix fade threshold with 32pt buffer --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 192f7e186bf9..67129361a9d5 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 192f7e186bf969e5447e54e199ae3957658a7c9a +Subproject commit 67129361a9d57944411b8979810ee76a6dfe8108 From 0feca11cce3acf209107201f7af476a5fbb17d33 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 01:48:43 -0700 Subject: [PATCH 06/51] Fix right fade threshold: subtract drop zone, 4pt tolerance --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 67129361a9d5..89c7bec6fbac 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 67129361a9d57944411b8979810ee76a6dfe8108 +Subproject commit 89c7bec6fbac3e4614b11dfb201a988ee8b189e5 From e9b2e4bdbf687f13285d17684789c6fba65c8b31 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 01:53:23 -0700 Subject: [PATCH 07/51] Add leading padding to split buttons, fix fade threshold --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 89c7bec6fbac..5d564036cee7 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 89c7bec6fbac3e4614b11dfb201a988ee8b189e5 +Subproject commit 5d564036cee7a6bf698833684cff20c07e28bd4f From 9a45708750b8f51dffe65fbf00b2c0a9dbe65173 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 02:03:36 -0700 Subject: [PATCH 08/51] Rework tab bar: full-width scroll with floating split buttons --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 5d564036cee7..1be84b71a005 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 5d564036cee7a6bf698833684cff20c07e28bd4f +Subproject commit 1be84b71a005650a4afe93618d8ab285ed267f3c From 99329837fb9ea03e0b0e26710863be4e0c067b1a Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 02:15:50 -0700 Subject: [PATCH 09/51] Use ultraThinMaterial blur for floating split buttons --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 1be84b71a005..b8f1a161fc85 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 1be84b71a005650a4afe93618d8ab285ed267f3c +Subproject commit b8f1a161fc850eee68ba165c3d1dced71d3994ee From 7dff65658ea8427ee337ebf96ccbe5298b37c64e Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 02:18:48 -0700 Subject: [PATCH 10/51] Make split buttons group full height --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index b8f1a161fc85..3035e8404c9d 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit b8f1a161fc850eee68ba165c3d1dced71d3994ee +Subproject commit 3035e8404c9d018918f2187953f0052a56a8570b From d47ab35d67897fc475fe05698d866c3551381538 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 02:22:35 -0700 Subject: [PATCH 11/51] Full-height split button blur background --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 3035e8404c9d..6774708846ff 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 3035e8404c9d018918f2187953f0052a56a8570b +Subproject commit 6774708846ff80a7baba78503a04a5764108bf13 From a6758c503309574c27dade1fd43872ec5360d98f Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 02:30:56 -0700 Subject: [PATCH 12/51] Inset split buttons from bottom separator --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 6774708846ff..e7e2063f6305 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 6774708846ff80a7baba78503a04a5764108bf13 +Subproject commit e7e2063f6305cf8998b8f1aa2cb0742621d0e2f3 From 1e538ae796f5d5d7cdf465f69374c10fbd5e2eb4 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 02:33:04 -0700 Subject: [PATCH 13/51] Fix blur overlapping separator --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index e7e2063f6305..f3fdc30d64f5 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit e7e2063f6305cf8998b8f1aa2cb0742621d0e2f3 +Subproject commit f3fdc30d64f52318ce6bb82daf2b81a5e4e28734 From 1690dd1d55eefc114d09329654d73535c7136731 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 02:36:58 -0700 Subject: [PATCH 14/51] Use matching tab bar bg for split buttons, clear separator --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index f3fdc30d64f5..4434793572ee 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit f3fdc30d64f52318ce6bb82daf2b81a5e4e28734 +Subproject commit 4434793572eea94349448f39d9d119c1a54bbf53 From 389a665dd91548d76f56b2fc19746b5feeab1a87 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 02:39:05 -0700 Subject: [PATCH 15/51] Use regularMaterial blur for split buttons --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 4434793572ee..ec259748a395 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 4434793572eea94349448f39d9d119c1a54bbf53 +Subproject commit ec259748a395ff1598d308706959a8b90926cc59 From c20b219d935d66959b1c420e5c03c538705d470c Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 02:40:34 -0700 Subject: [PATCH 16/51] Try thickMaterial for split buttons --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index ec259748a395..efea8ab9ff16 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit ec259748a395ff1598d308706959a8b90926cc59 +Subproject commit efea8ab9ff16c3ebbc2d1531cccd5812c88bb34d From cf62e857378a73037fc9e6d0d3827b1713a95a91 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 02:44:33 -0700 Subject: [PATCH 17/51] Fade gradient + solid barFill for floating split buttons --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index efea8ab9ff16..0d27a667207c 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit efea8ab9ff16c3ebbc2d1531cccd5812c88bb34d +Subproject commit 0d27a667207c33d6a325f7a1a9c8571c55249db3 From 1d38fa272d09ac2ec4739b02f31b4a4c66b655e3 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 02:49:52 -0700 Subject: [PATCH 18/51] Use extended right fade as split buttons backdrop --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 0d27a667207c..c544025d2d07 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 0d27a667207c33d6a325f7a1a9c8571c55249db3 +Subproject commit c544025d2d07a699bb00dfb798c222df991a7435 From 6be43dd38ed8bdab24c65ef8b28e0f3232c7eeee Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 03:02:52 -0700 Subject: [PATCH 19/51] Add 5 debug styles for split button background --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index c544025d2d07..987307ee37d8 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit c544025d2d07a699bb00dfb798c222df991a7435 +Subproject commit 987307ee37d8811454edba9edf61f94bd735ad39 From ec3432e122710e937ea0b2b70bad4c24c0b6eebc Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 03:07:35 -0700 Subject: [PATCH 20/51] Add Split Button Style debug window to Debug menu --- Sources/cmuxApp.swift | 76 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/Sources/cmuxApp.swift b/Sources/cmuxApp.swift index 48d210a99d3c..bd2b9d687e89 100644 --- a/Sources/cmuxApp.swift +++ b/Sources/cmuxApp.swift @@ -508,6 +508,10 @@ struct cmuxApp: App { MenuBarExtraDebugWindowController.shared.show() } + Button("Split Button Style Debug…") { + SplitButtonStyleDebugWindowController.shared.show() + } + Divider() Button("Open All Debug Windows") { @@ -3334,6 +3338,78 @@ private struct MenuBarExtraDebugView: View { } } +// MARK: - Split Button Style Debug Window + +private final class SplitButtonStyleDebugWindowController: NSWindowController, NSWindowDelegate { + static let shared = SplitButtonStyleDebugWindowController() + + private init() { + let window = NSPanel( + contentRect: NSRect(x: 0, y: 0, width: 300, height: 200), + styleMask: [.titled, .closable, .utilityWindow], + backing: .buffered, + defer: false + ) + window.title = "Split Button Style" + window.titleVisibility = .visible + window.titlebarAppearsTransparent = false + window.isMovableByWindowBackground = true + window.isReleasedWhenClosed = false + window.identifier = NSUserInterfaceItemIdentifier("cmux.splitButtonStyleDebug") + window.center() + window.contentView = NSHostingView(rootView: SplitButtonStyleDebugView()) + AppDelegate.shared?.applyWindowDecorations(to: window) + super.init(window: window) + window.delegate = self + } + + @available(*, unavailable) + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func show() { + window?.center() + window?.makeKeyAndOrderFront(nil) + } +} + +private struct SplitButtonStyleDebugView: View { + @AppStorage("debugSplitButtonBgStyle") private var style = 0 + + private let styles = [ + (0, "No background"), + (1, "Solid barFill"), + (2, "Fade gradient + barFill"), + (3, "ultraThinMaterial"), + (4, "windowBackgroundColor + fade"), + ] + + var body: some View { + VStack(alignment: .leading, spacing: 12) { + Text("Split Button Background") + .font(.headline) + + ForEach(styles, id: \.0) { id, label in + HStack { + Image(systemName: style == id ? "checkmark.circle.fill" : "circle") + .foregroundColor(style == id ? .accentColor : .secondary) + Text("\(id): \(label)") + } + .contentShape(Rectangle()) + .onTapGesture { style = id } + } + + Divider() + Text("Changes apply live.") + .font(.caption) + .foregroundColor(.secondary) + } + .padding(16) + .frame(maxWidth: .infinity, alignment: .topLeading) + } +} + // MARK: - Background Debug Window private final class BackgroundDebugWindowController: NSWindowController, NSWindowDelegate { From 7e7097057d4128bfc3b2a64f226252f6c355ad94 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 03:16:30 -0700 Subject: [PATCH 21/51] Clean up: no-bg floating buttons, alphabetical debug menu - Split buttons float with no background (tabBarBackground covers the area, scroll padding prevents tabs from appearing behind buttons) - Default splitButtonsWidth to 120 so first render has correct padding - Remove split button style debug window and debug styles - Alphabetize Debug Windows menu entries, remove dividers --- Sources/cmuxApp.swift | 102 ++++-------------------------------------- vendor/bonsplit | 2 +- 2 files changed, 9 insertions(+), 95 deletions(-) diff --git a/Sources/cmuxApp.swift b/Sources/cmuxApp.swift index bd2b9d687e89..472a9df83e60 100644 --- a/Sources/cmuxApp.swift +++ b/Sources/cmuxApp.swift @@ -474,14 +474,12 @@ struct cmuxApp: App { Divider() Menu("Debug Windows") { - Button("Debug Window Controls…") { - DebugWindowControlsWindowController.shared.show() + Button("Background Debug…") { + BackgroundDebugWindowController.shared.show() } - Button("Browser Import Hint Debug…") { BrowserImportHintDebugWindowController.shared.show() } - Button( String( localized: "debug.menu.browserProfilePopoverDebug", @@ -490,30 +488,18 @@ struct cmuxApp: App { ) { BrowserProfilePopoverDebugWindowController.shared.show() } - + Button("Debug Window Controls…") { + DebugWindowControlsWindowController.shared.show() + } + Button("Menu Bar Extra Debug…") { + MenuBarExtraDebugWindowController.shared.show() + } Button("Settings/About Titlebar Debug…") { SettingsAboutTitlebarDebugWindowController.shared.show() } - - Divider() Button("Sidebar Debug…") { SidebarDebugWindowController.shared.show() } - - Button("Background Debug…") { - BackgroundDebugWindowController.shared.show() - } - - Button("Menu Bar Extra Debug…") { - MenuBarExtraDebugWindowController.shared.show() - } - - Button("Split Button Style Debug…") { - SplitButtonStyleDebugWindowController.shared.show() - } - - Divider() - Button("Open All Debug Windows") { openAllDebugWindows() } @@ -3338,78 +3324,6 @@ private struct MenuBarExtraDebugView: View { } } -// MARK: - Split Button Style Debug Window - -private final class SplitButtonStyleDebugWindowController: NSWindowController, NSWindowDelegate { - static let shared = SplitButtonStyleDebugWindowController() - - private init() { - let window = NSPanel( - contentRect: NSRect(x: 0, y: 0, width: 300, height: 200), - styleMask: [.titled, .closable, .utilityWindow], - backing: .buffered, - defer: false - ) - window.title = "Split Button Style" - window.titleVisibility = .visible - window.titlebarAppearsTransparent = false - window.isMovableByWindowBackground = true - window.isReleasedWhenClosed = false - window.identifier = NSUserInterfaceItemIdentifier("cmux.splitButtonStyleDebug") - window.center() - window.contentView = NSHostingView(rootView: SplitButtonStyleDebugView()) - AppDelegate.shared?.applyWindowDecorations(to: window) - super.init(window: window) - window.delegate = self - } - - @available(*, unavailable) - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - func show() { - window?.center() - window?.makeKeyAndOrderFront(nil) - } -} - -private struct SplitButtonStyleDebugView: View { - @AppStorage("debugSplitButtonBgStyle") private var style = 0 - - private let styles = [ - (0, "No background"), - (1, "Solid barFill"), - (2, "Fade gradient + barFill"), - (3, "ultraThinMaterial"), - (4, "windowBackgroundColor + fade"), - ] - - var body: some View { - VStack(alignment: .leading, spacing: 12) { - Text("Split Button Background") - .font(.headline) - - ForEach(styles, id: \.0) { id, label in - HStack { - Image(systemName: style == id ? "checkmark.circle.fill" : "circle") - .foregroundColor(style == id ? .accentColor : .secondary) - Text("\(id): \(label)") - } - .contentShape(Rectangle()) - .onTapGesture { style = id } - } - - Divider() - Text("Changes apply live.") - .font(.caption) - .foregroundColor(.secondary) - } - .padding(16) - .frame(maxWidth: .infinity, alignment: .topLeading) - } -} - // MARK: - Background Debug Window private final class BackgroundDebugWindowController: NSWindowController, NSWindowDelegate { diff --git a/vendor/bonsplit b/vendor/bonsplit index 987307ee37d8..9fa1a368f5ca 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 987307ee37d8811454edba9edf61f94bd735ad39 +Subproject commit 9fa1a368f5caddacda3e524bbd13d03a483162fe From e64bbe87314ab6d4ba1b7f3ed6af840e22a170a5 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 03:24:50 -0700 Subject: [PATCH 22/51] Revert to HStack sibling layout, add debug menu docs to CLAUDE.md - Split buttons are HStack siblings of the ScrollView, not overlays. Single .background() on parent, no compositing mismatch. - Alphabetize Debug Windows menu, remove dividers. - Document Debug menu in CLAUDE.md. --- CLAUDE.md | 8 ++++++++ vendor/bonsplit | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index fe961481b6a6..0c2d8156115b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -141,6 +141,14 @@ When adding a regression test for a bug fix, use a two-commit structure so CI pr This makes it visible in the GitHub PR UI (Commits tab, check statuses) that the test genuinely fails without the fix. +## Debug menu + +The app has a **Debug** menu in the macOS menu bar (only in DEBUG builds). Use it for visual iteration: + +- **Debug > Debug Windows** contains panels for tuning layout, colors, and behavior. Entries are alphabetical with no dividers. +- To add a debug toggle or visual option: create an `NSWindowController` subclass with a `shared` singleton, add it to the "Debug Windows" menu in `Sources/cmuxApp.swift`, and add a SwiftUI view with `@AppStorage` bindings for live changes. +- When the user says "debug menu" or "debug window", they mean this menu, not `defaults write`. + ## Pitfalls - **Custom UTTypes** for drag-and-drop must be declared in `Resources/Info.plist` under `UTExportedTypeDeclarations` (e.g. `com.splittabbar.tabtransfer`, `com.cmux.sidebar-tab-reorder`). diff --git a/vendor/bonsplit b/vendor/bonsplit index 9fa1a368f5ca..fb03b900c659 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 9fa1a368f5caddacda3e524bbd13d03a483162fe +Subproject commit fb03b900c659593c885c9c225b4b4c453a7d9296 From 3be593d8204b98a26ac4733c838fca5ef740f899 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 04:04:56 -0700 Subject: [PATCH 23/51] Add Split Button Layout debug window with 5 switchable approaches --- Sources/cmuxApp.swift | 72 +++++++++++++++++++++++++++++++++++++++++++ vendor/bonsplit | 2 +- 2 files changed, 73 insertions(+), 1 deletion(-) diff --git a/Sources/cmuxApp.swift b/Sources/cmuxApp.swift index 472a9df83e60..a018bda904c9 100644 --- a/Sources/cmuxApp.swift +++ b/Sources/cmuxApp.swift @@ -500,6 +500,9 @@ struct cmuxApp: App { Button("Sidebar Debug…") { SidebarDebugWindowController.shared.show() } + Button("Split Button Layout Debug…") { + SplitButtonLayoutDebugWindowController.shared.show() + } Button("Open All Debug Windows") { openAllDebugWindows() } @@ -3324,6 +3327,75 @@ private struct MenuBarExtraDebugView: View { } } +// MARK: - Split Button Layout Debug Window + +private final class SplitButtonLayoutDebugWindowController: NSWindowController, NSWindowDelegate { + static let shared = SplitButtonLayoutDebugWindowController() + + private init() { + let window = NSPanel( + contentRect: NSRect(x: 0, y: 0, width: 320, height: 240), + styleMask: [.titled, .closable, .utilityWindow], + backing: .buffered, + defer: false + ) + window.title = "Split Button Layout" + window.titleVisibility = .visible + window.titlebarAppearsTransparent = false + window.isMovableByWindowBackground = true + window.isReleasedWhenClosed = false + window.identifier = NSUserInterfaceItemIdentifier("cmux.splitButtonLayoutDebug") + window.center() + window.contentView = NSHostingView(rootView: SplitButtonLayoutDebugView()) + AppDelegate.shared?.applyWindowDecorations(to: window) + super.init(window: window) + window.delegate = self + } + + @available(*, unavailable) + required init?(coder: NSCoder) { fatalError() } + + func show() { + window?.center() + window?.makeKeyAndOrderFront(nil) + } +} + +private struct SplitButtonLayoutDebugView: View { + @AppStorage("debugSplitButtonLayout") private var layout = 0 + + private let options: [(Int, String)] = [ + (0, "HStack sibling (no overlay)"), + (1, "Overlay: solid barFill bg"), + (2, "Overlay: opaque windowBg"), + (3, "Overlay: ultraThinMaterial"), + (4, "Overlay: fade gradient + barFill"), + ] + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + Text("Split Button Layout") + .font(.headline) + + ForEach(options, id: \.0) { id, label in + HStack { + Image(systemName: layout == id ? "checkmark.circle.fill" : "circle") + .foregroundColor(layout == id ? .accentColor : .secondary) + Text(label) + } + .contentShape(Rectangle()) + .onTapGesture { layout = id } + } + + Text("Changes apply live.") + .font(.caption) + .foregroundColor(.secondary) + } + .padding(16) + .frame(maxWidth: .infinity, alignment: .topLeading) + } +} + // MARK: - Background Debug Window private final class BackgroundDebugWindowController: NSWindowController, NSWindowDelegate { diff --git a/vendor/bonsplit b/vendor/bonsplit index fb03b900c659..3cc943a1f91d 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit fb03b900c659593c885c9c225b4b4c453a7d9296 +Subproject commit 3cc943a1f91d8a825c51e588a3269204818bed31 From 064660cdcd88a715276e95c6bb6578793ff56a05 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 04:09:22 -0700 Subject: [PATCH 24/51] Fix fade gradient color to match tab bar background --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 3cc943a1f91d..4da4b6bb57ce 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 3cc943a1f91d8a825c51e588a3269204818bed31 +Subproject commit 4da4b6bb57cec52b1d538cd7be391f8f8fa29684 From e6edc1efd97ae451d44e8a5fb458625df484064c Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 04:15:01 -0700 Subject: [PATCH 25/51] Add fade color debug window with 6 color options --- Sources/cmuxApp.swift | 27 ++++++++++++++------------- vendor/bonsplit | 2 +- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/Sources/cmuxApp.swift b/Sources/cmuxApp.swift index a018bda904c9..b3afdc7d2454 100644 --- a/Sources/cmuxApp.swift +++ b/Sources/cmuxApp.swift @@ -3362,29 +3362,30 @@ private final class SplitButtonLayoutDebugWindowController: NSWindowController, } private struct SplitButtonLayoutDebugView: View { - @AppStorage("debugSplitButtonLayout") private var layout = 0 - - private let options: [(Int, String)] = [ - (0, "HStack sibling (no overlay)"), - (1, "Overlay: solid barFill bg"), - (2, "Overlay: opaque windowBg"), - (3, "Overlay: ultraThinMaterial"), - (4, "Overlay: fade gradient + barFill"), + @AppStorage("debugFadeColorStyle") private var fadeColor = 0 + + private let fadeOptions: [(Int, String)] = [ + (0, "barFill with focus opacity"), + (1, "barBackground (raw)"), + (2, "windowBackgroundColor"), + (3, "controlBackgroundColor"), + (4, "textBackgroundColor"), + (5, "underPageBackgroundColor"), ] var body: some View { VStack(alignment: .leading, spacing: 10) { - Text("Split Button Layout") + Text("Fade Gradient Color") .font(.headline) - ForEach(options, id: \.0) { id, label in + ForEach(fadeOptions, id: \.0) { id, label in HStack { - Image(systemName: layout == id ? "checkmark.circle.fill" : "circle") - .foregroundColor(layout == id ? .accentColor : .secondary) + Image(systemName: fadeColor == id ? "checkmark.circle.fill" : "circle") + .foregroundColor(fadeColor == id ? .accentColor : .secondary) Text(label) } .contentShape(Rectangle()) - .onTapGesture { layout = id } + .onTapGesture { fadeColor = id } } Text("Changes apply live.") diff --git a/vendor/bonsplit b/vendor/bonsplit index 4da4b6bb57ce..db53280af38c 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 4da4b6bb57cec52b1d538cd7be391f8f8fa29684 +Subproject commit db53280af38c00d91b9ff077e357c14710e61a7d From 79dbc9bad55cbed0b73a7a7ac84ac6a4734f836c Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 04:18:00 -0700 Subject: [PATCH 26/51] Use mask for scroll fades, fixes color mismatch --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index db53280af38c..a2b351a27271 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit db53280af38c00d91b9ff077e357c14710e61a7d +Subproject commit a2b351a272711831a74933a8fd514aea1c79f1c4 From 419f6a96f8d35f080fd77b212e1a5bb8fd095592 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Sat, 28 Mar 2026 14:24:09 -0700 Subject: [PATCH 27/51] Hide scroll fades in minimal mode unless hovering --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index a2b351a27271..adb8f8a0206d 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit a2b351a272711831a74933a8fd514aea1c79f1c4 +Subproject commit adb8f8a0206daf524fda5bdf1cff355479a660e5 From d59f04078cb1311b28fe51cc417d614fe7bbc8ca Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 04:14:53 -0700 Subject: [PATCH 28/51] Remove split buttons from layout when hidden in minimal mode --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index adb8f8a0206d..799dd3bdc51f 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit adb8f8a0206daf524fda5bdf1cff355479a660e5 +Subproject commit 799dd3bdc51f365e075958126d70942b6212abc3 From 91af725090e4a61602fe821c59b0dc7608682ff2 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 04:19:27 -0700 Subject: [PATCH 29/51] Always show fades, overlay buttons to prevent scroll jump --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 799dd3bdc51f..d0cdfba561e7 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 799dd3bdc51f365e075958126d70942b6212abc3 +Subproject commit d0cdfba561e7da01981efbda627599880a52017e From d064bb0e33eea92290e13861010485944b4fbad5 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 04:22:57 -0700 Subject: [PATCH 30/51] Add hover-only mask fade behind split buttons --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index d0cdfba561e7..1cfbbf633e72 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit d0cdfba561e7da01981efbda627599880a52017e +Subproject commit 1cfbbf633e72baa44a59a44a4f6b77c281da2ad2 From 7f852bfa2b3043403960d6502190c476fe32bbec Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 04:25:33 -0700 Subject: [PATCH 31/51] Reduce button mask area to 90pt --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 1cfbbf633e72..47800ac2c10f 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 1cfbbf633e72baa44a59a44a4f6b77c281da2ad2 +Subproject commit 47800ac2c10f57ad3e1d6e7a884515b12133fc4e From 0bed9adbf04fde6e6477e7e2ddbcb2ae45bd97a9 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 04:29:40 -0700 Subject: [PATCH 32/51] Animate button mask smoothly --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 47800ac2c10f..8107c6bcad08 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 47800ac2c10f57ad3e1d6e7a884515b12133fc4e +Subproject commit 8107c6bcad087a6ea06598c0a972813b7ddc1536 From 7f4b3e2212e5043a0343d758dd76b22e82c75aa7 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 04:38:09 -0700 Subject: [PATCH 33/51] Fade entire button group together via opacity --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 8107c6bcad08..69c4a4c6722a 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 8107c6bcad087a6ea06598c0a972813b7ddc1536 +Subproject commit 69c4a4c6722ae351685845df6d6ff973d8b34fbb From 5bf7ea183da82b252a64d41d54dbdd875904de0f Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 04:40:38 -0700 Subject: [PATCH 34/51] Add blur behind buttons with fade mask --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 69c4a4c6722a..f41b6774a4b0 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 69c4a4c6722ae351685845df6d6ff973d8b34fbb +Subproject commit f41b6774a4b02d86a645b1b1dea9c5a1410d1708 From c5609a8aa5b3b9a66f5d145925029f805e7a8587 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 04:42:58 -0700 Subject: [PATCH 35/51] Use theme barBackground for button backdrop --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index f41b6774a4b0..cf53f594092e 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit f41b6774a4b02d86a645b1b1dea9c5a1410d1708 +Subproject commit cf53f594092ef66fb633b7c9e7c26a1e98b46770 From d1c78d166c19a634d66554b1ccf6aca7d3e284d1 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 04:45:44 -0700 Subject: [PATCH 36/51] Blur + theme tint for button backdrop --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index cf53f594092e..43576402c194 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit cf53f594092ef66fb633b7c9e7c26a1e98b46770 +Subproject commit 43576402c19495f2d1184c492b64fedf44c432a6 From 00360af7a6d0565b82e7eca157d30e718015605d Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 04:48:50 -0700 Subject: [PATCH 37/51] More tint (0.85), less blur --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 43576402c194..62dc31a7531e 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 43576402c19495f2d1184c492b64fedf44c432a6 +Subproject commit 62dc31a7531e94600134a54ad83e8e93544c3db0 From 6977684e86ee612a50691335b02ef7537af69741 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 04:50:32 -0700 Subject: [PATCH 38/51] Tint 0.2, clear bottom border --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 62dc31a7531e..ae36fa0d0d25 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 62dc31a7531e94600134a54ad83e8e93544c3db0 +Subproject commit ae36fa0d0d255a578d32ea674da1863aca5d0c82 From 6afa2f06cc7a4d1aeaf4d6829cc75b7937764eb6 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 04:54:42 -0700 Subject: [PATCH 39/51] Use terminal bg color, add scroll trailing padding for buttons --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index ae36fa0d0d25..427a7fc941aa 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit ae36fa0d0d255a578d32ea674da1863aca5d0c82 +Subproject commit 427a7fc941aa7c45ddb969ddfc2a95311ef89d31 From 01ba1fe84ebd509acbd31aeb777eb6f0e75ee6d8 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 04:57:09 -0700 Subject: [PATCH 40/51] Less blur, paneBackground at 0.75 opacity --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 427a7fc941aa..4bd65076a7f8 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 427a7fc941aa7c45ddb969ddfc2a95311ef89d31 +Subproject commit 4bd65076a7f883cd14bcfddca013b841dff67113 From 1bfca09f7bc1100f9197c815284899b084417c3c Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 04:59:45 -0700 Subject: [PATCH 41/51] paneBackground at 0.9 opacity --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 4bd65076a7f8..e759a2091900 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 4bd65076a7f883cd14bcfddca013b841dff67113 +Subproject commit e759a209190045b1110b79e48d41340ef2a58f1e From af34d5ca4c8da7e2ec0baa354129962adcfb97ef Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 05:05:13 -0700 Subject: [PATCH 42/51] 0.97 opacity for button backdrop --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index e759a2091900..54505df3ecdd 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit e759a209190045b1110b79e48d41340ef2a58f1e +Subproject commit 54505df3ecdd3a21e901cb60920c634b65b7118b From 3732418c29e80fb84aa690e2ff0373cfd2d0c0fc Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 05:09:50 -0700 Subject: [PATCH 43/51] Test: fully opaque paneBackground --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 54505df3ecdd..837ded8180e6 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 54505df3ecdd3a21e901cb60920c634b65b7118b +Subproject commit 837ded8180e6de05ef17f913dc0f0f0cf8d7a93b From ef502f80ec31d38cba547b7d67e07616d3dfb7bb Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 05:12:04 -0700 Subject: [PATCH 44/51] Test: solid red backdrop --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 837ded8180e6..80a2f827670f 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 837ded8180e6de05ef17f913dc0f0f0cf8d7a93b +Subproject commit 80a2f827670f579b612d7c6de508ab36497f1b3a From 2e26ca64ce6ee4b5601ba30ebf714be79f481b02 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 14:44:26 -0700 Subject: [PATCH 45/51] Gradient + solid paneBackground backdrop, no mask --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 80a2f827670f..2f41524ebfc8 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 80a2f827670f579b612d7c6de508ab36497f1b3a +Subproject commit 2f41524ebfc81d34c04ccdba4e731ca20ca54d36 From f372b7c3f1e8ad8d9ab5421da7ca8f456cf40001 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 14:46:51 -0700 Subject: [PATCH 46/51] Force opaque paneBackground for button backdrop --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 2f41524ebfc8..256416656468 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 2f41524ebfc81d34c04ccdba4e731ca20ca54d36 +Subproject commit 25641665646870b417c12d2b0679150fdc1ccdbb From 524b3cbc340f3f25c8a28d446e3891017167fa1b Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 14:48:57 -0700 Subject: [PATCH 47/51] Use barBackground for button backdrop --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 256416656468..77d6def37628 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 25641665646870b417c12d2b0679150fdc1ccdbb +Subproject commit 77d6def37628ccd0a6cc8c8396c101f4010f0df6 From b3c9dd10fb3111ffd82998301010bd2cd071096e Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 14:53:22 -0700 Subject: [PATCH 48/51] Use terminal bg (paneBackground forced opaque) --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 77d6def37628..4bdce148155c 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 77d6def37628ccd0a6cc8c8396c101f4010f0df6 +Subproject commit 4bdce148155c0d6ddbdb3089682ac1fc98267ae9 From 74194fa21c141ad60277a75cd0475a8a30ec3fee Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 14:59:21 -0700 Subject: [PATCH 49/51] Pre-composite backdrop color for exact match --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 4bdce148155c..082fd925b2a8 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 4bdce148155c0d6ddbdb3089682ac1fc98267ae9 +Subproject commit 082fd925b2a82fe91f9b1c017d671f933f55f548 From eeb9d67b8c366d520f7d2cd5a541eb2fe5a13e48 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 15:03:42 -0700 Subject: [PATCH 50/51] Add 6 switchable backdrop styles in debug window --- Sources/cmuxApp.swift | 28 ++++++++++++++-------------- vendor/bonsplit | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Sources/cmuxApp.swift b/Sources/cmuxApp.swift index b3afdc7d2454..e63d99f5be4a 100644 --- a/Sources/cmuxApp.swift +++ b/Sources/cmuxApp.swift @@ -3362,30 +3362,30 @@ private final class SplitButtonLayoutDebugWindowController: NSWindowController, } private struct SplitButtonLayoutDebugView: View { - @AppStorage("debugFadeColorStyle") private var fadeColor = 0 - - private let fadeOptions: [(Int, String)] = [ - (0, "barFill with focus opacity"), - (1, "barBackground (raw)"), - (2, "windowBackgroundColor"), - (3, "controlBackgroundColor"), - (4, "textBackgroundColor"), - (5, "underPageBackgroundColor"), + @AppStorage("debugFadeColorStyle") private var backdropStyle = 0 + + private let options: [(Int, String)] = [ + (0, "Pre-composited paneBackground"), + (1, "Raw paneBackground (opaque)"), + (2, "barBackground (tab chrome)"), + (3, "windowBackgroundColor"), + (4, "controlBackgroundColor"), + (5, "Pre-composited barBackground"), ] var body: some View { VStack(alignment: .leading, spacing: 10) { - Text("Fade Gradient Color") + Text("Button Backdrop Color") .font(.headline) - ForEach(fadeOptions, id: \.0) { id, label in + ForEach(options, id: \.0) { id, label in HStack { - Image(systemName: fadeColor == id ? "checkmark.circle.fill" : "circle") - .foregroundColor(fadeColor == id ? .accentColor : .secondary) + Image(systemName: backdropStyle == id ? "checkmark.circle.fill" : "circle") + .foregroundColor(backdropStyle == id ? .accentColor : .secondary) Text(label) } .contentShape(Rectangle()) - .onTapGesture { fadeColor = id } + .onTapGesture { backdropStyle = id } } Text("Changes apply live.") diff --git a/vendor/bonsplit b/vendor/bonsplit index 082fd925b2a8..3a025cf7ce60 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 082fd925b2a82fe91f9b1c017d671f933f55f548 +Subproject commit 3a025cf7ce60e54f0ce3d81d685f5c0f03f7baf4 From ff8b0a473c84ab8611c0223c6f8acc130f78bab6 Mon Sep 17 00:00:00 2001 From: Lawrence Chen Date: Mon, 30 Mar 2026 15:09:29 -0700 Subject: [PATCH 51/51] Mask-based button area hiding, no backdrop color needed --- vendor/bonsplit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/bonsplit b/vendor/bonsplit index 3a025cf7ce60..aff9f7073125 160000 --- a/vendor/bonsplit +++ b/vendor/bonsplit @@ -1 +1 @@ -Subproject commit 3a025cf7ce60e54f0ce3d81d685f5c0f03f7baf4 +Subproject commit aff9f7073125d412fed07bce1adab0e78f907b14