Skip to content

iOS: stop open menus from flickering when their parent views re-render - #8611

Merged
azooz2003-bit merged 3 commits into
mainfrom
feat-ios-menu-flicker-sweep
Jul 22, 2026
Merged

azooz2003-bit merged 3 commits into
mainfrom
feat-ios-menu-flicker-sweep

Conversation

@azooz2003-bit

@azooz2003-bit azooz2003-bit commented Jul 22, 2026 •

Copy link
Copy Markdown
Collaborator

Extends the terminal-picker menu isolation from #7959 to every remaining flicker-prone menu in the iOS app.

When a SwiftUI Menu-owning view's body re-runs while the menu is presented, iOS rebuilds the UIMenu, producing a continuous cross-fade flicker and canceling scroll gestures. Parents like the workspace list and workspace detail re-render constantly during live sync and agent streaming, so any open menu mounted on them flickered.

Each affected menu is now an Equatable view compared over an immutable value snapshot (everything the label and menu content render), with action closures excluded from equality and applied via .equatable(). Bindings are built inside the gated child from value + action so parents stop passing fresh Binding(get:set:) closures. Actions key on stable IDs and resolve current state at invocation, so gated snapshots cannot act on stale rows.

Gated in this PR, by churn risk:

High (toolbar menus on streaming parents): the computer title picker (WorkspaceMacTitlePicker, both mounts), the workspace-detail title menu (WorkspaceTitleMenu, full label token incl. chat/browser/standard branches), the new-workspace split menu, and the workspace list filter menu.

Medium: workspace group header context menu, notification feed row context menu, artifact gallery item context menu and sort menu, chat artifact viewer toolbar menu, chat prose bubble copy menu, and both task composer pickers (agent/template and machine).

Intentionally unchanged: settings/iroh/editor form menus (parents don't re-render while open), segmented/inline pickers, PhotosPicker/ColorPicker/document pickers, macOS-only branches, and the workspace-row UIKit UIMenu (already immune, built per long-press).

Tests: WorkspaceTitleMenuValueTests pins that label branch changes invalidate the title-menu value. Existing ChatArtifactViewerPagerModelTests updated for the path-keyed toolbar actions. Note: TerminalSurfaceMountOwnershipTests in CmuxMobileShellUI does not compile on current main (missing terminalFolderTapEnabled argument, pre-existing, untouched here).

🤖 Generated with Claude Code


View with Codesmith Autofix with Codesmith
Need help on this PR? Tag /codesmith with what you need. Autofix is disabled.


Summary by cubic

Stops iOS menus from flickering or canceling gestures when their parent views re-render by gating them behind Equatable, snapshot-driven subviews. Open menus now stay stable during live sync and agent streaming.

  • Bug Fixes

    • Prevented flicker for: workspace title menu, Mac title picker, new workspace menu, workspace list filter, group header/context menus, notification feed row, artifact gallery (items + sort), chat viewer toolbar, chat prose bubble, and task composer pickers.
    • Chat artifact viewer toolbar actions are now path-keyed; share/save/copy work without rebuilding the menu.
  • Refactors

    • Introduced lightweight Value and Actions structs per menu, marked menu views Equatable, and applied .equatable() to stabilize open UIMenus.
    • Built bindings inside children and routed actions via stable IDs; extracted focused components (e.g., TerminalArtifactGallerySortMenu, TaskComposerMachineMenu, WorkspaceListNewWorkspaceMenu).
    • Marked related types Sendable and tightened equality on frequently updated views (e.g., ChatProseBubbleView, NotificationFeedRow).
    • Added WorkspaceTitleMenuValueTests and updated ChatArtifactViewerPagerModelTests for path-keyed actions.

Written for commit 59996df. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • New Features

    • Added an artifact viewer actions menu with sharing, saving, copying, search, navigation, line-number, word-wrap, and Markdown display controls.
    • Added clearer menus for artifact sorting, machine selection, task agents, workspace creation, and workspace titles.
    • Improved workspace and notification interactions with more consistent action availability and accessibility labels.
  • Performance

    • Improved UI update efficiency across artifact galleries, notifications, transcripts, and workspace lists.
  • Tests

    • Added coverage for workspace title menu state and artifact viewer navigation.

cmux reload-cloud and others added 3 commits July 21, 2026 16:24
…ilds

Apply the TerminalPickerMenu isolation pattern (PR 7959) to the four
menus whose owning views re-render during live sync/streaming while the
menu can be open: the computer title picker, the workspace-detail title
menu, the new-workspace split menu, and the workspace list filter menu.
Each now renders from an Equatable value snapshot with closures excluded
from equality, so parent body churn no longer rebuilds an open UIMenu.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Extend the menu-isolation sweep to the eight medium-churn sites: group
header row, notification feed row, artifact gallery items and sort menu,
chat artifact viewer toolbar menu, chat prose bubble copy menu, and both
task composer pickers. Actions now key on stable IDs and resolve current
state at invocation, so gated snapshots cannot go stale.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 22, 2026 •

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The PR refactors iOS SwiftUI menus and rows around equatable value/action models, adds path-aware artifact viewer actions, introduces dedicated gallery and workspace menus, and expands Sendable conformance for artifact state.

Changes

Artifact viewer actions

Layer / File(s) Summary
Artifact menu contracts and state
Packages/iOS/CmuxAgentChatUI/Sources/CmuxAgentChatUI/Artifacts/*
Artifact viewer state gains Sendable conformance and file-action presentation, running, and error fields. A new value/action menu renders file, text, and markdown controls.
Artifact pager action wiring
Packages/iOS/CmuxAgentChatUI/Sources/CmuxAgentChatUI/Artifacts/ChatArtifactViewerPager*.swift, Packages/iOS/CmuxAgentChatUI/Tests/CmuxAgentChatUITests/ChatArtifactViewerPagerModelTests.swift
Pager callbacks route through path-specific model methods, including asynchronous share/save actions, and the pager test uses an explicit path.

Mobile shell menus

Layer / File(s) Summary
Task composer selection menus
Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TaskComposer/*
Agent and machine menus receive equatable values and action closures; template and machine selection handlers now accept identifiers and validate them.
Artifact gallery item and sort menus
Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TerminalArtifact*, Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TerminalArtifactFilesSheet+Content.swift
Gallery items use value/action inputs and equatable rendering, while gallery sorting moves into a dedicated localized menu.
Workspace title and toolbar state
Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/{WorkspaceTitleMenu*,WorkspaceShellView.swift,WorkspaceListView+MacSelection.swift,AgentChatDemoScreen.swift,NotificationFeedPreviewView.swift}
Workspace title, chat header, machine picker, and toolbar selection flows use explicit value objects and callbacks instead of bindings or independent view fields.
Workspace list controls and rows
Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/{WorkspaceGroupHeaderRow*,WorkspaceList*,NotificationFeed*.swift}
Workspace group, filter, creation, and notification rows centralize display capabilities in equatable values and route mutations through action containers.

Transcript equatable rendering

Layer / File(s) Summary
Equatable transcript and notification rows
Packages/iOS/CmuxAgentChatUI/Sources/CmuxAgentChatUI/Transcript/*, Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/NotificationFeed*.swift
Prose bubbles and notification rows define equality from stable content fields and are rendered with SwiftUI’s .equatable() modifier.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant ChatArtifactViewerActionsMenu
  participant ChatArtifactViewerPager
  participant ChatArtifactViewerPagerModel
  User->>ChatArtifactViewerActionsMenu: select viewer action
  ChatArtifactViewerActionsMenu->>ChatArtifactViewerPager: invoke action callback
  ChatArtifactViewerPager->>ChatArtifactViewerPagerModel: perform action for artifact path
Loading

Possibly related PRs


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error, 2 warnings)

Check name Status Explanation Resolution
Cmux Architecture Rethink ❌ Error WorkspaceListNewWorkspaceMenu still gates the group action on canCreate and disables the whole menu on canCreate, so canCreateGroup-only state is unreachable. Gate the group item and overall disabled state on canCreateGroup (or a shared availability contract) so group creation remains reachable when workspace creation is unavailable.
Description check ⚠️ Warning The description covers summary and testing, but it omits required demo video, review trigger, and checklist sections from the template. Add the missing Demo Video, Review Trigger, and Checklist sections, and include a demo link for this UI behavior change.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (22 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: preventing iOS menu flicker during parent re-renders.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cmux Swift Actor Isolation ✅ Passed PASS: New Sendable types are pure value data, and the async viewer/page mutations stay on @MainActor models; the rest are SwiftUI UI types allowed by the rule.
Cmux Swift Blocking Runtime ✅ Passed PASS: Diff adds no new sleeps, waits, syncs, semaphores, or locks; targeted git diff found no blocking primitives, and the existing ContinuousClock sleep isn’t in the patch.
Cmux Browser Automation Off-Main ✅ Passed PR diff only changes iOS menu/UI files and one pager test; it does not touch the browser automation routing paths in scope.
Cmux Expensive Synchronous Load ✅ Passed Changed files are menu/view value-action refactors; no new sync agent-history loads, JSON parsing, or file scans on main/interactive paths were added.
Cmux Cache Substitution Correctness ✅ Passed The diff only adds transient Equatable UI snapshots; no persistence/history/undo path replaces a fresh authoritative read with a stale cache.
Cmux No Hacky Sleeps ✅ Passed Only a Swift test file changed, and the diff/rule scan found no non-Swift sleeps, timers, polling, or fixed waits.
Cmux Algorithmic Complexity ✅ Passed No new nested scans or repeated sorting/filtering were added; menu data is precomputed, and filter membership uses Set.contains.
Cmux Swift Concurrency ✅ Passed Only new async work is a SwiftUI button/menu Task and an XCTest Task; no new DispatchQueue/Combine/completion-handler patterns were introduced.
Cmux Swift @Concurrent ✅ Passed No diff hunks add @concurrent or nonisolated async misuse; the new file-action work still hops through Task and stays UI-bound on @MainActor.
Cmux Swift Package Boundaries ✅ Passed All Swift changes stay in Packages/iOS SwiftPM targets and are UI/menu wiring or tests; no app-target Sources/ domain logic was added.
Cmux Swiftpm Lockfiles ✅ Passed PR only changes Swift source/tests; no .gitignore, Package.swift, Package.resolved, or Xcode package-reference files changed, so lockfile policy isn't triggered.
Cmux Swift Logging ✅ Passed PR diff adds no print/debugPrint/dump/NSLog/Logger changes; the only NSLog is pre-existing DEBUG-only code unchanged from main.
Cmux User-Facing Error Privacy ✅ Passed PASS: The diff only adds generic menu labels/toasts and state refactors; no user-facing errors, alerts, or raw upstream/provider details were introduced.
Cmux Full Internationalization ✅ Passed All new user-facing strings use localized APIs, and every referenced key has en/ja entries in the relevant catalogs.
Cmux Swiftui State Layout ✅ Passed PASS: The new SwiftUI views use value snapshots + action closures, the pager model is @Observable, and I found no new ObservableObject/@published, row-store refs, or render-time writes.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PR only changes menus/views; no NSWindow/WindowGroup/WindowController code or cmux window IDs were added or changed.
Cmux Source Artifacts ✅ Passed All changed paths are intentional Swift source or test files; no logs, temp dirs, caches, or build outputs were added.
Cmux No Test Or Debug Seam In Production Source ✅ Passed PASS: The PR adds no new DEBUG/test-only seams or test-hook members in production Sources; existing debug blocks in unrelated files were unchanged.
Cmux No Ambient Global State ✅ Passed No new free functions, mutable globals, or singletons were introduced; the only static helper namespace in WorkspaceShellView pre-existed in HEAD^.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat-ios-menu-flicker-sweep

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR isolates frequently updated iOS menus behind immutable snapshots and equality gates. The main changes are:

  • Adds equatable menu views for workspace, artifact, notification, and task-composer surfaces.
  • Routes retained menu actions through stable workspace, artifact, template, and machine identifiers.
  • Adds path-keyed artifact viewer actions and title-menu value tests.

Confidence Score: 4/5

The artifact viewer menu can still rebuild during unrelated loader updates.

  • The snapshot-and-action design is applied consistently across the changed menus.
  • Stable identifiers keep retained menu actions tied to the intended model object.
  • Unused loader fields remain part of one menu's equality value and can restore the original flicker.

Packages/iOS/CmuxAgentChatUI/Sources/CmuxAgentChatUI/Artifacts/ChatArtifactViewerActionsMenuValue.swift

Important Files Changed

Filename Overview
Packages/iOS/CmuxAgentChatUI/Sources/CmuxAgentChatUI/Artifacts/ChatArtifactViewerActionsMenuValue.swift Defines the artifact menu equality snapshot but includes unused loader state that can rebuild an open menu.
Packages/iOS/CmuxAgentChatUI/Sources/CmuxAgentChatUI/Artifacts/ChatArtifactViewerPagerModel.swift Routes viewer actions to artifact pages by path instead of relying on the current selection.
Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceTitleMenu.swift Gates the workspace title menu with an immutable snapshot covering its rendered branches and capabilities.
Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceGroupHeaderRow.swift Moves group header rendering and menu capabilities into an immutable value with separate actions.
Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TaskComposer/TaskComposerAgentMenu.swift Uses an equatable template snapshot and resolves selections through stable template identifiers.

Reviews (1): Last reviewed commit: "test(ios): pass artifact path to path-ke..." | Re-trigger Greptile

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceListNewWorkspaceMenu.swift`:
- Around line 21-39: Update the workspace-group action in the menu labeled by
`MobileNewWorkspaceGroupMenuItem` to gate its callback with
`value.canCreateGroup` rather than `value.canCreate`. Change the surrounding
menu’s disabled condition so it is disabled only when both `value.canCreate` and
`value.canCreateGroup` are unavailable, while preserving the existing workspace
creation guard and action behavior.

In
`@Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceMacTitlePickerValue.swift`:
- Around line 3-10: The action availability and invocation paths can diverge,
allowing enabled UI actions without handlers. In
WorkspaceMacTitlePickerValue.swift (lines 3-10), replace canAddDevice with the
shared typed action contract; in WorkspaceListView+MacSelection.swift (lines
182-184), render Add Computer from that contract. In
WorkspaceGroupHeaderRowValue.swift (lines 3-15), replace parallel can* fields
with typed available actions; in WorkspaceGroupHeaderRowActions.swift (lines
3-11), provide a nonoptional dispatcher or enforce paired construction; and in
WorkspaceGroupHeaderRow.swift (lines 137-232), derive menu and confirmation
visibility and invocation from the same contract so unavailable actions cannot
be rendered or dispatched.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: ef848c3e-ae4f-4cff-8533-9b08097979ca

📥 Commits

Reviewing files that changed from the base of the PR and between 4daa937 and 59996df.

📒 Files selected for processing (54)
  • Packages/iOS/CmuxAgentChatUI/Sources/CmuxAgentChatUI/Artifacts/ChatArtifactFileActionPresentation.swift
  • Packages/iOS/CmuxAgentChatUI/Sources/CmuxAgentChatUI/Artifacts/ChatArtifactViewerActionsMenu.swift
  • Packages/iOS/CmuxAgentChatUI/Sources/CmuxAgentChatUI/Artifacts/ChatArtifactViewerActionsMenuActions.swift
  • Packages/iOS/CmuxAgentChatUI/Sources/CmuxAgentChatUI/Artifacts/ChatArtifactViewerActionsMenuValue.swift
  • Packages/iOS/CmuxAgentChatUI/Sources/CmuxAgentChatUI/Artifacts/ChatArtifactViewerFileActionState.swift
  • Packages/iOS/CmuxAgentChatUI/Sources/CmuxAgentChatUI/Artifacts/ChatArtifactViewerPageSnapshot.swift
  • Packages/iOS/CmuxAgentChatUI/Sources/CmuxAgentChatUI/Artifacts/ChatArtifactViewerPager.swift
  • Packages/iOS/CmuxAgentChatUI/Sources/CmuxAgentChatUI/Artifacts/ChatArtifactViewerPagerModel.swift
  • Packages/iOS/CmuxAgentChatUI/Sources/CmuxAgentChatUI/Artifacts/ChatArtifactViewerState.swift
  • Packages/iOS/CmuxAgentChatUI/Sources/CmuxAgentChatUI/Transcript/ChatMessageRowView.swift
  • Packages/iOS/CmuxAgentChatUI/Sources/CmuxAgentChatUI/Transcript/Rows/ChatProseBubbleView.swift
  • Packages/iOS/CmuxAgentChatUI/Tests/CmuxAgentChatUITests/ChatArtifactViewerPagerModelTests.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/AgentChatDemoScreen.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/NotificationFeedPreviewView.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/NotificationFeedRow.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/NotificationFeedView.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TaskComposer/TaskComposerAgentMenu.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TaskComposer/TaskComposerAgentMenuActions.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TaskComposer/TaskComposerAgentMenuValue.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TaskComposer/TaskComposerContextSection.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TaskComposer/TaskComposerMachineMenu.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TaskComposer/TaskComposerMachineMenuActions.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TaskComposer/TaskComposerMachineMenuValue.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TaskComposer/TaskComposerPromptCard.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TaskComposer/TaskComposerSheet.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TerminalArtifactFilesSheet+Content.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TerminalArtifactGalleryItemActions.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TerminalArtifactGalleryItemValue.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TerminalArtifactGalleryItemView.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TerminalArtifactGallerySortMenu.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TerminalArtifactGallerySortMenuActions.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/TerminalArtifactGallerySortMenuValue.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceDetailView.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceGroupHeaderRow.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceGroupHeaderRowActions.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceGroupHeaderRowValue.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceListFilterControls.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceListFilterMenuActions.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceListNewWorkspaceMenu.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceListNewWorkspaceMenuActions.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceListNewWorkspaceMenuValue.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceListTableCoordinator.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceListView+Actions.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceListView+MacSelection.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceListView+Toolbar.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceListView.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceMacTitlePickerActions.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceMacTitlePickerValue.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceShellView.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceTitleMenu.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceTitleMenuContent.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceTitleMenuLabelToken.swift
  • Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceTitleMenuValue.swift
  • Packages/iOS/CmuxMobileShellUI/Tests/CmuxMobileShellUITests/WorkspaceTitleMenuValueTests.swift

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.

1 participant