diff --git a/.github/swift-file-length-budget.tsv b/.github/swift-file-length-budget.tsv index 6d74a5196f7..8f90577b1ae 100644 --- a/.github/swift-file-length-budget.tsv +++ b/.github/swift-file-length-budget.tsv @@ -2,12 +2,11 @@ # Format: max_linesrelative path # Reduce counts as files shrink. CI fails if tracked files exceed this budget. 33266 CLI/cmux.swift -518 Packages/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Surface/ControlCommandCoordinator+Surface.swift -14774 Sources/TerminalController.swift 19955 Sources/Workspace.swift 19256 Sources/ContentView.swift 18021 Sources/AppDelegate.swift 16539 Sources/GhosttyTerminalView.swift +14774 Sources/TerminalController.swift 13608 Sources/Panels/BrowserPanel.swift 11916 cmuxTests/AppDelegateShortcutRoutingTests.swift 9992 Sources/TabManager.swift @@ -17,8 +16,8 @@ 6948 cmuxTests/WorkspaceRemoteConnectionTests.swift 6542 cmuxTests/GhosttyConfigTests.swift 6299 cmuxTests/TerminalAndGhosttyTests.swift +6230 CLI/cmux_open.swift 6220 cmuxTests/SessionPersistenceTests.swift -6153 CLI/cmux_open.swift 6071 Sources/TextBoxInput.swift 5482 cmuxTests/BrowserConfigTests.swift 5448 Sources/cmuxApp.swift @@ -34,15 +33,15 @@ 3396 Sources/CmuxConfig.swift 3316 cmuxTests/TabManagerSessionSnapshotTests.swift 3202 Sources/Update/UpdateTitlebarAccessory.swift +2977 cmuxTests/CMUXOpenCommandTests.swift 2877 Sources/SessionIndexView.swift -2871 cmuxTests/CMUXOpenCommandTests.swift 2565 Sources/Panels/CmuxWebView.swift 2545 cmuxTests/WorkspaceManualUnreadTests.swift +2533 Sources/KeyboardShortcutSettings.swift 2527 Sources/TerminalNotificationStore.swift 2513 cmuxTests/CommandPaletteSearchEngineTests.swift -2509 Sources/KeyboardShortcutSettings.swift -2327 cmuxTests/CJKIMEInputTests.swift 2340 Sources/Mobile/MobileHostService.swift +2327 cmuxTests/CJKIMEInputTests.swift 2290 Sources/FileExplorerView.swift 2260 Sources/TerminalWindowPortal.swift 2138 Sources/SessionPersistence.swift @@ -99,6 +98,7 @@ 866 Sources/CommandPalette/CommandPaletteSettingsToggle.swift 864 Sources/Panels/TerminalPanel.swift 856 Packages/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/AppSection.swift +852 Packages/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Workspace/ControlCommandCoordinator+Workspace.swift 846 cmuxTests/AgentSessionAutoResumeSettingsTests.swift 845 cmuxTests/SSHStartupSignalLifecycleTests.swift 842 Sources/Panels/MarkdownWebRenderer.swift @@ -112,6 +112,7 @@ 757 Packages/CmuxAuthRuntime/Sources/CmuxAuthRuntime/Coordinator/AuthCoordinator.swift 756 Sources/Panels/AgentSessionWebRendererCoordinator.swift 752 cmuxUITests/CloseWorkspaceCmdDUITests.swift +750 Sources/TerminalController+ControlWorkspaceContext.swift 739 Sources/App/MenuBarExtraController.swift 738 Packages/CMUXProjectModel/Sources/CMUXProjectModel/XcodeProjectAdapter.swift 716 Sources/TaskManagerSnapshot.swift @@ -143,6 +144,7 @@ 619 cmuxTests/FinderFileDropRegressionTests.swift 614 cmuxTests/SessionIndexViewTests.swift 613 Sources/PortScanner.swift +611 Sources/TerminalController+ControlPaneContext.swift 599 Packages/CMUXAgentLaunch/Sources/CMUXAgentLaunch/AgentLaunchSanitizerPrimaryPolicies.swift 599 Sources/SettingsNavigation.swift 596 cmuxTests/CmuxEventBusTests.swift @@ -168,6 +170,7 @@ 539 CLI/CodexTeamsApprovalBridge.swift 538 CLI/CMUXCLI+Themes.swift 536 cmuxTests/CmuxConfigContextMenuTests.swift +533 Packages/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Pane/ControlCommandCoordinator+Pane.swift 531 Packages/CmuxSettingsUI/Sources/CmuxSettingsUI/Scene/SettingsWindowScene.swift 528 cmuxTests/CLINotifyProcessTestSupport.swift 528 cmuxUITests/AutomationSocketUITests.swift @@ -176,6 +179,7 @@ 520 CLI/CMUXCLI+AmpExtension.swift 520 cmuxTests/MainWindowVisibilityControllerTests.swift 519 Packages/CmuxSwiftRender/Tests/CmuxSwiftRenderTests/Corpus/stress-two-column-cockpit-sidebar.swift +518 Packages/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Surface/ControlCommandCoordinator+Surface.swift 518 Packages/CmuxSwiftRender/Tests/CmuxSwiftRenderTests/Corpus/stress-git-review-queue-command-deck.swift 516 Sources/CmuxConfigExecutor.swift 514 Packages/CmuxSwiftRender/Sources/CmuxSwiftRender/ExpressionEvaluator.swift @@ -187,11 +191,3 @@ 504 cmuxTests/TerminalNotificationSocketActionTests.swift 502 Sources/CmuxEventPublishing.swift 502 Sources/Settings/ConfigSource.swift -611 Sources/TerminalController+ControlPaneContext.swift -533 Packages/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Pane/ControlCommandCoordinator+Pane.swift -852 Packages/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Workspace/ControlCommandCoordinator+Workspace.swift -756 Sources/TerminalController+ControlWorkspaceContext.swift -645 Packages/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Browser/ControlCommandCoordinator+BrowserAutomationActions.swift -642 Packages/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Browser/ControlCommandCoordinator+Browser3.swift -595 Packages/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Browser/ControlCommandCoordinator+BrowserAutomation.swift -563 Packages/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Browser/ControlCommandCoordinator+BrowserAutomationFind.swift diff --git a/CLI/cmux_open.swift b/CLI/cmux_open.swift index 2f026fd425f..0674a6eac4c 100644 --- a/CLI/cmux_open.swift +++ b/CLI/cmux_open.swift @@ -465,6 +465,10 @@ extension CMUXCLI { case scrollToBottom = "diffViewerScrollToBottom" case scrollToTop = "diffViewerScrollToTop" case openFileSearch = "diffViewerOpenFileSearch" + case nextHunk = "diffViewerNextHunk" + case prevHunk = "diffViewerPrevHunk" + case nextFile = "diffViewerNextFile" + case prevFile = "diffViewerPrevFile" var defaultShortcut: DiffViewerShortcut { switch self { @@ -481,6 +485,14 @@ extension CMUXCLI { ) case .openFileSearch: return DiffViewerShortcut(first: DiffViewerShortcutStroke(key: "/")) + case .nextHunk: + return DiffViewerShortcut(first: DiffViewerShortcutStroke(key: "n")) + case .prevHunk: + return DiffViewerShortcut(first: DiffViewerShortcutStroke(key: "p")) + case .nextFile: + return DiffViewerShortcut(first: DiffViewerShortcutStroke(key: "]")) + case .prevFile: + return DiffViewerShortcut(first: DiffViewerShortcutStroke(key: "[")) } } } @@ -1267,9 +1279,55 @@ extension CMUXCLI { if let rawLayout { return (try parseDiffViewerLayout(rawLayout, errorMessage: "--layout must be split|unified"), "explicit") } + // The user's last in-viewer layout choice (persisted by the app's + // viewerPrefs bridge) wins over the settings-file default, so new diff + // panels open the way the user last left one (#5284). + if let persisted = persistedDiffViewerPreferences()["layout"] as? String { + return (persisted, "default") + } return (diffViewerDefaultLayoutSetting() ?? "unified", "default") } + /// Reads the diff viewer display preferences persisted by the app + /// (`~/Library/Application Support/cmux/diff-viewer/preferences.json`), + /// sanitized to known keys/values. Returns an empty dictionary when the + /// file is missing or unreadable. + private func persistedDiffViewerPreferences() -> [String: Any] { + let fileURL: URL + if let override = ProcessInfo.processInfo.environment["CMUX_DIFF_VIEWER_PREFS_PATH"], + !override.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + fileURL = URL(fileURLWithPath: override, isDirectory: false) + } else if let appSupport = FileManager.default.urls( + for: .applicationSupportDirectory, + in: .userDomainMask + ).first { + fileURL = appSupport + .appendingPathComponent("cmux", isDirectory: true) + .appendingPathComponent("diff-viewer", isDirectory: true) + .appendingPathComponent("preferences.json", isDirectory: false) + } else { + return [:] + } + guard let data = try? Data(contentsOf: fileURL), + let object = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else { + return [:] + } + var sanitized: [String: Any] = [:] + if let layout = object["layout"] as? String, layout == "split" || layout == "unified" { + sanitized["layout"] = layout + } + if let indicators = object["diffIndicators"] as? String, + indicators == "bars" || indicators == "classic" || indicators == "none" { + sanitized["diffIndicators"] = indicators + } + for key in ["wordWrap", "wordDiffs", "lineNumbers", "showBackgrounds", "expandUnchanged"] { + if let value = object[key] as? Bool { + sanitized[key] = value + } + } + return sanitized + } + private func parseDiffViewerLayout(_ rawValue: String, errorMessage: String) throws -> String { let normalized = rawValue .trimmingCharacters(in: .whitespacesAndNewlines) @@ -1436,7 +1494,15 @@ extension CMUXCLI { let sourceLabel: String switch source { case .unstaged: - patch = try gitStdout(gitDiffPatchArguments(["--"]), in: repoRoot) + // Untracked files are part of the unstaged working-tree state but + // plain `git diff` omits them, which silently hides files agents + // just created. Append an added-file patch per untracked path. + patch = try joinedGitDiffPatches( + [gitStdout(gitDiffPatchArguments(["--"]), in: repoRoot)] + + gitUntrackedPaths(in: repoRoot).map { path in + try gitAddedUntrackedPatch(path: path, in: repoRoot) + } + ) sourceLabel = "git unstaged" case .staged: patch = try gitStdout(gitDiffPatchArguments(["--cached", "--"]), in: repoRoot) @@ -3888,10 +3954,14 @@ extension CMUXCLI { try? writeDiffViewerEmptyStatePage(message: error.message, page: page, sourceSet: sourceSet) completion.completedPageURLs.insert(page.url) return completion - } catch is EmptyDiffSourceError { + } catch { + // A fallback candidate that cannot be read (empty, or e.g. + // last-turn without a workspace/surface context) is skipped; + // only the originally selected source's own failure may + // surface. Otherwise `cmux diff --unstaged` in a clean repo + // outside a cmux terminal dead-ends on a raw last-turn + // context error instead of the friendly empty state (#5246). continue - } catch let fallbackError { - throw fallbackError } } // No source has changes: render the selected source's friendly empty @@ -5633,6 +5703,13 @@ extension CMUXCLI { "baseOptions": baseOptions.map(\.jsonObject), "generatedAt": ISO8601DateFormatter().string(from: Date()) ] + // Persisted display toggles (word wrap, line numbers, …) seed the + // page's initial options so first paint matches the user's last + // session; the page then re-syncs live through the viewerPrefs bridge. + let viewerOptions = persistedDiffViewerPreferences().filter { $0.key != "layout" } + if !viewerOptions.isEmpty { + payload["viewerOptions"] = viewerOptions + } if let statusMessage { payload["statusMessage"] = statusMessage payload["statusIsError"] = statusIsError diff --git a/Packages/CmuxSettings/Sources/CmuxSettings/Values/ShortcutAction+Defaults.swift b/Packages/CmuxSettings/Sources/CmuxSettings/Values/ShortcutAction+Defaults.swift index de432eef010..c4fb454d564 100644 --- a/Packages/CmuxSettings/Sources/CmuxSettings/Values/ShortcutAction+Defaults.swift +++ b/Packages/CmuxSettings/Sources/CmuxSettings/Values/ShortcutAction+Defaults.swift @@ -113,6 +113,10 @@ extension ShortcutAction { case .diffViewerScrollToBottom: return ShortcutStroke(key: "g", shift: true) case .diffViewerScrollToTop: return nil case .diffViewerOpenFileSearch: return ShortcutStroke(key: "/") + case .diffViewerNextHunk: return ShortcutStroke(key: "n") + case .diffViewerPrevHunk: return ShortcutStroke(key: "p") + case .diffViewerNextFile: return ShortcutStroke(key: "]") + case .diffViewerPrevFile: return ShortcutStroke(key: "[") } } } diff --git a/Packages/CmuxSettings/Sources/CmuxSettings/Values/ShortcutAction.swift b/Packages/CmuxSettings/Sources/CmuxSettings/Values/ShortcutAction.swift index c08e225d7e8..de159eedf4f 100644 --- a/Packages/CmuxSettings/Sources/CmuxSettings/Values/ShortcutAction.swift +++ b/Packages/CmuxSettings/Sources/CmuxSettings/Values/ShortcutAction.swift @@ -117,6 +117,14 @@ public enum ShortcutAction: String, CaseIterable, Sendable, Hashable, SettingCod case diffViewerScrollToTop /// Opens file search inside the focused diff viewer. case diffViewerOpenFileSearch + /// Jumps to the next hunk in the focused diff viewer. + case diffViewerNextHunk + /// Jumps to the previous hunk in the focused diff viewer. + case diffViewerPrevHunk + /// Jumps to the next file in the focused diff viewer. + case diffViewerNextFile + /// Jumps to the previous file in the focused diff viewer. + case diffViewerPrevFile } extension ShortcutAction { @@ -171,7 +179,8 @@ extension ShortcutAction { .hideFind, .useSelectionForFind, .toggleBrowserDeveloperTools, .showBrowserJavaScriptConsole, .toggleBrowserFocusMode, .toggleReactGrab, .diffViewerScrollDown, .diffViewerScrollUp, .diffViewerScrollToBottom, - .diffViewerScrollToTop, .diffViewerOpenFileSearch: + .diffViewerScrollToTop, .diffViewerOpenFileSearch, + .diffViewerNextHunk, .diffViewerPrevHunk, .diffViewerNextFile, .diffViewerPrevFile: return .browser } } @@ -207,7 +216,11 @@ extension ShortcutAction { .diffViewerScrollUp, .diffViewerScrollToBottom, .diffViewerScrollToTop, - .diffViewerOpenFileSearch: + .diffViewerOpenFileSearch, + .diffViewerNextHunk, + .diffViewerPrevHunk, + .diffViewerNextFile, + .diffViewerPrevFile: return true default: return false @@ -234,7 +247,8 @@ extension ShortcutAction { .toggleBrowserDeveloperTools, .showBrowserJavaScriptConsole, .browserZoomIn, .browserZoomOut, .browserZoomReset, .toggleBrowserFocusMode, .diffViewerScrollDown, .diffViewerScrollUp, .diffViewerScrollToBottom, - .diffViewerScrollToTop, .diffViewerOpenFileSearch: + .diffViewerScrollToTop, .diffViewerOpenFileSearch, + .diffViewerNextHunk, .diffViewerPrevHunk, .diffViewerNextFile, .diffViewerPrevFile: return .atom(.browserFocus) case .markdownZoomIn, .markdownZoomOut, .markdownZoomReset: return .atom(.markdownFocus) @@ -364,6 +378,14 @@ extension ShortcutAction { return String(localized: "shortcut.diffViewerScrollToTop.label", defaultValue: "Diff Viewer: Scroll to Top") case .diffViewerOpenFileSearch: return String(localized: "shortcut.diffViewerOpenFileSearch.label", defaultValue: "Diff Viewer: Open File Search") + case .diffViewerNextHunk: + return String(localized: "shortcut.diffViewerNextHunk.label", defaultValue: "Diff Viewer: Next Hunk") + case .diffViewerPrevHunk: + return String(localized: "shortcut.diffViewerPrevHunk.label", defaultValue: "Diff Viewer: Previous Hunk") + case .diffViewerNextFile: + return String(localized: "shortcut.diffViewerNextFile.label", defaultValue: "Diff Viewer: Next File") + case .diffViewerPrevFile: + return String(localized: "shortcut.diffViewerPrevFile.label", defaultValue: "Diff Viewer: Previous File") } } } diff --git a/Packages/CmuxSettings/Tests/CmuxSettingsTests/ShortcutActionNumberedDigitTests.swift b/Packages/CmuxSettings/Tests/CmuxSettingsTests/ShortcutActionNumberedDigitTests.swift index 224f0a58ebc..e3d24e1c44e 100644 --- a/Packages/CmuxSettings/Tests/CmuxSettingsTests/ShortcutActionNumberedDigitTests.swift +++ b/Packages/CmuxSettings/Tests/CmuxSettingsTests/ShortcutActionNumberedDigitTests.swift @@ -29,6 +29,10 @@ struct ShortcutActionNumberedDigitTests { .diffViewerScrollToBottom, .diffViewerScrollToTop, .diffViewerOpenFileSearch, + .diffViewerNextHunk, + .diffViewerPrevHunk, + .diffViewerNextFile, + .diffViewerPrevFile, ] for action in ShortcutAction.allCases { diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index c6984ff791f..a0ad034d5e9 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -1751,6 +1751,506 @@ } } }, + "shortcut.diffViewerNextFile.label": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "差分ビューア: 次のファイル" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next File" + } + } + } + }, + "shortcut.diffViewerNextHunk.label": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "差分ビューア: 次のハンク" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + } + } + }, + "shortcut.diffViewerPrevFile.label": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "差分ビューア: 前のファイル" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous File" + } + } + } + }, + "shortcut.diffViewerPrevHunk.label": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "差分ビューア: 前のハンク" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + } + } + }, "shortcut.markdownZoomIn.label": { "extractionState": "manual", "localizations": { diff --git a/Resources/markdown-viewer/webviews-app/chunks/diffSurface.mjs b/Resources/markdown-viewer/webviews-app/chunks/diffSurface.mjs index 5416ce951bc..6739e2a4435 100644 --- a/Resources/markdown-viewer/webviews-app/chunks/diffSurface.mjs +++ b/Resources/markdown-viewer/webviews-app/chunks/diffSurface.mjs @@ -1,18 +1,18 @@ -import{b as I,i as B,j as s,c as lt,a as ct}from"./vendor.mjs";import{W as dt,C as ft,d as ut,u as mt,r as De,b as Ie,F as pt,c as ht,p as gt,a as xt,g as bt}from"./diff-vendor.mjs";import{m as vt,i as wt,c as yt}from"./installWebviewStyles.mjs";function kt(t){try{const e=new URL(t,window.location.href);if(window.location.protocol==="cmux-diff-viewer:"&&(e.protocol==="http:"||e.protocol==="https:")){const r=e.pathname.split("/").filter(Boolean).slice(1).join("/");return`cmux-diff-viewer://${window.location.host}/${r}`}return e.href}catch{return t}}async function St(t,e,r){if(!t)throw new Error("Missing patch URL");const i=await fetch(t,{cache:"no-store"});if(!i.ok)throw new Error(`${e("loadingDiff")} (${i.status})`);const n=await i.text(),o=` -`,a=n.endsWith(o)?n:`${n}${o}`,d=jt(a),l=`git apply <<'${d}'${o}${a}${d}`;if(navigator.clipboard?.writeText)try{return await navigator.clipboard.writeText(l),e("copiedGitApplyCommand")}catch{}if(!r)throw new Error("Clipboard API unavailable");if(r.value=l,r.select(),!document.execCommand("copy"))throw new Error("Clipboard copy failed");return e("copiedGitApplyCommand")}function jt(t){const e=new Set(t.split(/\r?\n/));let r="CMUX_DIFF_PATCH",i=0;for(;e.has(r);)i+=1,r=`CMUX_DIFF_PATCH_${i}`;return r}const ye={background:"#ffffff",foreground:"#000000",ghosttyName:"Apple System Colors Light",name:"cmux-ghostty-light",palette:{},selectionBackground:"#abd8ff",selectionForeground:"#000000",type:"light"},ke={background:"#000000",foreground:"#ffffff",ghosttyName:"Apple System Colors",name:"cmux-ghostty-dark",palette:{},selectionBackground:"#3f638b",selectionForeground:"#ffffff",type:"dark"};function Pe(t){const e={...ye,...t?.themes?.light},r={...ke,...t?.themes?.dark};return e.foreground=se(e.foreground,e.background,ye.foreground),e.selectionForeground=se(e.selectionForeground,e.selectionBackground,ye.selectionForeground),r.foreground=se(r.foreground,r.background,ke.foreground),r.selectionForeground=se(r.selectionForeground,r.selectionBackground,ke.selectionForeground),{backgroundOpacity:Fe(t?.backgroundOpacity),fontFamily:t?.fontFamily??"Menlo",fontSize:xe(t?.fontSize,10),lineHeight:xe(t?.lineHeight,20),theme:{light:t?.theme?.light??e.name??"cmux-ghostty-light",dark:t?.theme?.dark??r.name??"cmux-ghostty-dark"},themes:{light:e,dark:r}}}function Ct(t){if(!t)return;const e=t.themes?.light??{},r=t.themes?.dark??{},i=document.documentElement.style;i.setProperty("--cmux-diff-bg-light",H(e.background,"#ffffff")),i.setProperty("--cmux-diff-bg-dark",H(r.background,"#000000"));const n=Fe(t.backgroundOpacity)>=.999;i.setProperty("--cmux-diff-surface-fill-light",n?H(e.background,"#ffffff"):"transparent"),i.setProperty("--cmux-diff-surface-fill-dark",n?H(r.background,"#000000"):"transparent"),i.setProperty("--cmux-diff-fg-light",H(e.foreground,"#000000")),i.setProperty("--cmux-diff-fg-dark",H(r.foreground,"#ffffff")),i.setProperty("--cmux-diff-addition-fg-light",ue(e,["10","2"],"#257a3e")),i.setProperty("--cmux-diff-addition-fg-dark",ue(r,["10","2"],"#8fd88f")),i.setProperty("--cmux-diff-deletion-fg-light",ue(e,["9","1"],"#b42318")),i.setProperty("--cmux-diff-deletion-fg-dark",ue(r,["9","1"],"#ff8a80")),i.setProperty("--cmux-diff-selection-bg-light",H(e.selectionBackground,"#abd8ff")),i.setProperty("--cmux-diff-selection-bg-dark",H(r.selectionBackground,"#3f638b")),i.setProperty("--cmux-diff-code-font-family",Mt(t.fontFamily)),i.setProperty("--cmux-diff-font-size",`${xe(t.fontSize,10)}px`),i.setProperty("--cmux-diff-line-height",`${xe(t.lineHeight,20)}px`)}function It(t,e){return Fe(e?.backgroundOpacity)<.999?"transparent":H(t,"#000000")}function se(t,e,r){const i=H(t,r??"#000000"),n=be(i),o=be(H(e,"#000000"));if(!n||!o||ge(n,o)>=4.5)return i;const a={blue:0,green:0,red:0},d={blue:255,green:255,red:255};return ge(a,o)>=ge(d,o)?"#000000":"#ffffff"}function ue(t,e,r){const i=t.palette??{},n=e.map(o=>i[o]).find(o=>typeof o=="string"&&o.trim()!=="");return Ne(n,t.background,4.5)?H(n,r):Ne(r,t.background,4.5)?r:se(n,t.background,r)}function H(t,e){return typeof t=="string"&&t.trim()!==""?t.trim():e}function Mt(t){const e=typeof t=="string"&&t.trim()!==""?t.trim():"Menlo";return`${JSON.stringify(e)}, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace`}function xe(t,e){return typeof t=="number"&&Number.isFinite(t)&&t>0?t:e}function Fe(t){return typeof t!="number"||!Number.isFinite(t)?1:Math.max(0,Math.min(1,t))}function Ne(t,e,r){const i=be(H(t,"")),n=be(H(e,"#000000"));return!!(i&&n&&ge(i,n)>=r)}function be(t){const e=t.trim(),r=e.match(/^#([0-9a-f]{3})$/i);if(r){const[,o]=r;return{red:Number.parseInt(o[0]+o[0],16),green:Number.parseInt(o[1]+o[1],16),blue:Number.parseInt(o[2]+o[2],16)}}const i=e.match(/^#([0-9a-f]{6})$/i);if(!i)return null;const[,n]=i;return{red:Number.parseInt(n.slice(0,2),16),green:Number.parseInt(n.slice(2,4),16),blue:Number.parseInt(n.slice(4,6),16)}}function ge(t,e){const r=Math.max(me(t),me(e)),i=Math.min(me(t),me(e));return(r+.05)/(i+.05)}function me(t){return .2126*Se(t.red)+.7152*Se(t.green)+.0722*Se(t.blue)}function Se(t){const e=t/255;return e<=.03928?e/12.92:((e+.055)/1.055)**2.4}const Ke=40;function _e(t,e){return e==="additions"?{start:t.additionStart,count:t.additionCount,lineIndex:t.additionLineIndex}:{start:t.deletionStart,count:t.deletionCount,lineIndex:t.deletionLineIndex}}function de(t,e){return(t[e]??"").replace(/\r?\n$/,"")}function qe(t,e){const r=e==="additions"?t?.additionLines:t?.deletionLines;return Array.isArray(r)?r:[]}function Pt(t,e,r){if(t?.hunks==null||!Number.isFinite(r))return null;for(const i of t.hunks){const{start:n,count:o,lineIndex:a}=_e(i,e);if(r>=n&&r=c.start+c.count||f.hunkContent==null)continue;let u=f.additionStart,m=f.deletionStart;for(const p of f.hunkContent){if(p.type==="context"){for(let h=0;h=n&&k<=o&&l.push(` ${de(a,p.additionLineIndex+h)}`)}u+=p.lines,m+=p.lines;continue}if(e==="additions"?p.additions>0&&u<=o&&u+p.additions-1>=n:p.deletions>0&&m<=o&&m+p.deletions-1>=n){for(let h=0;h=8&&e.pendingItems.length=S||y-o>=j)&&(m(),await Oe(),n=performance.now())}function m(){if(e.pendingItems.length===0)return;const x=e.pendingItems.splice(0,e.pendingItems.length);e.pendingItemById.clear(),e.items.push(...x),t.onBatch(x),r.flushCount+=1,r.maxBatchSize=Math.max(r.maxBatchSize,x.length),r.fileCount=e.items.length,r.renderableFileCount=e.items.length,p(),t.onMetrics({...r}),o=performance.now(),i=!1}function p(){r.treeRefreshCount+=1,t.onTreeSource(Nt(e))}async function g(x){if(x.trim()==="")return;const y=Ot(x);y!=null&&(a=Ye(y,d,t.label),d+=1);const S=`cmux-diff-file-${e.fileIndex}`;await c(t.processFile(x,{cacheKey:S,isGitDiff:!0}),a)}const h=await fetch(t.patchURL,{cache:"no-store"});if(!h.ok)throw new Error(`${t.label("loadingDiff")} (${h.status})`);if(!h.body?.getReader){const x=await h.text();await Ee(x,t,c),await u(!0),r.completedAt=performance.now(),t.onComplete({...r});return}const k=new TextDecoder,b=h.body.getReader(),w=At();for(;;){const{done:x,value:y}=await b.read();if(x){const S=k.decode();S.length>0&&(w.push(S),await je(w,g));break}w.push(k.decode(y,{stream:!0})),await je(w,g)}const v=w.finish();v.fileText!=null?(await g(v.fileText),await je(w,g)):v.fallbackPatchContent!=null&&await Ee(v.fallbackPatchContent,t,c),await u(!0),r.completedAt=performance.now(),t.onMetrics({...r}),t.onComplete({...r})}function Tt(){return{diffStats:{addedLines:0,deletedLines:0,fileCount:0,totalLinesOfCode:0},fileIndex:0,gitStatusByPath:new Map,itemIdToFile:new Map,itemIdByTreePath:new Map,nextCollisionSuffixByBase:new Map,items:[],pathStateByTreePath:new Map,paths:[],pathToItemId:new Map,pendingGitStatusRemovePaths:new Set,pendingGitStatusSetByPath:new Map,pendingItems:[],pendingItemById:new Map,pendingStatsChanged:!1,statsByPath:new Map,treePathByItemId:new Map}}function Lt(t,e,r,i,n){if(!e)return null;const o=le(e,n),a=r==null?o:`${r}/${o}`,d=o.length===0?void 0:t.pathStateByTreePath.get(a),l=d==null?void 0:zt(t,a,d),f=Vt(e),u={id:d!=null||t.itemIdToFile.has(a)?Xe(t,`${a}?2`):a,type:"diff",fileDiff:e,version:0,collapsed:i},m=t.items.length+t.pendingItems.length;t.fileIndex+=1,t.pendingItems.push(u),t.pendingItemById.set(u.id,u),t.itemIdToFile.set(u.id,{fileOrder:m,path:o}),t.itemIdByTreePath.set(a,u.id),t.treePathByItemId.set(u.id,a),t.diffStats.addedLines+=f.added,t.diffStats.deletedLines+=f.deleted,t.diffStats.fileCount+=1,t.diffStats.totalLinesOfCode+=e.unifiedLineCount??e.splitLineCount??0;const p=t.statsByPath.get(a);return t.statsByPath.set(a,f),d!=null&&!Wt(p,f)&&(t.pendingStatsChanged=!0),o.length>0&&(d==null&&t.paths.push(a),t.pathToItemId.set(a,u.id),Dt(t,a,e.type,d?.sawDeleted===!0),t.pathStateByTreePath.set(a,{currentItem:u,currentItemId:u.id,currentType:e.type,fileOrder:m,sawDeleted:d?.sawDeleted===!0||e.type==="deleted"})),{item:u,renamedItem:l}}function zt(t,e,r){const i=r.currentItemId,n=r.currentType==="deleted"?"?deleted":"?previous",o=Xe(t,`${e}${n}`),a={...r.currentItem,id:o};r.currentItem=a,r.currentItemId=o,Re(t.items,i,a);const d=t.itemIdToFile.get(i);if(d&&(t.itemIdToFile.delete(i),t.itemIdToFile.set(o,d)),t.treePathByItemId.has(i)&&(t.treePathByItemId.delete(i),t.treePathByItemId.set(o,e)),t.pendingItemById.has(i)){Re(t.pendingItems,i,a),t.pendingItemById.delete(i),t.pendingItemById.set(o,a);return}return{oldId:i,newId:o}}function Re(t,e,r){const i=t.findIndex(n=>n.id===e);i!==-1&&(t[i]=r)}function Xe(t,e){if(!t.itemIdToFile.has(e))return e;let r=t.nextCollisionSuffixByBase.get(e)??2,i=`${e}-${r}`;for(;t.itemIdToFile.has(i);)r+=1,i=`${e}-${r}`;return t.nextCollisionSuffixByBase.set(e,r+1),i}function Dt(t,e,r,i){if(i&&r!=="deleted"){t.gitStatusByPath.delete(e)&&Ae(t,e);return}const n=Ut(r);if(n==="modified"){t.gitStatusByPath.delete(e)&&Ae(t,e);return}if(t.gitStatusByPath.get(e)?.status===n)return;const a={path:e,status:n};t.gitStatusByPath.set(e,a),t.pendingGitStatusRemovePaths.delete(e),t.pendingGitStatusSetByPath.set(e,a)}function Ae(t,e){t.pendingGitStatusSetByPath.delete(e),t.pendingGitStatusRemovePaths.add(e)}function Nt(t){const e=t.lastTreeSource,r=[...t.paths],i={diffStats:{...t.diffStats},gitStatus:Array.from(t.gitStatusByPath.values()),gitStatusPatch:Rt(t),pathCount:r.length,paths:r,pathToItemId:new Map(t.pathToItemId),previousSource:e,statsChanged:t.pendingStatsChanged,statsByPath:new Map(t.statsByPath),treePathByItemId:new Map(t.treePathByItemId)};return t.pendingStatsChanged=!1,t.lastTreeSource=i,i}function Rt(t){if(t.pendingGitStatusRemovePaths.size===0&&t.pendingGitStatusSetByPath.size===0)return;const e={};return t.pendingGitStatusRemovePaths.size>0&&(e.remove=Array.from(t.pendingGitStatusRemovePaths),t.pendingGitStatusRemovePaths.clear()),t.pendingGitStatusSetByPath.size>0&&(e.set=Array.from(t.pendingGitStatusSetByPath.values()),t.pendingGitStatusSetByPath.clear()),e}async function Ee(t,e,r){const i=e.parsePatchFiles(t,"cmux-diff"),n=i.length>1;for(const[o,a]of i.entries()){const d=n?Ye(a.patchMetadata,o,e.label):void 0;for(const l of a.files??[])await r(l,d)}}function At(){let t,e="",r=0,i=!1;const n="diff --git ",o=` -`+n,a=o.length-1,d=/\S/;function l(u,m){const p=Math.max(m,0);if(p===0&&u.startsWith(n))return 0;const g=u.indexOf(o,p);return g===-1?void 0:g+1}function f(u,m){return Math.max(m,u.length-a)}function c(){if(t==null){if(t=l(e,r),t==null)return r=f(e,0),null;i=!0,r=t+1}for(;;){const u=t;if(u==null)return null;const m=l(e,r);if(m==null)return r=f(e,u+1),null;const p=Et(e,u+1,m)??m,g=e.slice(0,p);if(e=e.slice(p),t=l(e,0),r=t==null?0:t+1,d.test(g))return g}}return{push(u){u.length>0&&(e+=u)},takeAvailableFile:c,finish(){const u=c();if(u!=null)return{fileText:u};if(!d.test(e))return e="",{};if(!i){const p=e;return e="",{fallbackPatchContent:p}}const m=e;return e="",{fileText:m}}}}async function je(t,e){let r;for(;(r=t.takeAvailableFile())!=null;)await e(r)}function Et(t,e,r){const i=Math.max(e,0),n=Math.min(r,t.length);if(i>=n)return;let o=t.lastIndexOf(` -From `,n-1);for(;o!==-1;){const a=o+1;if(a=n){o=t.lastIndexOf(` -From `,o-1);continue}const d=t.indexOf(` -`,a+1),l=t.slice(a,d===-1||d>n?n:d);if(Te.test(l))return a;o=t.lastIndexOf(` -From `,o-1)}}function Ot(t){const e=$t(t,0);if(e==null||e<=0)return;const r=t.slice(0,e);return Te.test(r)?r:void 0}function $t(t,e){const r="diff --git ",i=` -`+r,n=Math.max(e,0);if(n===0&&t.startsWith(r))return 0;const o=t.indexOf(i,n);return o===-1?void 0:o+1}function Ye(t,e,r){const i=t?.match(Te);return i?.[1]?new TextDecoder().decode(new TextEncoder().encode(i[1].slice(0,5))):`${r("commit")} ${e+1}`}function le(t,e="Untitled"){return t.name??t.newName??t.oldName??t.prevName??e}function Vt(t){const e={added:0,deleted:0};for(const r of t.hunks??[])e.added+=r.additionLines??0,e.deleted+=r.deletionLines??0;return e}function Wt(t,e){return t?.added===e.added&&t?.deleted===e.deleted}function Ut(t){switch(t){case"new":return"added";case"deleted":return"deleted";case"rename-pure":case"rename-changed":return"renamed";default:return"modified"}}function Oe(){return new Promise(t=>{let e=!1,r=0;const i=()=>{e||(e=!0,r!==0&&window.clearTimeout(r),t())};if(document.visibilityState==="visible"&&document.hasFocus())r=window.setTimeout(i,50),window.requestAnimationFrame(i);else if(typeof MessageChannel<"u"){const n=new MessageChannel;n.port1.onmessage=i,n.port2.postMessage(void 0)}else queueMicrotask(i)})}function Qe(t,e,r){const i=[],n=t.fileDiff!=null?le(t.fileDiff,""):"";if(n!=="")for(const o of e){if(o.filePath!==n)continue;const a=Je(t.fileDiff,o);a.state!=="outdated"&&i.push({side:o.side,lineNumber:a.line,metadata:{kind:"comment",comment:o,anchor:a}})}return r!=null&&r.itemId===t.id&&i.push({side:r.side,lineNumber:r.endLine,metadata:{kind:"draft"}}),i}function Gt(t,e){return t.state!==e.state?!1:t.state==="outdated"||e.state==="outdated"?!0:t.line===e.line}function Ht(t,e){if(t.side!==e.side||t.lineNumber!==e.lineNumber)return!1;const r=t.metadata,i=e.metadata;return r.kind==="draft"||i.kind==="draft"?r.kind===i.kind:r.comment===i.comment&&Gt(r.anchor,i.anchor)}function Kt(t,e){const r=t??[];if(r.length!==e.length)return!1;for(let i=0;i{const a=Qe(o,e,r);return Kt(o.annotations,a)?o:(i=!0,{...o,annotations:a,version:(o.version??0)+1})});return i?n:t}function Jt(t,e,r=!0){return e.map(i=>{let n=null;for(const o of t){if(o.fileDiff==null||le(o.fileDiff,"")!==i.filePath)continue;const a=Je(o.fileDiff,i);if(a.state!=="outdated")return{comment:i,itemId:o.id,anchor:a,pending:!1};n??={itemId:o.id,anchor:a}}return{comment:i,itemId:n?.itemId??null,anchor:n?.anchor??{state:"outdated"},pending:n==null&&!r}})}class Me extends Error{code;constructor(e,r){super(e),this.name="DiffCommentsBridgeError",this.code=r}}function Ze(){if(typeof window>"u")return null;const t=window.webkit?.messageHandlers?.cmuxDiffComments;return t!=null&&typeof t.postMessage=="function"?t:null}function Xt(){return Ze()!=null}async function Le(t,e){const r=Ze();if(r==null)throw new Me("Diff comments bridge is unavailable.");const i=await r.postMessage({id:vt(),method:t,params:e});if(!i.ok)throw new Me(i.error?.userMessage||"Diff comments request failed.",i.error?.code);return i.value}async function Yt(t){const e=await Le("comments.list",{repoRoot:t});return Array.isArray(e?.comments)?e.comments:[]}async function $e(t,e){const r=await Le("comments.save",{repoRoot:t,comment:e});if(r?.comment==null)throw new Me("Diff comments save returned no comment.");return r.comment}async function Qt(t,e){await Le("comments.delete",{repoRoot:t,id:e})}function et(t){const e=I.c(28),{initialMessage:r,labels:i,onCancel:n,onSave:o}=t,a=r===void 0?"":r,[d,l]=B.useState(a),f=Zt;let c;e[0]===Symbol.for("react.memo_cache_sentinel")?(c=y=>l(y.currentTarget.value),e[0]=c):c=e[0];let u;e[1]!==d||e[2]!==o?(u=y=>{y.key==="Enter"&&(y.metaKey||y.ctrlKey)&&d.trim()!==""&&(y.preventDefault(),o(d))},e[1]=d,e[2]=o,e[3]=u):u=e[3];let m;e[4]!==i.addComment||e[5]!==i.commentPlaceholder||e[6]!==d||e[7]!==u?(m=s.jsx("textarea",{ref:f,className:"comment-composer-input",placeholder:i.commentPlaceholder,"aria-label":i.addComment,rows:3,value:d,onChange:c,onKeyDown:u}),e[4]=i.addComment,e[5]=i.commentPlaceholder,e[6]=d,e[7]=u,e[8]=m):m=e[8];let p;e[9]===Symbol.for("react.memo_cache_sentinel")?(p=s.jsx("span",{}),e[9]=p):p=e[9];let g;e[10]!==i.cancelComment||e[11]!==n?(g=s.jsx("button",{type:"button",className:"comment-button",onClick:n,children:i.cancelComment}),e[10]=i.cancelComment,e[11]=n,e[12]=g):g=e[12];let h;e[13]!==d?(h=d.trim(),e[13]=d,e[14]=h):h=e[14];const k=h==="";let b;e[15]!==d||e[16]!==o?(b=()=>o(d),e[15]=d,e[16]=o,e[17]=b):b=e[17];let w;e[18]!==i.saveComment||e[19]!==k||e[20]!==b?(w=s.jsx("button",{type:"button",className:"comment-button comment-button-primary",disabled:k,onClick:b,children:i.saveComment}),e[18]=i.saveComment,e[19]=k,e[20]=b,e[21]=w):w=e[21];let v;e[22]!==w||e[23]!==g?(v=s.jsxs("div",{className:"comment-composer-footer",children:[p,s.jsxs("span",{className:"comment-composer-buttons",children:[g,w]})]}),e[22]=w,e[23]=g,e[24]=v):v=e[24];let x;return e[25]!==v||e[26]!==m?(x=s.jsxs("div",{className:"comment-composer",children:[m,v]}),e[25]=v,e[26]=m,e[27]=x):x=e[27],x}function Zt(t){t?.focus()}function ei(t){const e=t.split("/"),r=e[e.length-1];return r!=null&&r!==""?r:t}function tt(t){const e=`${ei(t.filePath)}:${t.startLine}`;return t.endLine>t.startLine?`${e}-${t.endLine}`:e}function Ve(t,e){const r=t.endLine>t.startLine?`lines ${t.startLine}-${t.endLine}`:`line ${t.startLine}`,i=t.side==="deletions"?"old":"new",n=[`Review comment on ${t.filePath} ${r} (${i} version):`],o=Ft(e,t.side,t.startLine,t.endLine);if(o!=="")n.push(`\`\`\`diff +import{b as C,i as M,j as a,c as Ft,a as _t}from"./vendor.mjs";import{W as Bt,C as Tt,d as Lt,u as zt,r as et,b as We,F as Dt,c as Nt,p as Ot,a as Rt,g as Vt}from"./diff-vendor.mjs";import{m as At,i as Et,c as $t}from"./installWebviewStyles.mjs";function Wt(t){try{const e=new URL(t,window.location.href);if(window.location.protocol==="cmux-diff-viewer:"&&(e.protocol==="http:"||e.protocol==="https:")){const r=e.pathname.split("/").filter(Boolean).slice(1).join("/");return`cmux-diff-viewer://${window.location.host}/${r}`}return e.href}catch{return t}}async function Ut(t,e,r){if(!t)throw new Error("Missing patch URL");const i=await fetch(t,{cache:"no-store"});if(!i.ok)throw new Error(`${e("loadingDiff")} (${i.status})`);const n=await i.text(),o=` +`,s=n.endsWith(o)?n:`${n}${o}`,l=Gt(s),d=`git apply <<'${l}'${o}${s}${l}`;if(navigator.clipboard?.writeText)try{return await navigator.clipboard.writeText(d),e("copiedGitApplyCommand")}catch{}if(!r)throw new Error("Clipboard API unavailable");if(r.value=d,r.select(),!document.execCommand("copy"))throw new Error("Clipboard copy failed");return e("copiedGitApplyCommand")}function Gt(t){const e=new Set(t.split(/\r?\n/));let r="CMUX_DIFF_PATCH",i=0;for(;e.has(r);)i+=1,r=`CMUX_DIFF_PATCH_${i}`;return r}const Re={background:"#ffffff",foreground:"#000000",ghosttyName:"Apple System Colors Light",name:"cmux-ghostty-light",palette:{},selectionBackground:"#abd8ff",selectionForeground:"#000000",type:"light"},Ve={background:"#000000",foreground:"#ffffff",ghosttyName:"Apple System Colors",name:"cmux-ghostty-dark",palette:{},selectionBackground:"#3f638b",selectionForeground:"#ffffff",type:"dark"};function Ke(t){const e={...Re,...t?.themes?.light},r={...Ve,...t?.themes?.dark};return e.foreground=ue(e.foreground,e.background,Re.foreground),e.selectionForeground=ue(e.selectionForeground,e.selectionBackground,Re.selectionForeground),r.foreground=ue(r.foreground,r.background,Ve.foreground),r.selectionForeground=ue(r.selectionForeground,r.selectionBackground,Ve.selectionForeground),{backgroundOpacity:Je(t?.backgroundOpacity),fontFamily:t?.fontFamily??"Menlo",fontSize:Be(t?.fontSize,10),lineHeight:Be(t?.lineHeight,20),theme:{light:t?.theme?.light??e.name??"cmux-ghostty-light",dark:t?.theme?.dark??r.name??"cmux-ghostty-dark"},themes:{light:e,dark:r}}}function Ht(t){if(!t)return;const e=t.themes?.light??{},r=t.themes?.dark??{},i=document.documentElement.style;i.setProperty("--cmux-diff-bg-light",J(e.background,"#ffffff")),i.setProperty("--cmux-diff-bg-dark",J(r.background,"#000000"));const n=Je(t.backgroundOpacity)>=.999;i.setProperty("--cmux-diff-surface-fill-light",n?J(e.background,"#ffffff"):"transparent"),i.setProperty("--cmux-diff-surface-fill-dark",n?J(r.background,"#000000"):"transparent"),i.setProperty("--cmux-diff-fg-light",J(e.foreground,"#000000")),i.setProperty("--cmux-diff-fg-dark",J(r.foreground,"#ffffff")),i.setProperty("--cmux-diff-addition-fg-light",Me(e,["10","2"],"#257a3e")),i.setProperty("--cmux-diff-addition-fg-dark",Me(r,["10","2"],"#8fd88f")),i.setProperty("--cmux-diff-deletion-fg-light",Me(e,["9","1"],"#b42318")),i.setProperty("--cmux-diff-deletion-fg-dark",Me(r,["9","1"],"#ff8a80")),i.setProperty("--cmux-diff-selection-bg-light",J(e.selectionBackground,"#abd8ff")),i.setProperty("--cmux-diff-selection-bg-dark",J(r.selectionBackground,"#3f638b")),i.setProperty("--cmux-diff-code-font-family",Jt(t.fontFamily)),i.setProperty("--cmux-diff-font-size",`${Be(t.fontSize,10)}px`),i.setProperty("--cmux-diff-line-height",`${Be(t.lineHeight,20)}px`)}function Kt(t,e){return Je(e?.backgroundOpacity)<.999?"transparent":J(t,"#000000")}function ue(t,e,r){const i=J(t,r??"#000000"),n=Te(i),o=Te(J(e,"#000000"));if(!n||!o||_e(n,o)>=4.5)return i;const s={blue:0,green:0,red:0},l={blue:255,green:255,red:255};return _e(s,o)>=_e(l,o)?"#000000":"#ffffff"}function Me(t,e,r){const i=t.palette??{},n=e.map(o=>i[o]).find(o=>typeof o=="string"&&o.trim()!=="");return tt(n,t.background,4.5)?J(n,r):tt(r,t.background,4.5)?r:ue(n,t.background,r)}function J(t,e){return typeof t=="string"&&t.trim()!==""?t.trim():e}function Jt(t){const e=typeof t=="string"&&t.trim()!==""?t.trim():"Menlo";return`${JSON.stringify(e)}, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace`}function Be(t,e){return typeof t=="number"&&Number.isFinite(t)&&t>0?t:e}function Je(t){return typeof t!="number"||!Number.isFinite(t)?1:Math.max(0,Math.min(1,t))}function tt(t,e,r){const i=Te(J(t,"")),n=Te(J(e,"#000000"));return!!(i&&n&&_e(i,n)>=r)}function Te(t){const e=t.trim(),r=e.match(/^#([0-9a-f]{3})$/i);if(r){const[,o]=r;return{red:Number.parseInt(o[0]+o[0],16),green:Number.parseInt(o[1]+o[1],16),blue:Number.parseInt(o[2]+o[2],16)}}const i=e.match(/^#([0-9a-f]{6})$/i);if(!i)return null;const[,n]=i;return{red:Number.parseInt(n.slice(0,2),16),green:Number.parseInt(n.slice(2,4),16),blue:Number.parseInt(n.slice(4,6),16)}}function _e(t,e){const r=Math.max(Pe(t),Pe(e)),i=Math.min(Pe(t),Pe(e));return(r+.05)/(i+.05)}function Pe(t){return .2126*Ae(t.red)+.7152*Ae(t.green)+.0722*Ae(t.blue)}function Ae(t){const e=t/255;return e<=.03928?e/12.92:((e+.055)/1.055)**2.4}const mt=40;function qe(t,e){return e==="additions"?{start:t.additionStart,count:t.additionCount,lineIndex:t.additionLineIndex}:{start:t.deletionStart,count:t.deletionCount,lineIndex:t.deletionLineIndex}}function Se(t,e){return(t[e]??"").replace(/\r?\n$/,"")}function pt(t,e){const r=e==="additions"?t?.additionLines:t?.deletionLines;return Array.isArray(r)?r:[]}function qt(t,e,r){if(t?.hunks==null||!Number.isFinite(r))return null;for(const i of t.hunks){const{start:n,count:o,lineIndex:s}=qe(i,e);if(r>=n&&r=u.start+u.count||f.hunkContent==null)continue;let c=f.additionStart,p=f.deletionStart;for(const m of f.hunkContent){if(m.type==="context"){for(let x=0;x=n&&y<=o&&d.push(` ${Se(s,m.additionLineIndex+x)}`)}c+=m.lines,p+=m.lines;continue}if(e==="additions"?m.additions>0&&c<=o&&c+m.additions-1>=n:m.deletions>0&&p<=o&&p+m.deletions-1>=n){for(let x=0;x=8&&e.pendingItems.length=S||k-o>=I)&&(p(),await ot(),n=performance.now())}function p(){if(e.pendingItems.length===0)return;const h=e.pendingItems.splice(0,e.pendingItems.length);e.pendingItemById.clear(),e.items.push(...h),t.onBatch(h),r.flushCount+=1,r.maxBatchSize=Math.max(r.maxBatchSize,h.length),r.fileCount=e.items.length,r.renderableFileCount=e.items.length,m(),t.onMetrics({...r}),o=performance.now(),i=!1}function m(){r.treeRefreshCount+=1,t.onTreeSource(ri(e))}async function g(h){if(h.trim()==="")return;const k=si(h);k!=null&&(s=xt(k,l,t.label),l+=1);const S=`cmux-diff-file-${e.fileIndex}`;await u(t.processFile(h,{cacheKey:S,isGitDiff:!0}),s)}const x=await fetch(t.patchURL,{cache:"no-store"});if(!x.ok)throw new Error(`${t.label("loadingDiff")} (${x.status})`);if(!x.body?.getReader){const h=await x.text();await nt(h,t,u),await c(!0),r.completedAt=performance.now(),t.onComplete({...r});return}const y=new TextDecoder,b=x.body.getReader(),w=oi();for(;;){const{done:h,value:k}=await b.read();if(h){const S=y.decode();S.length>0&&(w.push(S),await Ee(w,g));break}w.push(y.decode(k,{stream:!0})),await Ee(w,g)}const v=w.finish();v.fileText!=null?(await g(v.fileText),await Ee(w,g)):v.fallbackPatchContent!=null&&await nt(v.fallbackPatchContent,t,u),await c(!0),r.completedAt=performance.now(),t.onMetrics({...r}),t.onComplete({...r})}function Zt(){return{diffStats:{addedLines:0,deletedLines:0,fileCount:0,totalLinesOfCode:0},fileIndex:0,gitStatusByPath:new Map,itemIdToFile:new Map,itemIdByTreePath:new Map,nextCollisionSuffixByBase:new Map,items:[],pathStateByTreePath:new Map,paths:[],pathToItemId:new Map,pendingGitStatusRemovePaths:new Set,pendingGitStatusSetByPath:new Map,pendingItems:[],pendingItemById:new Map,pendingStatsChanged:!1,statsByPath:new Map,treePathByItemId:new Map}}function ei(t,e,r,i,n){if(!e)return null;const o=ye(e,n),s=r==null?o:`${r}/${o}`,l=o.length===0?void 0:t.pathStateByTreePath.get(s),d=l==null?void 0:ti(t,s,l),f=ci(e),c={id:l!=null||t.itemIdToFile.has(s)?gt(t,`${s}?2`):s,type:"diff",fileDiff:e,version:0,collapsed:i},p=t.items.length+t.pendingItems.length;t.fileIndex+=1,t.pendingItems.push(c),t.pendingItemById.set(c.id,c),t.itemIdToFile.set(c.id,{fileOrder:p,path:o}),t.itemIdByTreePath.set(s,c.id),t.treePathByItemId.set(c.id,s),t.diffStats.addedLines+=f.added,t.diffStats.deletedLines+=f.deleted,t.diffStats.fileCount+=1,t.diffStats.totalLinesOfCode+=e.unifiedLineCount??e.splitLineCount??0;const m=t.statsByPath.get(s);return t.statsByPath.set(s,f),l!=null&&!di(m,f)&&(t.pendingStatsChanged=!0),o.length>0&&(l==null&&t.paths.push(s),t.pathToItemId.set(s,c.id),ii(t,s,e.type,l?.sawDeleted===!0),t.pathStateByTreePath.set(s,{currentItem:c,currentItemId:c.id,currentType:e.type,fileOrder:p,sawDeleted:l?.sawDeleted===!0||e.type==="deleted"})),{item:c,renamedItem:d}}function ti(t,e,r){const i=r.currentItemId,n=r.currentType==="deleted"?"?deleted":"?previous",o=gt(t,`${e}${n}`),s={...r.currentItem,id:o};r.currentItem=s,r.currentItemId=o,it(t.items,i,s);const l=t.itemIdToFile.get(i);if(l&&(t.itemIdToFile.delete(i),t.itemIdToFile.set(o,l)),t.treePathByItemId.has(i)&&(t.treePathByItemId.delete(i),t.treePathByItemId.set(o,e)),t.pendingItemById.has(i)){it(t.pendingItems,i,s),t.pendingItemById.delete(i),t.pendingItemById.set(o,s);return}return{oldId:i,newId:o}}function it(t,e,r){const i=t.findIndex(n=>n.id===e);i!==-1&&(t[i]=r)}function gt(t,e){if(!t.itemIdToFile.has(e))return e;let r=t.nextCollisionSuffixByBase.get(e)??2,i=`${e}-${r}`;for(;t.itemIdToFile.has(i);)r+=1,i=`${e}-${r}`;return t.nextCollisionSuffixByBase.set(e,r+1),i}function ii(t,e,r,i){if(i&&r!=="deleted"){t.gitStatusByPath.delete(e)&&rt(t,e);return}const n=fi(r);if(n==="modified"){t.gitStatusByPath.delete(e)&&rt(t,e);return}if(t.gitStatusByPath.get(e)?.status===n)return;const s={path:e,status:n};t.gitStatusByPath.set(e,s),t.pendingGitStatusRemovePaths.delete(e),t.pendingGitStatusSetByPath.set(e,s)}function rt(t,e){t.pendingGitStatusSetByPath.delete(e),t.pendingGitStatusRemovePaths.add(e)}function ri(t){const e=t.lastTreeSource,r=[...t.paths],i={diffStats:{...t.diffStats},gitStatus:Array.from(t.gitStatusByPath.values()),gitStatusPatch:ni(t),pathCount:r.length,paths:r,pathToItemId:new Map(t.pathToItemId),previousSource:e,statsChanged:t.pendingStatsChanged,statsByPath:new Map(t.statsByPath),treePathByItemId:new Map(t.treePathByItemId)};return t.pendingStatsChanged=!1,t.lastTreeSource=i,i}function ni(t){if(t.pendingGitStatusRemovePaths.size===0&&t.pendingGitStatusSetByPath.size===0)return;const e={};return t.pendingGitStatusRemovePaths.size>0&&(e.remove=Array.from(t.pendingGitStatusRemovePaths),t.pendingGitStatusRemovePaths.clear()),t.pendingGitStatusSetByPath.size>0&&(e.set=Array.from(t.pendingGitStatusSetByPath.values()),t.pendingGitStatusSetByPath.clear()),e}async function nt(t,e,r){const i=e.parsePatchFiles(t,"cmux-diff"),n=i.length>1;for(const[o,s]of i.entries()){const l=n?xt(s.patchMetadata,o,e.label):void 0;for(const d of s.files??[])await r(d,l)}}function oi(){let t,e="",r=0,i=!1;const n="diff --git ",o=` +`+n,s=o.length-1,l=/\S/;function d(c,p){const m=Math.max(p,0);if(m===0&&c.startsWith(n))return 0;const g=c.indexOf(o,m);return g===-1?void 0:g+1}function f(c,p){return Math.max(p,c.length-s)}function u(){if(t==null){if(t=d(e,r),t==null)return r=f(e,0),null;i=!0,r=t+1}for(;;){const c=t;if(c==null)return null;const p=d(e,r);if(p==null)return r=f(e,c+1),null;const m=ai(e,c+1,p)??p,g=e.slice(0,m);if(e=e.slice(m),t=d(e,0),r=t==null?0:t+1,l.test(g))return g}}return{push(c){c.length>0&&(e+=c)},takeAvailableFile:u,finish(){const c=u();if(c!=null)return{fileText:c};if(!l.test(e))return e="",{};if(!i){const m=e;return e="",{fallbackPatchContent:m}}const p=e;return e="",{fileText:p}}}}async function Ee(t,e){let r;for(;(r=t.takeAvailableFile())!=null;)await e(r)}function ai(t,e,r){const i=Math.max(e,0),n=Math.min(r,t.length);if(i>=n)return;let o=t.lastIndexOf(` +From `,n-1);for(;o!==-1;){const s=o+1;if(s=n){o=t.lastIndexOf(` +From `,o-1);continue}const l=t.indexOf(` +`,s+1),d=t.slice(s,l===-1||l>n?n:l);if(Ye.test(d))return s;o=t.lastIndexOf(` +From `,o-1)}}function si(t){const e=li(t,0);if(e==null||e<=0)return;const r=t.slice(0,e);return Ye.test(r)?r:void 0}function li(t,e){const r="diff --git ",i=` +`+r,n=Math.max(e,0);if(n===0&&t.startsWith(r))return 0;const o=t.indexOf(i,n);return o===-1?void 0:o+1}function xt(t,e,r){const i=t?.match(Ye);return i?.[1]?new TextDecoder().decode(new TextEncoder().encode(i[1].slice(0,5))):`${r("commit")} ${e+1}`}function ye(t,e="Untitled"){return t.name??t.newName??t.oldName??t.prevName??e}function ci(t){const e={added:0,deleted:0};for(const r of t.hunks??[])e.added+=r.additionLines??0,e.deleted+=r.deletionLines??0;return e}function di(t,e){return t?.added===e.added&&t?.deleted===e.deleted}function fi(t){switch(t){case"new":return"added";case"deleted":return"deleted";case"rename-pure":case"rename-changed":return"renamed";default:return"modified"}}function ot(){return new Promise(t=>{let e=!1,r=0;const i=()=>{e||(e=!0,r!==0&&window.clearTimeout(r),t())};if(document.visibilityState==="visible"&&document.hasFocus())r=window.setTimeout(i,50),window.requestAnimationFrame(i);else if(typeof MessageChannel<"u"){const n=new MessageChannel;n.port1.onmessage=i,n.port2.postMessage(void 0)}else queueMicrotask(i)})}function bt(t,e,r){const i=[],n=t.fileDiff!=null?ye(t.fileDiff,""):"";if(n!=="")for(const o of e){if(o.filePath!==n)continue;const s=ht(t.fileDiff,o);s.state!=="outdated"&&i.push({side:o.side,lineNumber:s.line,metadata:{kind:"comment",comment:o,anchor:s}})}return r!=null&&r.itemId===t.id&&i.push({side:r.side,lineNumber:r.endLine,metadata:{kind:"draft"}}),i}function ui(t,e){return t.state!==e.state?!1:t.state==="outdated"||e.state==="outdated"?!0:t.line===e.line}function mi(t,e){if(t.side!==e.side||t.lineNumber!==e.lineNumber)return!1;const r=t.metadata,i=e.metadata;return r.kind==="draft"||i.kind==="draft"?r.kind===i.kind:r.comment===i.comment&&ui(r.anchor,i.anchor)}function pi(t,e){const r=t??[];if(r.length!==e.length)return!1;for(let i=0;i{const s=bt(o,e,r);return pi(o.annotations,s)?o:(i=!0,{...o,annotations:s,version:(o.version??0)+1})});return i?n:t}function gi(t,e,r=!0){return e.map(i=>{let n=null;for(const o of t){if(o.fileDiff==null||ye(o.fileDiff,"")!==i.filePath)continue;const s=ht(o.fileDiff,i);if(s.state!=="outdated")return{comment:i,itemId:o.id,anchor:s,pending:!1};n??={itemId:o.id,anchor:s}}return{comment:i,itemId:n?.itemId??null,anchor:n?.anchor??{state:"outdated"},pending:n==null&&!r}})}class Ue extends Error{code;constructor(e,r){super(e),this.name="DiffCommentsBridgeError",this.code=r}}function vt(){if(typeof window>"u")return null;const t=window.webkit?.messageHandlers?.cmuxDiffComments;return t!=null&&typeof t.postMessage=="function"?t:null}function xi(){return vt()!=null}async function Qe(t,e){const r=vt();if(r==null)throw new Ue("Diff comments bridge is unavailable.");const i=await r.postMessage({id:At(),method:t,params:e});if(!i.ok)throw new Ue(i.error?.userMessage||"Diff comments request failed.",i.error?.code);return i.value}async function bi(t){const e=await Qe("comments.list",{repoRoot:t});return Array.isArray(e?.comments)?e.comments:[]}async function at(t,e){const r=await Qe("comments.save",{repoRoot:t,comment:e});if(r?.comment==null)throw new Ue("Diff comments save returned no comment.");return r.comment}async function vi(t,e){await Qe("comments.delete",{repoRoot:t,id:e})}function wt(t){const e=C.c(28),{initialMessage:r,labels:i,onCancel:n,onSave:o}=t,s=r===void 0?"":r,[l,d]=M.useState(s),f=wi;let u;e[0]===Symbol.for("react.memo_cache_sentinel")?(u=k=>d(k.currentTarget.value),e[0]=u):u=e[0];let c;e[1]!==l||e[2]!==o?(c=k=>{k.key==="Enter"&&(k.metaKey||k.ctrlKey)&&l.trim()!==""&&(k.preventDefault(),o(l))},e[1]=l,e[2]=o,e[3]=c):c=e[3];let p;e[4]!==i.addComment||e[5]!==i.commentPlaceholder||e[6]!==l||e[7]!==c?(p=a.jsx("textarea",{ref:f,className:"comment-composer-input",placeholder:i.commentPlaceholder,"aria-label":i.addComment,rows:3,value:l,onChange:u,onKeyDown:c}),e[4]=i.addComment,e[5]=i.commentPlaceholder,e[6]=l,e[7]=c,e[8]=p):p=e[8];let m;e[9]===Symbol.for("react.memo_cache_sentinel")?(m=a.jsx("span",{}),e[9]=m):m=e[9];let g;e[10]!==i.cancelComment||e[11]!==n?(g=a.jsx("button",{type:"button",className:"comment-button",onClick:n,children:i.cancelComment}),e[10]=i.cancelComment,e[11]=n,e[12]=g):g=e[12];let x;e[13]!==l?(x=l.trim(),e[13]=l,e[14]=x):x=e[14];const y=x==="";let b;e[15]!==l||e[16]!==o?(b=()=>o(l),e[15]=l,e[16]=o,e[17]=b):b=e[17];let w;e[18]!==i.saveComment||e[19]!==y||e[20]!==b?(w=a.jsx("button",{type:"button",className:"comment-button comment-button-primary",disabled:y,onClick:b,children:i.saveComment}),e[18]=i.saveComment,e[19]=y,e[20]=b,e[21]=w):w=e[21];let v;e[22]!==w||e[23]!==g?(v=a.jsxs("div",{className:"comment-composer-footer",children:[m,a.jsxs("span",{className:"comment-composer-buttons",children:[g,w]})]}),e[22]=w,e[23]=g,e[24]=v):v=e[24];let h;return e[25]!==v||e[26]!==p?(h=a.jsxs("div",{className:"comment-composer",children:[p,v]}),e[25]=v,e[26]=p,e[27]=h):h=e[27],h}function wi(t){t?.focus()}function yi(t){const e=t.split("/"),r=e[e.length-1];return r!=null&&r!==""?r:t}function yt(t){const e=`${yi(t.filePath)}:${t.startLine}`;return t.endLine>t.startLine?`${e}-${t.endLine}`:e}function st(t,e){const r=t.endLine>t.startLine?`lines ${t.startLine}-${t.endLine}`:`line ${t.startLine}`,i=t.side==="deletions"?"old":"new",n=[`Review comment on ${t.filePath} ${r} (${i} version):`],o=Xt(e,t.side,t.startLine,t.endLine);if(o!=="")n.push(`\`\`\`diff ${o} -\`\`\``);else{const a=_t(e,t.side,t.startLine,t.endLine);a!==""&&n.push(a)}return n.push(t.message),`${n.join(` +\`\`\``);else{const s=Yt(e,t.side,t.startLine,t.endLine);s!==""&&n.push(s)}return n.push(t.message),`${n.join(` `)} -`}function ti(t){const e=I.c(13),{entries:r,hasDraft:i,labels:n,onSelect:o}=t;if(r.length===0&&!i)return null;const a=`${n.comments} (${r.length})`;let d;e[0]!==a?(d=s.jsx("div",{id:"comments-header",children:s.jsx("span",{id:"comments-title",children:a})}),e[0]=a,e[1]=d):d=e[1];let l;e[2]!==r||e[3]!==n.noComments||e[4]!==n.outdatedComment||e[5]!==o?(l=r.length===0?s.jsx("div",{className:"comments-empty",children:n.noComments}):r.map(u=>s.jsxs("button",{type:"button",className:"comment-entry",onClick:()=>o(u),children:[s.jsxs("span",{className:"comment-entry-header",children:[s.jsx("span",{className:"comment-entry-location",children:tt(u.comment)}),!u.pending&&u.anchor.state==="outdated"?s.jsx("span",{className:"comment-entry-badge",children:n.outdatedComment}):null]}),s.jsx("span",{className:"comment-entry-message",children:u.comment.message})]},u.comment.id)),e[2]=r,e[3]=n.noComments,e[4]=n.outdatedComment,e[5]=o,e[6]=l):l=e[6];let f;e[7]!==l?(f=s.jsx("div",{id:"comments-list",children:l}),e[7]=l,e[8]=f):f=e[8];let c;return e[9]!==n.comments||e[10]!==d||e[11]!==f?(c=s.jsxs("div",{id:"comments-section","aria-label":n.comments,children:[d,f]}),e[9]=n.comments,e[10]=d,e[11]=f,e[12]=c):c=e[12],c}const We={comments:"Comments",addComment:"Add comment",commentPlaceholder:"Leave a comment",saveComment:"Comment",cancelComment:"Cancel",deleteComment:"Delete",editComment:"Edit",outdatedComment:"Outdated",noComments:"No comments yet"};function ii(t,e,r){return t?.labels?.[e]??r}function ri(t){const e={};for(const r of Object.keys(We))e[r]=ii(t,r,We[r]);return e}function ni(t){const e=I.c(29),{comment:r,labels:i,onDelete:n,onSaveMessage:o}=t,[a,d]=B.useState(!1);if(a){let w;e[0]===Symbol.for("react.memo_cache_sentinel")?(w=()=>d(!1),e[0]=w):w=e[0];let v;e[1]!==o?(v=y=>{o(y),d(!1)},e[1]=o,e[2]=v):v=e[2];let x;return e[3]!==r.message||e[4]!==i||e[5]!==v?(x=s.jsx(et,{initialMessage:r.message,labels:i,onCancel:w,onSave:v}),e[3]=r.message,e[4]=i,e[5]=v,e[6]=x):x=e[6],x}const l=r.id;let f;e[7]!==r?(f=tt(r),e[7]=r,e[8]=f):f=e[8];let c;e[9]!==f?(c=s.jsx("span",{className:"comment-card-location",children:f}),e[9]=f,e[10]=c):c=e[10];let u;e[11]===Symbol.for("react.memo_cache_sentinel")?(u=()=>d(!0),e[11]=u):u=e[11];let m;e[12]!==i.editComment?(m=s.jsx("button",{type:"button",className:"comment-card-action",onClick:u,children:i.editComment}),e[12]=i.editComment,e[13]=m):m=e[13];let p;e[14]!==i.deleteComment||e[15]!==n?(p=s.jsx("button",{type:"button",className:"comment-card-action",onClick:n,children:i.deleteComment}),e[14]=i.deleteComment,e[15]=n,e[16]=p):p=e[16];let g;e[17]!==m||e[18]!==p?(g=s.jsxs("span",{className:"comment-card-actions",children:[m,p]}),e[17]=m,e[18]=p,e[19]=g):g=e[19];let h;e[20]!==c||e[21]!==g?(h=s.jsxs("div",{className:"comment-card-header",children:[c,g]}),e[20]=c,e[21]=g,e[22]=h):h=e[22];let k;e[23]!==r.message?(k=s.jsx("div",{className:"comment-card-message",children:r.message}),e[23]=r.message,e[24]=k):k=e[24];let b;return e[25]!==r.id||e[26]!==h||e[27]!==k?(b=s.jsxs("div",{className:"comment-card","data-comment-id":l,children:[h,k]}),e[25]=r.id,e[26]=h,e[27]=k,e[28]=b):b=e[28],b}function oi(t,e){const r=I.c(4),i=B.useRef(!1);let n,o;r[0]!==e||r[1]!==t?(n=()=>{i.current||t==null||(i.current=!0,Yt(t).then(a=>e(a)).catch(ai))},o=[e,t],r[0]=e,r[1]=t,r[2]=n,r[3]=o):(n=r[2],o=r[3]),B.useEffect(n,o)}function ai(t){return console.warn("cmux diff comments load failed",t)}function si(t,e,r){if(!t)return{kind:"reset"};const i=t.pathCount??t.paths?.length??0,n=e.pathCount??r.length,o=e.previousSource===t;return!(o||di(t,e))||no)return!1;for(let a=0;a{const n=t?.[i];if(typeof n=="string"&&n.trim()!=="")return n;if(e.assertMissing&&!r.has(i))throw r.add(i),new Error(`Missing cmux diff viewer label: ${i}`);return ui[i]}}function mi(t,e){return{layout:{paddingTop:0,gap:1,paddingBottom:0},diffStyle:t.layout,diffIndicators:t.diffIndicators,overflow:t.wordWrap?"wrap":"scroll",expandUnchanged:t.expandUnchanged,disableBackground:!t.showBackgrounds,disableLineNumbers:!t.lineNumbers,lineHoverHighlight:"number",enableLineSelection:!0,enableGutterUtility:!0,lineDiffType:t.wordDiffs?"word":"none",stickyHeaders:!0,unsafeCSS:hi(),theme:e.theme,themeType:"system"}}function pi(t,e){return{theme:e.theme,preferredHighlighter:"shiki-wasm",lineDiffType:t.wordDiffs?"word":"none",maxLineDiffLength:1e3,tokenizeMaxLineLength:1e3,useTokenTransformer:!1}}function hi(){return` +`}function ki(t){const e=C.c(13),{entries:r,hasDraft:i,labels:n,onSelect:o}=t;if(r.length===0&&!i)return null;const s=`${n.comments} (${r.length})`;let l;e[0]!==s?(l=a.jsx("div",{id:"comments-header",children:a.jsx("span",{id:"comments-title",children:s})}),e[0]=s,e[1]=l):l=e[1];let d;e[2]!==r||e[3]!==n.noComments||e[4]!==n.outdatedComment||e[5]!==o?(d=r.length===0?a.jsx("div",{className:"comments-empty",children:n.noComments}):r.map(c=>a.jsxs("button",{type:"button",className:"comment-entry",onClick:()=>o(c),children:[a.jsxs("span",{className:"comment-entry-header",children:[a.jsx("span",{className:"comment-entry-location",children:yt(c.comment)}),!c.pending&&c.anchor.state==="outdated"?a.jsx("span",{className:"comment-entry-badge",children:n.outdatedComment}):null]}),a.jsx("span",{className:"comment-entry-message",children:c.comment.message})]},c.comment.id)),e[2]=r,e[3]=n.noComments,e[4]=n.outdatedComment,e[5]=o,e[6]=d):d=e[6];let f;e[7]!==d?(f=a.jsx("div",{id:"comments-list",children:d}),e[7]=d,e[8]=f):f=e[8];let u;return e[9]!==n.comments||e[10]!==l||e[11]!==f?(u=a.jsxs("div",{id:"comments-section","aria-label":n.comments,children:[l,f]}),e[9]=n.comments,e[10]=l,e[11]=f,e[12]=u):u=e[12],u}const lt={comments:"Comments",addComment:"Add comment",commentPlaceholder:"Leave a comment",saveComment:"Comment",cancelComment:"Cancel",deleteComment:"Delete",editComment:"Edit",outdatedComment:"Outdated",noComments:"No comments yet"};function Si(t,e,r){return t?.labels?.[e]??r}function ji(t){const e={};for(const r of Object.keys(lt))e[r]=Si(t,r,lt[r]);return e}function Ii(t){const e=C.c(29),{comment:r,labels:i,onDelete:n,onSaveMessage:o}=t,[s,l]=M.useState(!1);if(s){let w;e[0]===Symbol.for("react.memo_cache_sentinel")?(w=()=>l(!1),e[0]=w):w=e[0];let v;e[1]!==o?(v=k=>{o(k),l(!1)},e[1]=o,e[2]=v):v=e[2];let h;return e[3]!==r.message||e[4]!==i||e[5]!==v?(h=a.jsx(wt,{initialMessage:r.message,labels:i,onCancel:w,onSave:v}),e[3]=r.message,e[4]=i,e[5]=v,e[6]=h):h=e[6],h}const d=r.id;let f;e[7]!==r?(f=yt(r),e[7]=r,e[8]=f):f=e[8];let u;e[9]!==f?(u=a.jsx("span",{className:"comment-card-location",children:f}),e[9]=f,e[10]=u):u=e[10];let c;e[11]===Symbol.for("react.memo_cache_sentinel")?(c=()=>l(!0),e[11]=c):c=e[11];let p;e[12]!==i.editComment?(p=a.jsx("button",{type:"button",className:"comment-card-action",onClick:c,children:i.editComment}),e[12]=i.editComment,e[13]=p):p=e[13];let m;e[14]!==i.deleteComment||e[15]!==n?(m=a.jsx("button",{type:"button",className:"comment-card-action",onClick:n,children:i.deleteComment}),e[14]=i.deleteComment,e[15]=n,e[16]=m):m=e[16];let g;e[17]!==p||e[18]!==m?(g=a.jsxs("span",{className:"comment-card-actions",children:[p,m]}),e[17]=p,e[18]=m,e[19]=g):g=e[19];let x;e[20]!==u||e[21]!==g?(x=a.jsxs("div",{className:"comment-card-header",children:[u,g]}),e[20]=u,e[21]=g,e[22]=x):x=e[22];let y;e[23]!==r.message?(y=a.jsx("div",{className:"comment-card-message",children:r.message}),e[23]=r.message,e[24]=y):y=e[24];let b;return e[25]!==r.id||e[26]!==x||e[27]!==y?(b=a.jsxs("div",{className:"comment-card","data-comment-id":d,children:[x,y]}),e[25]=r.id,e[26]=x,e[27]=y,e[28]=b):b=e[28],b}function Ci(t,e){const r=C.c(4),i=M.useRef(!1);let n,o;r[0]!==e||r[1]!==t?(n=()=>{i.current||t==null||(i.current=!0,bi(t).then(s=>e(s)).catch(Mi))},o=[e,t],r[0]=e,r[1]=t,r[2]=n,r[3]=o):(n=r[2],o=r[3]),M.useEffect(n,o)}function Mi(t){return console.warn("cmux diff comments load failed",t)}function Pi(t,e,r){if(!t)return{kind:"reset"};const i=t.pathCount??t.paths?.length??0,n=e.pathCount??r.length,o=e.previousSource===t;return!(o||Bi(t,e))||no)return!1;for(let s=0;s{const n=t?.[i];if(typeof n=="string"&&n.trim()!=="")return n;if(e.assertMissing&&!r.has(i))throw r.add(i),new Error(`Missing cmux diff viewer label: ${i}`);return Li[i]}}function zi(t,e){return{layout:{paddingTop:0,gap:1,paddingBottom:0},diffStyle:t.layout,diffIndicators:t.diffIndicators,overflow:t.wordWrap?"wrap":"scroll",expandUnchanged:t.expandUnchanged,disableBackground:!t.showBackgrounds,disableLineNumbers:!t.lineNumbers,lineHoverHighlight:"number",enableLineSelection:!0,enableGutterUtility:!0,lineDiffType:t.wordDiffs?"word":"none",stickyHeaders:!0,unsafeCSS:Ni(),theme:e.theme,themeType:"system"}}function Di(t,e){return{theme:e.theme,preferredHighlighter:"shiki-wasm",lineDiffType:t.wordDiffs?"word":"none",maxLineDiffLength:1e3,tokenizeMaxLineLength:1e3,useTokenTransformer:!1}}function Ni(){return` :host { --diffs-light-bg: var(--cmux-diff-bg); --diffs-dark-bg: var(--cmux-diff-bg); @@ -101,7 +101,7 @@ ${o} [data-expand-button] { font-family: var(--diffs-header-font-family, var(--diffs-header-font-fallback)); } - `}function gi(){return` + `}function Oi(){return` :host { display: block; height: 100%; @@ -141,4 +141,4 @@ ${o} background-color: var(--cmux-diff-tree-sticky-bg, var(--cmux-diff-sidebar-bg)) !important; box-shadow: 0 1px 0 var(--trees-border-color); } - `}function Ue(t,e){const r=t.palette??{},i=It(t.background,e),n=se(t.foreground,i,t.type==="light"?"#000000":"#ffffff"),o=(a,d=n)=>se(a,i,d);return{name:t.name,displayName:t.ghosttyName,type:t.type,colors:{"editor.background":i,"editor.foreground":n,"terminal.background":i,"terminal.foreground":n,"terminal.ansiBlack":o(r[0]),"terminal.ansiRed":o(r[1]),"terminal.ansiGreen":o(r[2]),"terminal.ansiYellow":o(r[3]),"terminal.ansiBlue":o(r[4]),"terminal.ansiMagenta":o(r[5]),"terminal.ansiCyan":o(r[6]),"terminal.ansiWhite":o(r[7]),"terminal.ansiBrightBlack":o(r[8]),"terminal.ansiBrightRed":o(r[9],o(r[1])),"terminal.ansiBrightGreen":o(r[10],o(r[2])),"terminal.ansiBrightYellow":o(r[11],o(r[3])),"terminal.ansiBrightBlue":o(r[12],o(r[4])),"terminal.ansiBrightMagenta":o(r[13],o(r[5])),"terminal.ansiBrightCyan":o(r[14],o(r[6])),"terminal.ansiBrightWhite":o(r[15]),"gitDecoration.addedResourceForeground":o(r[10],o(r[2],"#32d74b")),"gitDecoration.deletedResourceForeground":o(r[9],o(r[1],"#ff453a")),"gitDecoration.modifiedResourceForeground":o(r[12],o(r[4],"#0a84ff")),"editor.selectionBackground":t.selectionBackground,"editor.selectionForeground":t.selectionForeground},tokenColors:[{settings:{foreground:n,background:i}},{scope:["comment","punctuation.definition.comment"],settings:{foreground:o(r[8]),fontStyle:"italic"}},{scope:["string","constant.other.symbol"],settings:{foreground:o(r[2])}},{scope:["constant.numeric","constant.language","support.constant"],settings:{foreground:o(r[3])}},{scope:["keyword","storage","storage.type"],settings:{foreground:o(r[5])}},{scope:["entity.name.function","support.function"],settings:{foreground:o(r[4])}},{scope:["entity.name.type","entity.name.class","support.type"],settings:{foreground:o(r[6])}},{scope:["variable","meta.definition.variable"],settings:{foreground:n}},{scope:["invalid","message.error"],settings:{foreground:o(r[9],o(r[1]))}}]}}function ie(t,e={}){const r=e.pending===!0;return{error:e.error===!0,loading:e.loading===!0||r,message:t,pending:r,statusOnly:e.statusOnly===!0}}function xi(t,e){const r=t.payload;return r?.pendingReplacement===!0?ie(r.statusMessage??e("loadingDiff"),{loading:!0,pending:!0}):typeof r?.statusMessage=="string"&&r.statusMessage.length>0?ie(r.statusMessage,{error:r.statusIsError===!0,loading:!1,statusOnly:!0}):ie(e("loadingDiff"),{loading:!0})}function ze(t){document.body.dataset.loading=t.loading?"true":"false",document.body.dataset.statusOnly=t.statusOnly?"true":"false"}const bi=/\b(Android|iPhone|iPad|iPod|Mobile)\b/i;function vi(t){return bi.test(t??"")?1:3}function wi(){return vi(typeof navigator>"u"?void 0:navigator.userAgent)}function yi(t){return{poolSize:wi(),workerFactory:()=>new Worker(t,{type:"module"})}}const ki=["82%","64%","76%","58%","70%","46%"],Si=["58%","88%","72%","94%","64%","82%","52%","78%"],ji="./assets/pierre-diffs-1.2.7-trees-1.0.0-beta.4/worker-pool/worker-portable.js",nt="cmux.diffViewer.layout";function Ci(t,e){const r=t.payload??{};return{activeItemId:"",activeTreePath:"",comments:[],copyFeedback:"",draft:null,fileSearchOpen:!1,filesWidth:252,filesVisible:!0,items:[],metrics:null,options:{collapsed:!1,diffIndicators:"bars",expandUnchanged:!1,layout:Di(r),lineNumbers:!0,showBackgrounds:!0,wordDiffs:!1,wordWrap:!1},optionsOpen:!1,status:e,treeSource:null}}function Ii(t,e){switch(e.type){case"append-items":{const r=e.items.map(i=>{const n=qt(i,t.comments,t.draft);return t.options.collapsed?{...n,collapsed:!0}:n});return{...t,activeItemId:t.activeItemId||r[0]?.id||"",items:[...t.items,...r],status:t.status.loading?ie("",{loading:!1}):t.status}}case"remove-comment":{const r=t.comments.filter(i=>i.id!==e.id);return{...t,comments:r,items:pe(t.items,r,t.draft)}}case"rename-item":return{...t,activeItemId:t.activeItemId===e.oldId?e.newId:t.activeItemId,draft:t.draft?.itemId===e.oldId?{...t.draft,itemId:e.newId}:t.draft,items:t.items.map(r=>r.id===e.oldId||r.id===e.newId?{...r,id:e.newId,version:(r.version??0)+1}:r)};case"set-active-item":return{...t,activeItemId:e.itemId,activeTreePath:e.treePath??t.activeTreePath};case"set-comments":return{...t,comments:e.comments,items:pe(t.items,e.comments,t.draft)};case"set-copy-feedback":return{...t,copyFeedback:e.message};case"set-draft":return{...t,draft:e.draft,items:pe(t.items,t.comments,e.draft)};case"set-file-search-open":return{...t,fileSearchOpen:e.open,filesVisible:e.open?!0:t.filesVisible};case"set-files-width":return{...t,filesWidth:e.width};case"set-files-visible":return{...t,filesVisible:e.visible};case"set-metrics":return{...t,metrics:e.metrics};case"set-option":return e.key==="collapsed"?{...t,options:{...t.options,collapsed:!!e.value},items:t.items.map(r=>({...r,collapsed:!!e.value,version:(r.version??0)+1}))}:{...t,options:{...t.options,[e.key]:e.value}};case"set-options-open":return{...t,optionsOpen:e.open};case"set-status":return{...t,status:e.status};case"set-tree-source":{const r=e.source,i=t.activeItemId?r.treePathByItemId.get(t.activeItemId)??t.activeTreePath:t.activeTreePath;return{...t,activeTreePath:i,treeSource:r}}case"upsert-comment":{const i=t.comments.some(n=>n.id===e.comment.id)?t.comments.map(n=>n.id===e.comment.id?e.comment:n):[...t.comments,e.comment];return{...t,comments:i,items:pe(t.items,i,t.draft)}}}}function Mi(t){const e=I.c(81),{config:r,initialStatus:i}=t,n=r.payload??{},o=rt(n.labels,{assertMissing:it()}),a=Pe(n.appearance);let d;e[0]!==r||e[1]!==i?(d=Ci(r,i),e[0]=r,e[1]=i,e[2]=d):d=e[2];const[l,f]=B.useReducer(Ii,d),c=at(l),u=B.useRef(null),m=B.useRef(null),p=B.useRef(null);let g;if(e[3]!==r.assets?.workerModuleURL){const M=Fi(r.assets?.workerModuleURL);g=yi(M),e[3]=r.assets?.workerModuleURL,e[4]=g}else g=e[4];const h=g,k=pi(l.options,a),b=typeof n.repoRoot=="string"&&n.repoRoot!==""?n.repoRoot:null,w=Xt()&&b!=null,v=ri(n),x=_i({bridgeAvailable:w,dispatch:f,latestState:c,repoRoot:b}),y=mi(l.options,a);y.onGutterUtilityClick=x.onGutterUtilityClick,pr(l),ur(n,o,f),lr(r,o,f,c),oi(w?b:null,x.onLoaded);let S;e[5]!==n.shortcuts?(S=n.shortcuts??{},e[5]=n.shortcuts,e[6]=S):S=e[6],hr(S,p,f),gr(l.optionsOpen,f);let j;e[7]!==v||e[8]!==x||e[9]!==f?(j=(M,ne)=>{const fe=M.metadata;return fe.kind==="draft"?s.jsx(et,{labels:v,onCancel:()=>f({type:"set-draft",draft:null}),onSave:we=>x.saveDraft(ne,we)}):s.jsx(ni,{comment:fe.comment,labels:v,onDelete:()=>x.remove(fe.comment),onSaveMessage:we=>x.editMessage(fe.comment,we,ne.fileDiff)})},e[7]=v,e[8]=x,e[9]=f,e[10]=j):j=e[10];const N=j;let F;if(e[11]!==l.comments||e[12]!==l.items||e[13]!==l.metrics?.completedAt){const M=Number.isFinite(l.metrics?.completedAt)&&(l.metrics?.completedAt??0)>0;F=Jt(l.items,l.comments,M),e[11]=l.comments,e[12]=l.items,e[13]=l.metrics?.completedAt,e[14]=F}else F=e[14];const E=F;let _;e[15]!==f||e[16]!==l.treeSource?.treePathByItemId?(_=M=>{M.itemId!=null&&(M.anchor.state==="outdated"?u.current?.scrollTo({type:"item",id:M.itemId,align:"start",behavior:"smooth-auto"}):u.current?.scrollTo({type:"line",id:M.itemId,lineNumber:M.anchor.line,side:M.comment.side,align:"center",behavior:"smooth-auto"}),f({type:"set-active-item",itemId:M.itemId,treePath:l.treeSource?.treePathByItemId.get(M.itemId)}))},e[15]=f,e[16]=l.treeSource?.treePathByItemId,e[17]=_):_=e[17];const T=_;let z;e[18]!==l.activeItemId||e[19]!==l.activeTreePath||e[20]!==l.treeSource?.treePathByItemId?(z=l.treeSource?.treePathByItemId.get(l.activeItemId)??l.activeTreePath,e[18]=l.activeItemId,e[19]=l.activeTreePath,e[20]=l.treeSource?.treePathByItemId,e[21]=z):z=e[21];const L=z;let R;e[22]!==f||e[23]!==l.items||e[24]!==l.treeSource?.treePathByItemId?(R=M=>{const ne=wr(M,l.items);ne&&(u.current?.scrollTo({type:"item",id:ne,align:"start",behavior:"smooth-auto"}),f({type:"set-active-item",itemId:ne,treePath:l.treeSource?.treePathByItemId.get(ne)}))},e[22]=f,e[23]=l.items,e[24]=l.treeSource?.treePathByItemId,e[25]=R):R=e[25];const P=R;let D;e[26]!==f?(D=M=>{ze(M),f({type:"set-status",status:M})},e[26]=f,e[27]=D):D=e[27];const A=D;let W;e[28]!==f?(W=M=>{Ri(M),f({type:"set-option",key:"layout",value:M})},e[28]=f,e[29]=W):W=e[29];const V=W;let O;e[30]!==f||e[31]!==o||e[32]!==n.patchURL?(O=async()=>{try{const M=await St(n.patchURL,o,m.current);f({type:"set-copy-feedback",message:M})}catch{f({type:"set-copy-feedback",message:o("copyFailedGitApplyCommand")})}},e[30]=f,e[31]=o,e[32]=n.patchURL,e[33]=O):O=e[33];let $;e[34]!==o||e[35]!==A?($=M=>{A(ie(o("loadingDiff"),{pending:!0})),window.location.href=kt(M)},e[34]=o,e[35]=A,e[36]=$):$=e[36];let C;e[37]!==r||e[38]!==f||e[39]!==o||e[40]!==P||e[41]!==V||e[42]!==l||e[43]!==O||e[44]!==$?(C=s.jsx(Ei,{config:r,label:o,onCopyGitApply:O,onJump:P,onNavigate:$,onReload:Pi,onSetLayout:V,dispatch:f,state:l}),e[37]=r,e[38]=f,e[39]=o,e[40]=P,e[41]=V,e[42]=l,e[43]=O,e[44]=$,e[45]=C):C=e[45];const U=`${l.filesWidth}px`;let K;e[46]!==U?(K={"--cmux-diff-files-width":U},e[46]=U,e[47]=K):K=e[47];const Z=K,ee=l.draft!=null;let q;e[48]!==E||e[49]!==v||e[50]!==f||e[51]!==o||e[52]!==P||e[53]!==T||e[54]!==L||e[55]!==l||e[56]!==ee?(q=s.jsx(Hi,{commentEntries:E,commentLabels:v,hasDraft:ee,label:o,onSelectComment:T,onSelectItem:P,selectedPath:L,dispatch:f,state:l}),e[48]=E,e[49]=v,e[50]=f,e[51]=o,e[52]=P,e[53]=T,e[54]=L,e[55]=l,e[56]=ee,e[57]=q):q=e[57];let J;e[58]!==o?(J=o("diffViewer"),e[58]=o,e[59]=J):J=e[59];let X;e[60]!==k||e[61]!==N||e[62]!==y||e[63]!==l.items||e[64]!==h?(X=l.items.length>0?s.jsxs(dt,{poolOptions:h,highlighterOptions:k,children:[s.jsx(Ai,{codeViewRef:u,highlighterOptions:k}),s.jsx(ft,{ref:u,className:"code-view-root",containerRef:p,items:l.items,options:y,renderAnnotation:(M,ne)=>N(M,ne)})]}):null,e[60]=k,e[61]=N,e[62]=y,e[63]=l.items,e[64]=h,e[65]=X):X=e[65];let te;e[66]!==J||e[67]!==X?(te=s.jsx("main",{id:"viewer","aria-label":J,children:X}),e[66]=J,e[67]=X,e[68]=te):te=e[68];let Y;e[69]!==o||e[70]!==l.status?(Y=s.jsx(Zi,{label:o,status:l.status}),e[69]=o,e[70]=l.status,e[71]=Y):Y=e[71];let Q;e[72]!==Z||e[73]!==q||e[74]!==te||e[75]!==Y?(Q=s.jsxs("section",{id:"content",style:Z,children:[q,te,Y]}),e[72]=Z,e[73]=q,e[74]=te,e[75]=Y,e[76]=Q):Q=e[76];let re;e[77]===Symbol.for("react.memo_cache_sentinel")?(re=s.jsx("textarea",{ref:m,"aria-hidden":"true",readOnly:!0,tabIndex:-1,className:"copy-fallback-textarea"}),e[77]=re):re=e[77];let G;return e[78]!==C||e[79]!==Q?(G=s.jsxs("div",{id:"app",children:[C,Q,re]}),e[78]=C,e[79]=Q,e[80]=G):G=e[80],G}function Pi(){return window.location.reload()}function Fi(t){return new URL(t||ji,window.location.href)}function _i(t){const e=I.c(23),{bridgeAvailable:r,dispatch:i,latestState:n,repoRoot:o}=t;let a;e[0]!==i?(a=b=>i({type:"set-comments",comments:b}),e[0]=i,e[1]=a):a=e[1];const d=a;let l;e[2]!==i?(l=(b,w)=>{const v=b.side==="deletions"?"deletions":"additions";i({type:"set-draft",draft:{itemId:w.item.id,side:v,startLine:Math.min(b.start,b.end),endLine:Math.max(b.start,b.end)}})},e[2]=i,e[3]=l):l=e[3];const f=l;let c;e[4]!==r||e[5]!==i||e[6]!==n||e[7]!==o?(c=(b,w)=>{const v=n.current.draft;if(v==null||v.itemId!==b.id||w.trim()==="")return;const x={filePath:le(b.fileDiff,""),side:v.side,startLine:v.startLine,endLine:v.endLine,lineText:Be(b.fileDiff,v.side,v.endLine)??"",message:w},y={...x,submissionText:Ve(x,b.fileDiff)};(r&&o!=null?$e(o,y):Promise.resolve(zi(y))).then(j=>{i({type:"upsert-comment",comment:j}),i({type:"set-draft",draft:null})}).catch(Li)},e[4]=r,e[5]=i,e[6]=n,e[7]=o,e[8]=c):c=e[8];const u=c;let m;e[9]!==r||e[10]!==i||e[11]!==o?(m=(b,w,v)=>{if(w.trim()==="")return;const x={...b,message:w,updatedAt:new Date().toISOString()},y={...x,submissionText:Ve(x,v)};(r&&o!=null?$e(o,y):Promise.resolve(y)).then(j=>i({type:"upsert-comment",comment:j})).catch(Ti)},e[9]=r,e[10]=i,e[11]=o,e[12]=m):m=e[12];const p=m;let g;e[13]!==r||e[14]!==i||e[15]!==o?(g=b=>{r&&o!=null&&Qt(o,b.id).catch(Bi),i({type:"remove-comment",id:b.id})},e[13]=r,e[14]=i,e[15]=o,e[16]=g):g=e[16];const h=g;let k;return e[17]!==p||e[18]!==f||e[19]!==d||e[20]!==h||e[21]!==u?(k={editMessage:p,onGutterUtilityClick:f,onLoaded:d,remove:h,saveDraft:u},e[17]=p,e[18]=f,e[19]=d,e[20]=h,e[21]=u,e[22]=k):k=e[22],k}function Bi(t){return console.warn("cmux diff comment delete failed",t)}function Ti(t){return console.warn("cmux diff comment edit failed",t)}function Li(t){return console.warn("cmux diff comment save failed",t)}function zi(t){const e=new Date().toISOString();return{...t,id:crypto.randomUUID(),createdAt:e,updatedAt:e}}function Di(t){const e=ot(t.layout);return t.layoutSource==="explicit"&&e?e:Ni()??e??"unified"}function Ni(){try{return ot(window.localStorage.getItem(nt))}catch{return null}}function Ri(t){try{window.localStorage.setItem(nt,t)}catch{}}function ot(t){return t==="split"||t==="unified"?t:null}function Ai(t){const{codeViewRef:e,highlighterOptions:r}=t;return er(r,e),null}function Ei(t){const e=I.c(77),{config:r,dispatch:i,label:n,onCopyGitApply:o,onJump:a,onNavigate:d,onReload:l,onSetLayout:f,state:c}=t;let u;e[0]!==r.payload?(u=r.payload??{},e[0]=r.payload,e[1]=u):u=e[1];const m=u;let p;e[2]!==n||e[3]!==d||e[4]!==m?(p=s.jsx(Oi,{label:n,onNavigate:d,payload:m}),e[2]=n,e[3]=d,e[4]=m,e[5]=p):p=e[5];let g;e[6]!==n||e[7]!==a||e[8]!==c.activeItemId||e[9]!==c.items?(g=s.jsx("div",{className:"toolbar-middle flex min-w-0 flex-1 items-center justify-center gap-1.5",children:s.jsx(Ui,{items:c.items,label:n,onJump:a,selectedItemId:c.activeItemId})}),e[6]=n,e[7]=a,e[8]=c.activeItemId,e[9]=c.items,e[10]=g):g=e[10];let h;e[11]!==n||e[12]!==m.externalURL?(h=typeof m.externalURL=="string"&&m.externalURL.length>0?s.jsx("a",{id:"external-link",className:"toolbar-icon",href:m.externalURL,target:"_blank",rel:"noreferrer",title:n("openSourceURL"),"aria-label":n("openSourceURL"),children:s.jsx(ae,{name:"external"})}):null,e[11]=n,e[12]=m.externalURL,e[13]=h):h=e[13];let k;e[14]!==n||e[15]!==c.options.layout?(k=c.options.layout==="split"?n("switchToUnifiedDiff"):n("switchToSplitDiff"),e[14]=n,e[15]=c.options.layout,e[16]=k):k=e[16];let b;e[17]!==n||e[18]!==c.options.layout?(b=c.options.layout==="split"?n("switchToUnifiedDiff"):n("switchToSplitDiff"),e[17]=n,e[18]=c.options.layout,e[19]=b):b=e[19];let w;e[20]!==f||e[21]!==c.options.layout?(w=()=>f(c.options.layout==="split"?"unified":"split"),e[20]=f,e[21]=c.options.layout,e[22]=w):w=e[22];let v;e[23]!==c.options.layout?(v=s.jsx(ae,{name:c.options.layout}),e[23]=c.options.layout,e[24]=v):v=e[24];let x;e[25]!==k||e[26]!==b||e[27]!==w||e[28]!==v?(x=s.jsx("button",{id:"layout-toggle",className:"toolbar-icon",type:"button",title:k,"aria-label":b,onClick:w,children:v}),e[25]=k,e[26]=b,e[27]=w,e[28]=v,e[29]=x):x=e[29];let y;e[30]!==n?(y=n("options"),e[30]=n,e[31]=y):y=e[31];let S;e[32]!==n?(S=n("options"),e[32]=n,e[33]=S):S=e[33];let j;e[34]!==i||e[35]!==c.optionsOpen?(j=()=>i({type:"set-options-open",open:!c.optionsOpen}),e[34]=i,e[35]=c.optionsOpen,e[36]=j):j=e[36];let N;e[37]===Symbol.for("react.memo_cache_sentinel")?(N=s.jsx(ae,{name:"dots"}),e[37]=N):N=e[37];let F;e[38]!==c.optionsOpen||e[39]!==y||e[40]!==S||e[41]!==j?(F=s.jsx("button",{id:"options-button",className:"toolbar-icon",type:"button",title:y,"aria-label":S,"aria-expanded":c.optionsOpen,"aria-controls":"options-menu",onClick:j,children:N}),e[38]=c.optionsOpen,e[39]=y,e[40]=S,e[41]=j,e[42]=F):F=e[42];let E;e[43]!==n||e[44]!==c.filesVisible?(E=c.filesVisible?n("hideFiles"):n("showFiles"),e[43]=n,e[44]=c.filesVisible,e[45]=E):E=e[45];let _;e[46]!==n||e[47]!==c.filesVisible?(_=c.filesVisible?n("hideFiles"):n("showFiles"),e[46]=n,e[47]=c.filesVisible,e[48]=_):_=e[48];let T;e[49]!==i||e[50]!==c.filesVisible?(T=()=>i({type:"set-files-visible",visible:!c.filesVisible}),e[49]=i,e[50]=c.filesVisible,e[51]=T):T=e[51];let z;e[52]===Symbol.for("react.memo_cache_sentinel")?(z=s.jsx(ae,{name:"files"}),e[52]=z):z=e[52];let L;e[53]!==c.filesVisible||e[54]!==E||e[55]!==_||e[56]!==T?(L=s.jsx("button",{id:"files-toggle",className:"toolbar-icon",type:"button",title:E,"aria-label":_,"aria-pressed":c.filesVisible,onClick:T,children:z}),e[53]=c.filesVisible,e[54]=E,e[55]=_,e[56]=T,e[57]=L):L=e[57];let R;e[58]!==c.copyFeedback?(R=s.jsx("span",{id:"copy-feedback",className:"visually-hidden","aria-live":"polite",children:c.copyFeedback}),e[58]=c.copyFeedback,e[59]=R):R=e[59];let P;e[60]!==F||e[61]!==L||e[62]!==R||e[63]!==h||e[64]!==x?(P=s.jsxs("div",{className:"toolbar-actions flex shrink-0 items-center gap-1.5",children:[h,x,F,L,R]}),e[60]=F,e[61]=L,e[62]=R,e[63]=h,e[64]=x,e[65]=P):P=e[65];let D;e[66]!==i||e[67]!==n||e[68]!==o||e[69]!==l||e[70]!==c?(D=c.optionsOpen?s.jsx(Gi,{dispatch:i,label:n,onCopyGitApply:o,onReload:l,state:c}):null,e[66]=i,e[67]=n,e[68]=o,e[69]=l,e[70]=c,e[71]=D):D=e[71];let A;return e[72]!==p||e[73]!==P||e[74]!==D||e[75]!==g?(A=s.jsxs("header",{id:"toolbar",children:[p,g,P,D]}),e[72]=p,e[73]=P,e[74]=D,e[75]=g,e[76]=A):A=e[76],A}function Oi(t){const e=I.c(24),{label:r,onNavigate:i,payload:n}=t;let o;e[0]!==r?(o=r("diffTarget"),e[0]=r,e[1]=o):o=e[1];let a;e[2]!==i||e[3]!==n.sourceOptions||e[4]!==o?(a=s.jsx(Ce,{ariaLabel:o,fallbackValue:"",id:"source-select",options:n.sourceOptions,onNavigate:i}),e[2]=i,e[3]=n.sourceOptions,e[4]=o,e[5]=a):a=e[5];let d;e[6]!==r?(d=r("repoPath"),e[6]=r,e[7]=d):d=e[7];const l=n.repoRoot??"";let f;e[8]!==i||e[9]!==n.repoOptions||e[10]!==d||e[11]!==l?(f=s.jsx(Ce,{ariaLabel:d,fallbackValue:l,id:"repo-select",options:n.repoOptions,onNavigate:i}),e[8]=i,e[9]=n.repoOptions,e[10]=d,e[11]=l,e[12]=f):f=e[12];let c;e[13]!==r?(c=r("branchBase"),e[13]=r,e[14]=c):c=e[14];const u=n.branchBaseRef??"";let m;e[15]!==i||e[16]!==n.baseOptions||e[17]!==c||e[18]!==u?(m=s.jsx(Ce,{ariaLabel:c,fallbackValue:u,id:"base-select",options:n.baseOptions,onNavigate:i}),e[15]=i,e[16]=n.baseOptions,e[17]=c,e[18]=u,e[19]=m):m=e[19];let p;return e[20]!==a||e[21]!==f||e[22]!==m?(p=s.jsxs("div",{className:"toolbar-left flex min-w-0 items-center gap-1.5",children:[a,f,m]}),e[20]=a,e[21]=f,e[22]=m,e[23]=p):p=e[23],p}function Ce(t){const e=I.c(15),{ariaLabel:r,fallbackValue:i,id:n,onNavigate:o,options:a}=t;if(!Array.isArray(a)||a.length<2)return null;let d;e[0]!==a?(d=a.find(Wi)??a.find(Vi),e[0]=a,e[1]=d):d=e[1];const l=d,f=l?.value??i;let c;e[2]!==i||e[3]!==o||e[4]!==a||e[5]!==l?.value?(c=p=>{const g=a.find(h=>h.value===p.currentTarget.value);if(!g?.url){p.currentTarget.value=l?.value??i;return}o(g.url)},e[2]=i,e[3]=o,e[4]=a,e[5]=l?.value,e[6]=c):c=e[6];let u;e[7]!==a?(u=a.map($i),e[7]=a,e[8]=u):u=e[8];let m;return e[9]!==r||e[10]!==n||e[11]!==f||e[12]!==c||e[13]!==u?(m=s.jsx("select",{id:n,"aria-label":r,defaultValue:f,title:r,onChange:c,children:u}),e[9]=r,e[10]=n,e[11]=f,e[12]=c,e[13]=u,e[14]=m):m=e[14],m}function $i(t){return s.jsx("option",{value:t.value,disabled:t.disabled||!t.url,title:t.message,children:t.label},t.value)}function Vi(t){return!t.disabled}function Wi(t){return t.selected}function Ui(t){const e=I.c(19),{items:r,label:i,onJump:n,selectedItemId:o}=t;if(r.length===0)return null;let a;e[0]!==i?(a=i("jumpToFile"),e[0]=i,e[1]=a):a=e[1];let d;e[2]!==n?(d=m=>n(m.currentTarget.value),e[2]=n,e[3]=d):d=e[3];let l;e[4]!==i?(l=i("jumpToFile"),e[4]=i,e[5]=l):l=e[5];let f;e[6]!==l?(f=s.jsx("option",{value:"",children:l}),e[6]=l,e[7]=f):f=e[7];let c;if(e[8]!==r||e[9]!==i){let m;e[11]!==i?(m=p=>s.jsx("option",{value:p.id,children:le(p.fileDiff,i("untitled"))},p.id),e[11]=i,e[12]=m):m=e[12],c=r.map(m),e[8]=r,e[9]=i,e[10]=c}else c=e[10];let u;return e[13]!==o||e[14]!==a||e[15]!==d||e[16]!==f||e[17]!==c?(u=s.jsxs("select",{id:"jump-select","aria-label":a,value:o,onChange:d,children:[f,c]}),e[13]=o,e[14]=a,e[15]=d,e[16]=f,e[17]=c,e[18]=u):u=e[18],u}function Gi(t){const e=I.c(122),{dispatch:r,label:i,onCopyGitApply:n,onReload:o,state:a}=t;let d;e[0]!==r||e[1]!==a.options?(d=G=>r({type:"set-option",key:G,value:!a.options[G]}),e[0]=r,e[1]=a.options,e[2]=d):d=e[2];const l=d;let f;e[3]!==i?(f=i("options"),e[3]=i,e[4]=f):f=e[4];let c;e[5]!==i?(c=i("refresh"),e[5]=i,e[6]=c):c=e[6];let u;e[7]!==o||e[8]!==c?(u=s.jsx(oe,{icon:"refresh",label:c,onClick:o}),e[7]=o,e[8]=c,e[9]=u):u=e[9];let m;e[10]!==i||e[11]!==a.options.wordWrap?(m=a.options.wordWrap?i("disableWordWrap"):i("enableWordWrap"),e[10]=i,e[11]=a.options.wordWrap,e[12]=m):m=e[12];let p;e[13]!==l?(p=()=>l("wordWrap"),e[13]=l,e[14]=p):p=e[14];let g;e[15]!==a.options.wordWrap||e[16]!==m||e[17]!==p?(g=s.jsx(oe,{checked:a.options.wordWrap,icon:"wrap",label:m,onClick:p}),e[15]=a.options.wordWrap,e[16]=m,e[17]=p,e[18]=g):g=e[18];const h=a.options.collapsed?"expand":"collapse";let k;e[19]!==i||e[20]!==a.options.collapsed?(k=a.options.collapsed?i("expandAllDiffs"):i("collapseAllDiffs"),e[19]=i,e[20]=a.options.collapsed,e[21]=k):k=e[21];let b;e[22]!==l?(b=()=>l("collapsed"),e[22]=l,e[23]=b):b=e[23];let w;e[24]!==a.options.collapsed||e[25]!==b||e[26]!==h||e[27]!==k?(w=s.jsx(oe,{checked:a.options.collapsed,icon:h,label:k,onClick:b}),e[24]=a.options.collapsed,e[25]=b,e[26]=h,e[27]=k,e[28]=w):w=e[28];let v;e[29]===Symbol.for("react.memo_cache_sentinel")?(v=s.jsx("div",{className:"menu-separator"}),e[29]=v):v=e[29];let x;e[30]!==i||e[31]!==a.filesVisible?(x=a.filesVisible?i("hideFiles"):i("showFiles"),e[30]=i,e[31]=a.filesVisible,e[32]=x):x=e[32];let y;e[33]!==r||e[34]!==a.filesVisible?(y=()=>r({type:"set-files-visible",visible:!a.filesVisible}),e[33]=r,e[34]=a.filesVisible,e[35]=y):y=e[35];let S;e[36]!==a.filesVisible||e[37]!==x||e[38]!==y?(S=s.jsx(oe,{checked:a.filesVisible,icon:"files",label:x,onClick:y}),e[36]=a.filesVisible,e[37]=x,e[38]=y,e[39]=S):S=e[39];let j;e[40]!==i||e[41]!==a.options.expandUnchanged?(j=a.options.expandUnchanged?i("collapseUnchangedContext"):i("expandUnchangedContext"),e[40]=i,e[41]=a.options.expandUnchanged,e[42]=j):j=e[42];let N;e[43]!==l?(N=()=>l("expandUnchanged"),e[43]=l,e[44]=N):N=e[44];let F;e[45]!==a.options.expandUnchanged||e[46]!==j||e[47]!==N?(F=s.jsx(oe,{checked:a.options.expandUnchanged,icon:"document",label:j,onClick:N}),e[45]=a.options.expandUnchanged,e[46]=j,e[47]=N,e[48]=F):F=e[48];let E;e[49]!==i||e[50]!==a.options.showBackgrounds?(E=a.options.showBackgrounds?i("hideBackgrounds"):i("showBackgrounds"),e[49]=i,e[50]=a.options.showBackgrounds,e[51]=E):E=e[51];let _;e[52]!==l?(_=()=>l("showBackgrounds"),e[52]=l,e[53]=_):_=e[53];let T;e[54]!==a.options.showBackgrounds||e[55]!==E||e[56]!==_?(T=s.jsx(oe,{checked:a.options.showBackgrounds,icon:"background",label:E,onClick:_}),e[54]=a.options.showBackgrounds,e[55]=E,e[56]=_,e[57]=T):T=e[57];let z;e[58]!==i||e[59]!==a.options.lineNumbers?(z=a.options.lineNumbers?i("hideLineNumbers"):i("showLineNumbers"),e[58]=i,e[59]=a.options.lineNumbers,e[60]=z):z=e[60];let L;e[61]!==l?(L=()=>l("lineNumbers"),e[61]=l,e[62]=L):L=e[62];let R;e[63]!==a.options.lineNumbers||e[64]!==z||e[65]!==L?(R=s.jsx(oe,{checked:a.options.lineNumbers,icon:"numbers",label:z,onClick:L}),e[63]=a.options.lineNumbers,e[64]=z,e[65]=L,e[66]=R):R=e[66];let P;e[67]!==i||e[68]!==a.options.wordDiffs?(P=a.options.wordDiffs?i("disableWordDiffs"):i("enableWordDiffs"),e[67]=i,e[68]=a.options.wordDiffs,e[69]=P):P=e[69];let D;e[70]!==l?(D=()=>l("wordDiffs"),e[70]=l,e[71]=D):D=e[71];let A;e[72]!==a.options.wordDiffs||e[73]!==P||e[74]!==D?(A=s.jsx(oe,{checked:a.options.wordDiffs,icon:"word",label:P,onClick:D}),e[72]=a.options.wordDiffs,e[73]=P,e[74]=D,e[75]=A):A=e[75];let W;e[76]===Symbol.for("react.memo_cache_sentinel")?(W=s.jsx(ae,{name:"bars"}),e[76]=W):W=e[76];let V;e[77]!==i?(V=i("indicatorStyle"),e[77]=i,e[78]=V):V=e[78];let O;e[79]!==V?(O=s.jsx("span",{className:"menu-label",children:V}),e[79]=V,e[80]=O):O=e[80];let $;e[81]!==i?($=i("bars"),e[81]=i,e[82]=$):$=e[82];let C;e[83]!==$?(C={value:"bars",icon:"bars",label:$},e[83]=$,e[84]=C):C=e[84];let U;e[85]!==i?(U=i("classic"),e[85]=i,e[86]=U):U=e[86];let K;e[87]!==U?(K={value:"classic",icon:"classic",label:U},e[87]=U,e[88]=K):K=e[88];let Z;e[89]!==i?(Z=i("none"),e[89]=i,e[90]=Z):Z=e[90];let ee;e[91]!==Z?(ee={value:"none",icon:"eye",label:Z},e[91]=Z,e[92]=ee):ee=e[92];let q;e[93]!==C||e[94]!==K||e[95]!==ee?(q=[C,K,ee],e[93]=C,e[94]=K,e[95]=ee,e[96]=q):q=e[96];let J;e[97]!==r||e[98]!==a.options.diffIndicators||e[99]!==q?(J=s.jsx("span",{className:"menu-segment-controls",children:q.map(G=>s.jsx("button",{type:"button",className:"segment-button",title:G.label,"aria-label":G.label,"aria-pressed":a.options.diffIndicators===G.value,onClick:()=>r({type:"set-option",key:"diffIndicators",value:G.value}),children:s.jsx(ae,{name:G.icon})},G.value))}),e[97]=r,e[98]=a.options.diffIndicators,e[99]=q,e[100]=J):J=e[100];let X;e[101]!==O||e[102]!==J?(X=s.jsxs("div",{className:"menu-item menu-segment",children:[W,O,J]}),e[101]=O,e[102]=J,e[103]=X):X=e[103];let te;e[104]===Symbol.for("react.memo_cache_sentinel")?(te=s.jsx("div",{className:"menu-separator"}),e[104]=te):te=e[104];let Y;e[105]!==i?(Y=i("copyGitApplyCommand"),e[105]=i,e[106]=Y):Y=e[106];let Q;e[107]!==n||e[108]!==Y?(Q=s.jsx(oe,{icon:"clipboard",label:Y,onClick:n}),e[107]=n,e[108]=Y,e[109]=Q):Q=e[109];let re;return e[110]!==w||e[111]!==S||e[112]!==F||e[113]!==f||e[114]!==T||e[115]!==R||e[116]!==A||e[117]!==X||e[118]!==u||e[119]!==Q||e[120]!==g?(re=s.jsxs("div",{id:"options-menu","aria-label":f,children:[u,g,w,v,S,F,T,R,A,X,te,Q]}),e[110]=w,e[111]=S,e[112]=F,e[113]=f,e[114]=T,e[115]=R,e[116]=A,e[117]=X,e[118]=u,e[119]=Q,e[120]=g,e[121]=re):re=e[121],re}function oe(t){const e=I.c(14),{checked:r,icon:i,label:n,onClick:o}=t,a=r??void 0;let d;e[0]!==i?(d=s.jsx(ae,{name:i}),e[0]=i,e[1]=d):d=e[1];let l;e[2]!==n?(l=s.jsx("span",{className:"menu-label",children:n}),e[2]=n,e[3]=l):l=e[3];let f;e[4]!==r?(f=r?s.jsx(ae,{name:"check"}):null,e[4]=r,e[5]=f):f=e[5];let c;e[6]!==f?(c=s.jsx("span",{className:"menu-check",children:f}),e[6]=f,e[7]=c):c=e[7];let u;return e[8]!==o||e[9]!==a||e[10]!==d||e[11]!==l||e[12]!==c?(u=s.jsxs("button",{type:"button",className:"menu-item","aria-pressed":a,onClick:o,children:[d,l,c]}),e[8]=o,e[9]=a,e[10]=d,e[11]=l,e[12]=c,e[13]=u):u=e[13],u}function Hi(t){const e=I.c(69),{commentEntries:r,commentLabels:i,dispatch:n,hasDraft:o,label:a,onSelectComment:d,onSelectItem:l,selectedPath:f,state:c}=t,u=B.useRef(null);let m;e[0]!==n?(m=C=>{const U=u.current;if(!U)return;const K=document.documentElement.clientWidth||window.innerWidth,Z=Math.max(220,Math.min(520,Math.floor(K*.55))),ee=Math.max(180,Math.min(Z,Math.round(U.startWidth-(C-U.startX))));n({type:"set-files-width",width:ee})},e[0]=n,e[1]=m):m=e[1];const p=m;let g;e[2]!==a?(g=a("changedFiles"),e[2]=a,e[3]=g):g=e[3];const h=!c.filesVisible,k=!c.filesVisible;let b;e[4]!==a?(b=a("files"),e[4]=a,e[5]=b):b=e[5];let w;e[6]!==c.filesWidth?(w=C=>{u.current={startWidth:c.filesWidth,startX:C.clientX},C.currentTarget.setPointerCapture(C.pointerId)},e[6]=c.filesWidth,e[7]=w):w=e[7];let v,x;e[8]!==p?(v=C=>p(C.clientX),x=C=>{p(C.clientX),u.current=null,C.currentTarget.releasePointerCapture(C.pointerId)},e[8]=p,e[9]=v,e[10]=x):(v=e[9],x=e[10]);let y;e[11]===Symbol.for("react.memo_cache_sentinel")?(y=()=>{u.current=null},e[11]=y):y=e[11];let S;e[12]!==n||e[13]!==c.filesWidth?(S=C=>{if(C.key!=="ArrowLeft"&&C.key!=="ArrowRight")return;C.preventDefault();const U=C.key==="ArrowLeft"?20:-20;n({type:"set-files-width",width:Math.max(180,Math.min(520,c.filesWidth+U))})},e[12]=n,e[13]=c.filesWidth,e[14]=S):S=e[14];let j;e[15]!==S||e[16]!==b||e[17]!==w||e[18]!==v||e[19]!==x?(j=s.jsx("button",{id:"files-resize-handle","aria-label":b,type:"button",tabIndex:0,onPointerDown:w,onPointerMove:v,onPointerUp:x,onPointerCancel:y,onKeyDown:S}),e[15]=S,e[16]=b,e[17]=w,e[18]=v,e[19]=x,e[20]=j):j=e[20];let N;e[21]!==a?(N=a("files"),e[21]=a,e[22]=N):N=e[22];let F;e[23]!==N?(F=s.jsx("span",{children:N}),e[23]=N,e[24]=F):F=e[24];const E=c.treeSource?.pathCount??0;let _;e[25]!==E?(_=s.jsx("span",{id:"files-count",children:E}),e[25]=E,e[26]=_):_=e[26];let T;e[27]!==F||e[28]!==_?(T=s.jsxs("span",{id:"files-title",children:[F,_]}),e[27]=F,e[28]=_,e[29]=T):T=e[29];let z;e[30]!==a||e[31]!==c.fileSearchOpen?(z=c.fileSearchOpen?a("hideFileSearch"):a("showFileSearch"),e[30]=a,e[31]=c.fileSearchOpen,e[32]=z):z=e[32];let L;e[33]!==a||e[34]!==c.fileSearchOpen?(L=c.fileSearchOpen?a("hideFileSearch"):a("showFileSearch"),e[33]=a,e[34]=c.fileSearchOpen,e[35]=L):L=e[35];const R=!c.treeSource;let P;e[36]!==n||e[37]!==c.fileSearchOpen?(P=()=>n({type:"set-file-search-open",open:!c.fileSearchOpen}),e[36]=n,e[37]=c.fileSearchOpen,e[38]=P):P=e[38];let D;e[39]===Symbol.for("react.memo_cache_sentinel")?(D=s.jsx(ae,{name:"search"}),e[39]=D):D=e[39];let A;e[40]!==c.fileSearchOpen||e[41]!==z||e[42]!==L||e[43]!==R||e[44]!==P?(A=s.jsx("span",{id:"files-header-actions",children:s.jsx("button",{id:"file-search-toggle",type:"button",title:z,"aria-label":L,"aria-pressed":c.fileSearchOpen,disabled:R,onClick:P,children:D})}),e[40]=c.fileSearchOpen,e[41]=z,e[42]=L,e[43]=R,e[44]=P,e[45]=A):A=e[45];let W;e[46]!==T||e[47]!==A?(W=s.jsxs("div",{id:"files-header",children:[T,A]}),e[46]=T,e[47]=A,e[48]=W):W=e[48];let V;e[49]!==a||e[50]!==l||e[51]!==f||e[52]!==c.fileSearchOpen||e[53]!==c.status||e[54]!==c.treeSource?(V=s.jsx("div",{id:"file-list",children:c.treeSource?s.jsx(Ki,{fileSearchOpen:c.fileSearchOpen,label:a,onSelectItem:l,selectedPath:f,source:c.treeSource}):c.status.loading||c.status.pending?s.jsx(Ji,{}):s.jsx("div",{className:"visually-hidden",children:c.status.message})}),e[49]=a,e[50]=l,e[51]=f,e[52]=c.fileSearchOpen,e[53]=c.status,e[54]=c.treeSource,e[55]=V):V=e[55];let O;e[56]!==r||e[57]!==i||e[58]!==o||e[59]!==d?(O=s.jsx(ti,{entries:r,hasDraft:o,labels:i,onSelect:d}),e[56]=r,e[57]=i,e[58]=o,e[59]=d,e[60]=O):O=e[60];let $;return e[61]!==j||e[62]!==g||e[63]!==W||e[64]!==V||e[65]!==O||e[66]!==h||e[67]!==k?($=s.jsxs("aside",{id:"files-sidebar","aria-label":g,"aria-hidden":h,inert:k,children:[j,W,V,O]}),e[61]=j,e[62]=g,e[63]=W,e[64]=V,e[65]=O,e[66]=h,e[67]=k,e[68]=$):$=e[68],$}function Ki(t){const e=I.c(18),{fileSearchOpen:r,label:i,onSelectItem:n,selectedPath:o,source:a}=t;let d;e[0]!==i||e[1]!==n||e[2]!==a?(d={label:i,onSelectItem:n,source:a},e[0]=i,e[1]=n,e[2]=a,e[3]=d):d=e[3];const l=at(d);let f;e[4]!==a.paths?(f=()=>Ie(a.paths),e[4]=a.paths,e[5]=f):f=e[5];const[c]=B.useState(f);let u;e[6]!==o?(u=o?[o]:[],e[6]=o,e[7]=u):u=e[7];let m;e[8]===Symbol.for("react.memo_cache_sentinel")?(m=st(),e[8]=m):m=e[8];const p=a.gitStatus;let g;e[9]===Symbol.for("react.memo_cache_sentinel")?(g=gi(),e[9]=g):g=e[9];let h;e[10]!==c||e[11]!==l||e[12]!==u||e[13]!==p?(h={flattenEmptyDirectories:!1,id:"cmux-diff-file-tree",initialExpansion:"open",initialSelectedPaths:u,initialVisibleRowCount:m,itemHeight:24,overscan:12,preparedInput:c,search:!0,searchBlurBehavior:"retain",stickyFolders:!0,gitStatus:p,sort:qi,unsafeCSS:g,onSelectionChange(v){const x=v[v.length-1],y=l.current.source.pathToItemId.get(x);y&&l.current.onSelectItem(y)}},e[10]=c,e[11]=l,e[12]=u,e[13]=p,e[14]=h):h=e[14];const{model:k}=mt(h);nr(k,a),ar(k,r),sr(k,o);let b;e[15]===Symbol.for("react.memo_cache_sentinel")?(b={height:"100%"},e[15]=b):b=e[15];let w;return e[16]!==k?(w=s.jsx(pt,{model:k,style:b}),e[16]=k,e[17]=w):w=e[17],w}function qi(){return 0}function Ji(){const t=I.c(1);let e;return t[0]===Symbol.for("react.memo_cache_sentinel")?(e=s.jsx("div",{className:"diff-loading-placeholder","aria-hidden":"true",children:ki.map(Xi)}),t[0]=e):e=t[0],e}function Xi(t,e){return s.jsxs("div",{className:"grid h-6 grid-cols-[16px_minmax(0,1fr)_44px] items-center gap-2 rounded-[5px] px-[7px]",children:[s.jsx("span",{className:"size-4 rounded-[5px] border border-[color-mix(in_lab,var(--cmux-diff-fg)_18%,transparent)]"}),s.jsx("span",{className:"h-[11px] rounded bg-[var(--cmux-diff-muted-bg)]",style:{width:t}}),s.jsx("span",{className:"h-[11px] justify-self-end rounded bg-[var(--cmux-diff-muted-bg)] opacity-70",style:{width:e%2===0?"34px":"24px"}})]},`${t}-${e}`)}function Yi(){const t=I.c(2);let e;t[0]===Symbol.for("react.memo_cache_sentinel")?(e=s.jsxs("div",{className:"mb-3 grid h-9 grid-cols-[72px_minmax(0,1fr)_96px] items-center gap-3 rounded-md bg-[color-mix(in_lab,var(--cmux-diff-fg)_5%,transparent)] px-3",children:[s.jsx("span",{className:"h-3 rounded bg-[var(--cmux-diff-muted-bg)]"}),s.jsx("span",{className:"h-3 w-2/5 rounded bg-[var(--cmux-diff-muted-bg)]"}),s.jsx("span",{className:"h-3 rounded bg-[var(--cmux-diff-muted-bg)] opacity-70"})]}),t[0]=e):e=t[0];let r;return t[1]===Symbol.for("react.memo_cache_sentinel")?(r=s.jsxs("div",{className:"diff-loading-placeholder mx-3.5 mt-3.5 border-t border-[var(--cmux-diff-border)] pt-3","aria-hidden":"true",children:[e,s.jsx("div",{className:"space-y-[13px] px-3 py-1",children:Si.map(Qi)})]}),t[1]=r):r=t[1],r}function Qi(t,e){return s.jsxs("div",{className:"grid grid-cols-[42px_minmax(0,1fr)] items-center gap-4",children:[s.jsx("span",{className:"h-px bg-[color-mix(in_lab,var(--cmux-diff-fg)_10%,transparent)]"}),s.jsx("span",{className:"h-3 rounded bg-[var(--cmux-diff-muted-bg)]",style:{width:t}})]},`${t}-${e}`)}function Zi(t){const e=I.c(16),{label:r,status:i}=t;if(!i.loading&&!i.pending&&!i.statusOnly&&!i.error)return null;const n=i.error?"true":"false",o=i.pending?"true":"false";let a;e[0]===Symbol.for("react.memo_cache_sentinel")?(a=s.jsx("span",{id:"status-icon","aria-hidden":"true"}),e[0]=a):a=e[0];let d;e[1]!==r||e[2]!==i.message?(d=i.message||r("loadingDiff"),e[1]=r,e[2]=i.message,e[3]=d):d=e[3];let l;e[4]!==d?(l=s.jsx("span",{id:"status-text",children:d}),e[4]=d,e[5]=l):l=e[5];let f;e[6]!==n||e[7]!==o||e[8]!==l?(f=s.jsxs("div",{id:"status","data-error":n,"data-pending":o,children:[a,l]}),e[6]=n,e[7]=o,e[8]=l,e[9]=f):f=e[9];let c;e[10]!==i.loading||e[11]!==i.pending?(c=i.loading||i.pending?s.jsx(Yi,{}):null,e[10]=i.loading,e[11]=i.pending,e[12]=c):c=e[12];let u;return e[13]!==f||e[14]!==c?(u=s.jsxs("div",{id:"loading-layer","aria-live":"polite",children:[f,c]}),e[13]=f,e[14]=c,e[15]=u):u=e[15],u}function at(t){const e=I.c(3),r=B.useRef(t);let i,n;return e[0]!==t?(i=()=>{r.current=t},n=[t],e[0]=t,e[1]=i,e[2]=n):(i=e[1],n=e[2]),B.useEffect(i,n),r}function er(t,e){const r=I.c(5),i=ut(),n=B.useRef(null);let o,a;r[0]!==e||r[1]!==t||r[2]!==i?(o=()=>{if(!i||ir(n.current,t))return;let d=!0;return n.current=t,i.setRenderOptions(t).then(()=>{d&&e.current?.getInstance()?.render(!0)}).catch(tr),()=>{d=!1}},a=[e,t,i],r[0]=e,r[1]=t,r[2]=i,r[3]=o,r[4]=a):(o=r[3],a=r[4]),B.useEffect(o,a)}function tr(t){return console.warn("cmux diff worker render options update failed",t)}function ir(t,e){return t?.lineDiffType===e.lineDiffType&&t?.maxLineDiffLength===e.maxLineDiffLength&&t?.preferredHighlighter===e.preferredHighlighter&&rr(t?.theme,e.theme)&&t?.tokenizeMaxLineLength===e.tokenizeMaxLineLength&&t?.useTokenTransformer===e.useTokenTransformer}function rr(t,e){return t===e?!0:typeof t!="object"||t==null||typeof e!="object"||e==null?!1:t.dark===e.dark&&t.light===e.light}function nr(t,e){const r=I.c(4),i=B.useRef(null);let n,o;r[0]!==t||r[1]!==e?(n=()=>{const a=i.current;i.current=e;const d=si(a,e,e.paths);let l=d.kind==="append"?d.requiresFullGitStatus:!1;if(d.kind==="append"){if(d.addedPaths.length>0)try{t.batch(d.addedPaths.map(or)),l=!d.sourceFollowsPrevious}catch{const f=Ie(e.paths);t.resetPaths(e.paths,{preparedInput:f}),l=!0}}else{const f=Ie(e.paths);t.resetPaths(e.paths,{preparedInput:f}),l=!0}li(t,e,l)},o=[t,e],r[0]=t,r[1]=e,r[2]=n,r[3]=o):(n=r[2],o=r[3]),B.useEffect(n,o)}function or(t){return{type:"add",path:t}}function ar(t,e){const r=I.c(4);let i,n;r[0]!==e||r[1]!==t?(i=()=>{e?t.openSearch(""):t.closeSearch()},n=[e,t],r[0]=e,r[1]=t,r[2]=i,r[3]=n):(i=r[2],n=r[3]),B.useEffect(i,n)}function sr(t,e){const r=I.c(4);let i,n;r[0]!==t||r[1]!==e?(i=()=>{ci(t,e)},n=[t,e],r[0]=t,r[1]=e,r[2]=i,r[3]=n):(i=r[2],n=r[3]),B.useEffect(i,n)}function lr(t,e,r,i){const n=I.c(6),o=B.useRef(!1);let a,d;n[0]!==t||n[1]!==r||n[2]!==e||n[3]!==i?(a=()=>{if(o.current||fr(t.payload))return;o.current=!0;const l=t.payload??{},f=Pe(l.appearance);f.themes.light.name&&De(f.themes.light.name,()=>Promise.resolve(Ue(f.themes.light,f))),f.themes.dark.name&&De(f.themes.dark.name,()=>Promise.resolve(Ue(f.themes.dark,f)));const c=[];r({type:"set-status",status:ie(e("parsingDiff"),{loading:!0})}),Bt({getCollapsed:()=>i.current.options.collapsed,initialFileTreeRowCount:st(),label:e,onBatch:u=>{c.push(...u),r({type:"append-items",items:u})},onComplete:u=>{r({type:"set-metrics",metrics:u});const m=c;if(m.length===0){r({type:"set-status",status:ie(e("noFileDiffs"),{error:!0,loading:!1,statusOnly:!0})});return}const p=Array.from(new Set([f.theme?.light,f.theme?.dark].filter(Boolean))),g=Array.from(new Set(m.flatMap(dr)));xt({themes:p,langs:g.length>0?g:["text"]}).catch(cr)},onMetrics:u=>r({type:"set-metrics",metrics:u}),onRename:u=>r({type:"rename-item",oldId:u.oldId,newId:u.newId}),onTreeSource:u=>r({type:"set-tree-source",source:u}),parsePatchFiles:gt,patchURL:l.patchURL,processFile:ht}).catch(u=>{console.error("cmux diff viewer render failed",u),r({type:"set-status",status:ie(e("renderFailed"),{error:!0,loading:!1,statusOnly:!0})})})},d=[t,r,e,i],n[0]=t,n[1]=r,n[2]=e,n[3]=i,n[4]=a,n[5]=d):(a=n[4],d=n[5]),B.useEffect(a,d)}function cr(t){return console.warn("cmux diff highlighter preload failed",t)}function dr(t){const e=t.fileDiff??{},r=e.lang??bt(le(e,""))??"text";return r?[r]:[]}function fr(t){return t?.pendingReplacement===!0||typeof t?.statusMessage=="string"&&t.statusMessage.length>0}function ur(t,e,r){const i=I.c(5),n=B.useRef(!1);let o,a;i[0]!==r||i[1]!==e||i[2]!==t?(o=()=>{if(!n.current){if(n.current=!0,t.pendingReplacement===!0){r({type:"set-status",status:ie(t.statusMessage??e("loadingDiff"),{loading:!0,pending:!0})}),fetch("/__cmux_diff_viewer_wait"+location.pathname,{cache:"no-store"}).then(mr).catch(d=>{document.documentElement.dataset.cmuxDiffWait="failed",r({type:"set-status",status:ie(e("renderFailed"),{error:!0,loading:!1,statusOnly:!0})}),console.warn("cmux diff viewer deferred load failed",d)});return}typeof t.statusMessage=="string"&&t.statusMessage.length>0&&r({type:"set-status",status:ie(t.statusMessage,{error:t.statusIsError===!0,loading:!1,statusOnly:!0})})}},a=[r,e,t],i[0]=r,i[1]=e,i[2]=t,i[3]=o,i[4]=a):(o=i[3],a=i[4]),B.useEffect(o,a)}async function mr(t){if(!t.ok)throw new Error("replacement failed");(await t.text()).includes('data-cmux-diff-pending="true"')||window.location.reload()}function pr(t){const e=I.c(10);let r;e[0]!==t.filesVisible||e[1]!==t.items||e[2]!==t.metrics||e[3]!==t.options.diffIndicators||e[4]!==t.options.layout||e[5]!==t.options.wordWrap||e[6]!==t.status?(r=()=>{document.body.dataset.filesHidden=t.filesVisible?"false":"true",document.body.dataset.loading=t.status.loading?"true":"false",document.documentElement.dataset.layout=t.options.layout,document.documentElement.dataset.wordWrap=String(t.options.wordWrap),document.documentElement.dataset.diffIndicators=t.options.diffIndicators,t.metrics&&(document.body.dataset.streamFileCount=String(t.metrics.fileCount??t.items.length),document.body.dataset.streamRenderableFileCount=String(t.metrics.renderableFileCount??t.items.length),document.body.dataset.streamFlushCount=String(t.metrics.flushCount??0),document.body.dataset.streamMaxBatchSize=String(t.metrics.maxBatchSize??0),document.body.dataset.streamTreeRefreshCount=String(t.metrics.treeRefreshCount??0),Number.isFinite(t.metrics.completedAt)&&t.metrics.completedAt>0&&(document.body.dataset.streamElapsedMs=String(Math.round(t.metrics.completedAt-t.metrics.startedAt)))),ze(t.status)},e[0]=t.filesVisible,e[1]=t.items,e[2]=t.metrics,e[3]=t.options.diffIndicators,e[4]=t.options.layout,e[5]=t.options.wordWrap,e[6]=t.status,e[7]=r):r=e[7];let i;e[8]!==t?(i=[t],e[8]=t,e[9]=i):i=e[9],B.useEffect(r,i)}function hr(t,e,r){const i=I.c(12);let n;i[0]!==r||i[1]!==t.diffViewerOpenFileSearch||i[2]!==t.diffViewerScrollDown||i[3]!==t.diffViewerScrollToBottom||i[4]!==t.diffViewerScrollToTop||i[5]!==t.diffViewerScrollUp||i[6]!==e?(n=()=>{const a=ce(t.diffViewerScrollDown),d=ce(t.diffViewerScrollUp),l=ce(t.diffViewerScrollToBottom),f=ce(t.diffViewerScrollToTop),c=ce(t.diffViewerOpenFileSearch);let u=null,m=0;const p=()=>{u=null,m!==0&&(window.clearTimeout(m),m=0)},g=h=>{if(!(h.defaultPrevented||vr(h.target))){if(u&&!ve(u.shortcut.second,h)&&p(),u&&ve(u.shortcut.second,h)){h.preventDefault(),u.action(),p();return}if(he(a,h)){h.preventDefault(),He(e.current,1);return}if(he(d,h)){h.preventDefault(),He(e.current,-1);return}if(he(l,h)){h.preventDefault(),e.current?.scrollTo({top:e.current.scrollHeight,behavior:"auto"});return}if(he(c,h)){h.preventDefault(),r({type:"set-file-search-open",open:!0});return}f&&xr(f,h)&&(h.preventDefault(),u={shortcut:f,action:()=>e.current?.scrollTo({top:0,behavior:"auto"})},m=window.setTimeout(p,700))}};return document.addEventListener("keydown",g),()=>{p(),document.removeEventListener("keydown",g)}},i[0]=r,i[1]=t.diffViewerOpenFileSearch,i[2]=t.diffViewerScrollDown,i[3]=t.diffViewerScrollToBottom,i[4]=t.diffViewerScrollToTop,i[5]=t.diffViewerScrollUp,i[6]=e,i[7]=n):n=i[7];let o;i[8]!==r||i[9]!==t||i[10]!==e?(o=[r,t,e],i[8]=r,i[9]=t,i[10]=e,i[11]=o):o=i[11],B.useEffect(n,o)}function gr(t,e){const r=I.c(4);let i,n;r[0]!==e||r[1]!==t?(i=()=>{if(!t)return;const o=d=>{d.target instanceof Element&&d.target.closest("#toolbar")||e({type:"set-options-open",open:!1})},a=d=>{d.key==="Escape"&&e({type:"set-options-open",open:!1})};return document.addEventListener("click",o),document.addEventListener("keydown",a),()=>{document.removeEventListener("click",o),document.removeEventListener("keydown",a)}},n=[e,t],r[0]=e,r[1]=t,r[2]=i,r[3]=n):(i=r[2],n=r[3]),B.useEffect(i,n)}function ce(t){return!t||t.unbound===!0||!t.first?null:{first:Ge(t.first),second:t.second?Ge(t.second):null}}function Ge(t){return{key:String(t?.key??"").toLowerCase(),command:t?.command===!0,shift:t?.shift===!0,option:t?.option===!0,control:t?.control===!0}}function he(t,e){return!!(t&&!t.second&&ve(t.first,e))}function xr(t,e){return!!(t.second&&ve(t.first,e))}function ve(t,e){return!t||e.metaKey!==t.command||e.ctrlKey!==t.control||e.altKey!==t.option||e.shiftKey!==t.shift?!1:br(e)===t.key}function br(t){return t.code==="Space"?"space":typeof t.key!="string"||t.key.length===0?"":(t.key.length===1,t.key.toLowerCase())}function vr(t){return!!(t instanceof Element?t:null)?.closest("input, textarea, select, [contenteditable='true']")}function He(t,e){if(!t)return;const r=Math.max(80,Math.floor(t.clientHeight*.38));t.scrollBy({top:e*r,behavior:"auto"})}function wr(t,e){return e.some(r=>r.id===t)?t:e[0]?.id??""}function st(){const t=window.visualViewport?.height??window.innerHeight;return!Number.isFinite(t)||t<=0?25:Math.min(96,Math.max(25,Math.ceil(t/24)))}const yr=`@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-outline-style:solid}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--font-weight-medium:500;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--ease-out:cubic-bezier(0, 0, .2, 1);--blur-sm:8px;--blur-lg:16px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.\\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.top-0{top:calc(var(--spacing) * 0)}.top-1\\/2{top:50%}.right-2\\.5{right:calc(var(--spacing) * 2.5)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-\\[calc\\(100\\%\\+6px\\)\\]{bottom:calc(100% + 6px)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-px{margin:1px}.mx-3\\.5{margin-inline:calc(var(--spacing) * 3.5)}.ms-1{margin-inline-start:calc(var(--spacing) * 1)}.mt-1\\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-3\\.5{margin-top:calc(var(--spacing) * 3.5)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-\\[3px\\]{margin-right:3px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-px{margin-bottom:1px}.ml-1\\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-16{width:calc(var(--spacing) * 16);height:calc(var(--spacing) * 16)}.size-\\[22px\\]{width:22px;height:22px}.\\!h-auto{height:auto!important}.h-0{height:calc(var(--spacing) * 0)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-\\[1lh\\]{height:1lh}.h-\\[1px\\]{height:1px}.h-\\[11px\\]{height:11px}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.max-h-\\[25dvh\\]{max-height:25dvh}.max-h-\\[140px\\]{max-height:140px}.max-h-none{max-height:none}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\\[1\\.25rem\\]{min-height:1.25rem}.w-2\\/5{width:40%}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-7{width:calc(var(--spacing) * 7)}.w-52{width:calc(var(--spacing) * 52)}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-16{max-width:calc(var(--spacing) * 16)}.max-w-20{max-width:calc(var(--spacing) * 20)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-\\[60\\%\\]{max-width:60%}.max-w-\\[77\\%\\]{max-width:77%}.max-w-\\[320px\\]{max-width:320px}.max-w-full{max-width:100%}.max-w-none{max-width:none}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-56{min-width:calc(var(--spacing) * 56)}.min-w-max{min-width:max-content}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.-translate-y-1\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-\\[16px_minmax\\(0\\,1fr\\)_44px\\]{grid-template-columns:16px minmax(0,1fr) 44px}.grid-cols-\\[42px_minmax\\(0\\,1fr\\)\\]{grid-template-columns:42px minmax(0,1fr)}.grid-cols-\\[72px_minmax\\(0\\,1fr\\)_96px\\]{grid-template-columns:72px minmax(0,1fr) 96px}.grid-cols-\\[auto_minmax\\(0\\,1fr\\)_auto\\]{grid-template-columns:auto minmax(0,1fr) auto}.grid-cols-\\[minmax\\(0\\,auto\\)_auto_minmax\\(0\\,1fr\\)\\]{grid-template-columns:minmax(0,auto) auto minmax(0,1fr)}.flex-col{flex-direction:column}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-\\[5px\\]{gap:5px}:where(.space-y-\\[13px\\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(13px * var(--tw-space-y-reverse));margin-block-end:calc(13px * calc(1 - var(--tw-space-y-reverse)))}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\\[5px\\]{border-radius:5px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_18\\%\\,transparent\\)\\]{border-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.border-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_18\\%\\,transparent\\)\\]{border-color:color-mix(in lab,var(--cmux-diff-fg) 18%,transparent)}}.border-\\[color\\:var\\(--gray-0\\)\\]{border-color:var(--gray-0)}.border-\\[var\\(--cmux-diff-border\\)\\]{border-color:var(--cmux-diff-border)}.border-transparent{border-color:#0000}.bg-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_5\\%\\,transparent\\)\\]{background-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.bg-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_5\\%\\,transparent\\)\\]{background-color:color-mix(in lab,var(--cmux-diff-fg) 5%,transparent)}}.bg-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_10\\%\\,transparent\\)\\]{background-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.bg-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_10\\%\\,transparent\\)\\]{background-color:color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}.bg-\\[color\\:var\\(--gray-0\\)\\]{background-color:var(--gray-0)}.bg-\\[var\\(--cmux-diff-muted-bg\\)\\]{background-color:var(--cmux-diff-muted-bg)}.\\[mask-image\\:linear-gradient\\(to_right\\,black_calc\\(100\\%_-_0\\.25rem\\)\\,transparent\\)\\]{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - .25rem),#0000);mask-image:linear-gradient(90deg,#000 calc(100% - .25rem),#0000)}.\\[mask-repeat\\:no-repeat\\]{-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.object-cover{object-fit:cover}.p-0\\.5{padding:calc(var(--spacing) * .5)}.p-2{padding:calc(var(--spacing) * 2)}.\\!px-0{padding-inline:calc(var(--spacing) * 0)!important}.px-0\\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-\\[7px\\]{padding-inline:7px}.px-\\[var\\(--padding-row-x\\)\\]{padding-inline:var(--padding-row-x)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-\\[var\\(--padding-row-y\\)\\]{padding-block:var(--padding-row-y)}.pt-0\\.5{padding-top:calc(var(--spacing) * .5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pr-0{padding-right:calc(var(--spacing) * 0)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-left{text-align:left}.align-bottom{vertical-align:bottom}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\!leading-none{--tw-leading:1!important;line-height:1!important}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-\\[18px\\]{--tw-leading:18px;line-height:18px}.leading-\\[calc\\(var\\(--codex-chat-font-size\\)\\+8px\\)\\]{--tw-leading:calc(var(--codex-chat-font-size) + 8px);line-height:calc(var(--codex-chat-font-size) + 8px)}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.break-words{overflow-wrap:break-word}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.text-current{color:currentColor}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-\\[0\\.5px\\]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(.5px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-none{-webkit-user-select:none;user-select:none}.\\[--edge-fade-distance\\:2rem\\]{--edge-fade-distance:2rem}.group-focus-within\\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media(hover:hover){.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\\:bg-transparent:hover{background-color:#0000}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-40:disabled{opacity:.4}.data-\\[state\\=checked\\]\\:translate-x-\\[14px\\][data-state=checked]{--tw-translate-x:14px;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\\[state\\=unchecked\\]\\:translate-x-\\[2px\\][data-state=unchecked]{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y)}@container (min-width:500px){.\\@\\[500px\\]\\:inline{display:inline}}.\\[\\&_\\.ProseMirror\\]\\:\\!h-5 .ProseMirror{height:calc(var(--spacing) * 5)!important}.\\[\\&_\\.ProseMirror\\]\\:h-auto .ProseMirror{height:auto}.\\[\\&_\\.ProseMirror\\]\\:\\!min-h-5 .ProseMirror{min-height:calc(var(--spacing) * 5)!important}.\\[\\&_\\.ProseMirror\\]\\:min-h-\\[2rem\\] .ProseMirror{min-height:2rem}.\\[\\&_\\.ProseMirror\\]\\:min-w-0 .ProseMirror{min-width:calc(var(--spacing) * 0)}.\\[\\&_\\.ProseMirror\\]\\:flex-1 .ProseMirror{flex:1}.\\[\\&_\\.ProseMirror\\]\\:resize-none .ProseMirror{resize:none}.\\[\\&_\\.ProseMirror\\]\\:overflow-hidden .ProseMirror{overflow:hidden}.\\[\\&_\\.ProseMirror\\]\\:leading-5 .ProseMirror{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.\\[\\&_\\.ProseMirror\\]\\:whitespace-nowrap .ProseMirror{white-space:nowrap}.\\[\\&_\\.ProseMirror\\]\\:focus-visible\\:outline-none .ProseMirror:focus-visible{--tw-outline-style:none;outline-style:none}.\\[\\&_\\.ProseMirror_p\\]\\:m-0 .ProseMirror p{margin:calc(var(--spacing) * 0)}.\\[\\&_\\.ProseMirror_p\\]\\:overflow-hidden .ProseMirror p{overflow:hidden}.\\[\\&_\\.ProseMirror_p\\]\\:text-ellipsis .ProseMirror p{text-overflow:ellipsis}.\\[\\&_\\.ProseMirror_p\\]\\:whitespace-nowrap .ProseMirror p{white-space:nowrap}.\\[\\&_\\.contain-inline-size\\]\\:\\[contain\\:initial\\] .contain-inline-size{contain:initial}.\\[\\&\\>\\*\\:last-child\\]\\:mb-0>:last-child{margin-bottom:calc(var(--spacing) * 0)}.\\[\\&\\>ol\\:first-child\\]\\:mt-0>ol:first-child,.\\[\\&\\>ul\\:first-child\\]\\:mt-0>ul:first-child{margin-top:calc(var(--spacing) * 0)}}:root{color-scheme:light dark;--cmux-diff-bg-light:#fff;--cmux-diff-bg-dark:#000;--cmux-diff-fg-light:#000;--cmux-diff-fg-dark:#fff;--cmux-diff-selection-bg-light:#abd8ff;--cmux-diff-selection-bg-dark:#3f638b;--cmux-diff-ui-font-family:system-ui, -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", Arial, sans-serif;--cmux-diff-ui-font-size:12px;--cmux-diff-ui-line-height:16px;--cmux-diff-code-font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;--cmux-diff-font-size:10px;--cmux-diff-line-height:20px;--cmux-diff-bg:var(--cmux-diff-bg-light);--cmux-diff-fg:var(--cmux-diff-fg-light);--cmux-diff-border:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-border:color-mix(in lab, var(--cmux-diff-fg) 12%, transparent)}}:root{--cmux-diff-toolbar-bg:var(--cmux-diff-bg);--cmux-diff-sidebar-bg:var(--cmux-diff-bg);--cmux-diff-muted-bg:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-muted-bg:color-mix(in lab, var(--cmux-diff-fg) 8%, transparent)}}:root{--cmux-diff-hover-bg:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-hover-bg:color-mix(in lab, var(--cmux-diff-fg) 10%, transparent)}}:root{--cmux-diff-accent:light-dark(#0a84ff,#7ab7ff);--cmux-diff-text-muted:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-text-muted:color-mix(in lab, var(--cmux-diff-fg) 72%, var(--cmux-diff-bg))}}:root{--cmux-diff-text-subtle:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-text-subtle:color-mix(in lab, var(--cmux-diff-fg) 84%, var(--cmux-diff-bg))}}:root{--cmux-diff-surface-fill-light:var(--cmux-diff-bg-light);--cmux-diff-surface-fill-dark:var(--cmux-diff-bg-dark);--cmux-diff-surface-fill:var(--cmux-diff-surface-fill-light);background:var(--cmux-diff-surface-fill);color:var(--cmux-diff-fg)}@media(prefers-color-scheme:dark){:root{--cmux-diff-bg:var(--cmux-diff-bg-dark);--cmux-diff-fg:var(--cmux-diff-fg-dark);--cmux-diff-surface-fill:var(--cmux-diff-surface-fill-dark)}}*{box-sizing:border-box}html,body{background:var(--cmux-diff-surface-fill);height:100%;overflow:hidden}body{background:var(--cmux-diff-surface-fill);height:100vh;min-height:0;color:var(--cmux-diff-fg);font-family:var(--cmux-diff-ui-font-family);font-size:var(--cmux-diff-ui-font-size);line-height:var(--cmux-diff-ui-line-height);flex-direction:column;margin:0;display:flex;overflow:hidden}#root{background:0 0;height:100%;min-height:0}#app{overscroll-behavior:contain;contain:strict;height:100vh;min-height:0;color:inherit;background:0 0;grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr);display:grid;overflow:hidden}.copy-fallback-textarea{opacity:0;pointer-events:none;width:1px;height:1px;position:fixed;top:0;left:-9999px}#toolbar{border-bottom:1px solid var(--cmux-diff-border);background:var(--cmux-diff-toolbar-bg);min-height:32px;color:var(--cmux-diff-fg);flex:none;grid-template-columns:minmax(0,1.1fr) minmax(124px,.9fr) auto;align-items:center;gap:7px;padding:3px 4px 3px 8px;display:grid;position:relative}@supports (color:color-mix(in lab,red,red)){#toolbar{color:color-mix(in lab,var(--cmux-diff-fg) 76%,var(--cmux-diff-bg))}}#toolbar{z-index:50}.toolbar-left,.toolbar-middle,.toolbar-actions{align-items:center;min-width:0;display:flex}.toolbar-left,.toolbar-middle{gap:6px}.toolbar-left{justify-self:stretch}.toolbar-middle{justify-content:center}.toolbar-actions{justify-self:end;gap:4px}#source-select,#repo-select,#base-select,#jump-select{appearance:none;background:linear-gradient(45deg,transparent 50%,currentColor 50%) right 11px center / 4px 4px no-repeat,linear-gradient(135deg,currentColor 50%,transparent 50%) right 7px center / 4px 4px no-repeat,var(--cmux-diff-fg);border:1px solid #0000;border-radius:6px;min-width:0;max-width:100%;height:24px;padding:0 24px 0 9px}@supports (color:color-mix(in lab,red,red)){#source-select,#repo-select,#base-select,#jump-select{background:linear-gradient(45deg,transparent 50%,currentColor 50%) right 11px center / 4px 4px no-repeat,linear-gradient(135deg,currentColor 50%,transparent 50%) right 7px center / 4px 4px no-repeat,color-mix(in lab,var(--cmux-diff-fg) 7%,transparent)}}#source-select,#repo-select,#base-select,#jump-select{color:inherit;font:inherit}#source-select{flex:0 118px}#source-select:hover,#repo-select:hover,#base-select:hover,#jump-select:hover{border-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#source-select:hover,#repo-select:hover,#base-select:hover,#jump-select:hover{border-color:color-mix(in lab,var(--cmux-diff-fg) 24%,transparent)}}#source-select:hover,#repo-select:hover,#base-select:hover,#jump-select:hover{background-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#source-select:hover,#repo-select:hover,#base-select:hover,#jump-select:hover{background-color:color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}#source-select[hidden],#repo-select[hidden],#base-select[hidden],#jump-select[hidden]{display:none}#jump-select{width:100%}#repo-select{flex:0 132px}#base-select{flex:0 120px}#source-select:focus,#repo-select:focus,#base-select:focus,#jump-select:focus,.toolbar-icon:focus-visible,.menu-item:focus-visible,.file-entry:focus-visible{outline:2px solid var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#source-select:focus,#repo-select:focus,#base-select:focus,#jump-select:focus,.toolbar-icon:focus-visible,.menu-item:focus-visible,.file-entry:focus-visible{outline:2px solid color-mix(in lab,var(--cmux-diff-fg) 36%,transparent)}}#source-select:focus,#repo-select:focus,#base-select:focus,#jump-select:focus,.toolbar-icon:focus-visible,.menu-item:focus-visible,.file-entry:focus-visible{outline-offset:1px}@media(max-width:760px){#toolbar{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"source actions""jump actions"}.toolbar-left{grid-area:source}.toolbar-middle{grid-area:jump;justify-content:stretch}.toolbar-actions{grid-area:actions}}.toolbar-icon{width:20px;height:20px;color:var(--cmux-diff-fg);background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.toolbar-icon{color:color-mix(in lab,var(--cmux-diff-fg) 60%,var(--cmux-diff-bg))}}.toolbar-icon{cursor:pointer;padding:0}.toolbar-icon:hover,.toolbar-icon[aria-expanded=true]{border-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.toolbar-icon:hover,.toolbar-icon[aria-expanded=true]{border-color:color-mix(in lab,var(--cmux-diff-fg) 14%,transparent)}}.toolbar-icon:hover,.toolbar-icon[aria-expanded=true]{background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.toolbar-icon:hover,.toolbar-icon[aria-expanded=true]{background:color-mix(in lab,var(--cmux-diff-fg) 9%,transparent)}}.toolbar-icon:hover,.toolbar-icon[aria-expanded=true],.toolbar-icon[aria-pressed=true]{color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.toolbar-icon[aria-pressed=true]{color:color-mix(in lab,var(--cmux-diff-fg) 78%,var(--cmux-diff-bg))}}.toolbar-icon[hidden]{display:none}.toolbar-icon svg,.menu-item svg{fill:none;stroke:currentColor;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;width:14px;height:14px;display:block}#layout-toggle svg [data-diff-deletion],#layout-toggle svg [data-diff-addition]{stroke:none}#layout-toggle svg [data-diff-deletion]{fill:light-dark(var(--cmux-diff-deletion-fg-light),var(--cmux-diff-deletion-fg-dark))}#layout-toggle svg [data-diff-addition]{fill:light-dark(var(--cmux-diff-addition-fg-light),var(--cmux-diff-addition-fg-dark))}.toolbar-icon svg [data-precision-dot],.menu-item svg [data-precision-dot]{stroke-width:2px}#options-menu{border:1px solid var(--cmux-diff-fg);min-width:246px;padding:8px;position:absolute;top:calc(100% + 7px);right:10px}@supports (color:color-mix(in lab,red,red)){#options-menu{border:1px solid color-mix(in lab,var(--cmux-diff-fg) 13%,transparent)}}#options-menu{background:var(--cmux-diff-bg);z-index:100;border-radius:8px;box-shadow:0 16px 34px lab(0% none none/.28)}#options-menu[hidden]{display:none}.menu-separator{background:var(--cmux-diff-fg);height:1px;margin:7px 6px}@supports (color:color-mix(in lab,red,red)){.menu-separator{background:color-mix(in lab,var(--cmux-diff-fg) 12%,transparent)}}.menu-item{width:100%;min-height:31px;color:var(--cmux-diff-fg);background:0 0;border:0;border-radius:6px;grid-template-columns:22px minmax(0,1fr) 18px;align-items:center;gap:10px;display:grid}@supports (color:color-mix(in lab,red,red)){.menu-item{color:color-mix(in lab,var(--cmux-diff-fg) 86%,var(--cmux-diff-bg))}}.menu-item{font:inherit;text-align:left;padding:0 7px}.menu-item:hover:not(:disabled){background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.menu-item:hover:not(:disabled){background:color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}.menu-item:hover:not(:disabled){color:var(--cmux-diff-fg)}.menu-segment{cursor:default}.menu-segment:hover{background:0 0}.menu-segment-controls{background:0 0;border-radius:7px;justify-self:end;align-items:center;gap:2px;padding:2px;display:inline-flex}.segment-button{width:27px;height:24px;color:var(--cmux-diff-fg);background:0 0;border:0;border-radius:5px;justify-content:center;align-items:center;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.segment-button{color:color-mix(in lab,var(--cmux-diff-fg) 62%,var(--cmux-diff-bg))}}.segment-button{padding:0}.segment-button:hover,.segment-button[aria-pressed=true]{background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.segment-button:hover,.segment-button[aria-pressed=true]{background:color-mix(in lab,var(--cmux-diff-fg) 12%,transparent)}}.segment-button:hover,.segment-button[aria-pressed=true],.menu-item:disabled{color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.menu-item:disabled{color:color-mix(in lab,var(--cmux-diff-fg) 36%,var(--cmux-diff-bg))}}.menu-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.menu-check{justify-self:end}#content{--cmux-diff-files-width:252px;grid-template-columns:minmax(0,1fr) var(--cmux-diff-files-width);overscroll-behavior:contain;contain:strict;background:0 0;flex:auto;grid-template-rows:minmax(0,1fr);grid-template-areas:"viewer files";min-width:0;min-height:0;display:grid;position:relative;overflow:hidden}body[data-files-hidden=true] #content{grid-template-columns:minmax(0,1fr) 0}body[data-status-only=true] #content{grid-template-columns:minmax(0,1fr);grid-template-areas:"viewer"}#files-sidebar{border-left:1px solid var(--cmux-diff-border);background:var(--cmux-diff-sidebar-bg);contain:strict;opacity:1;flex-direction:column;grid-area:files;width:100%;min-width:0;height:100%;min-height:0;transition:opacity .1s,visibility linear;display:flex;position:relative;overflow:hidden}#files-resize-handle{z-index:3;appearance:none;cursor:col-resize;background:0 0;border:0;outline:none;width:8px;margin:0;padding:0;position:absolute;top:0;bottom:0;left:0}#files-resize-handle:after{content:"";background:0 0;width:1px;position:absolute;top:0;bottom:0;left:0}body[data-files-hidden=true] #files-sidebar{opacity:0;pointer-events:none;visibility:hidden;transition:opacity .1s,visibility 0s linear .1s}body[data-status-only=true] #files-sidebar{display:none}#files-header{z-index:1;border-bottom:1px solid var(--cmux-diff-border);background:var(--cmux-diff-sidebar-bg);min-height:30px;color:var(--cmux-diff-text-muted);justify-content:space-between;align-items:center;gap:8px;padding:0 7px 0 10px;display:flex;position:relative}#files-title{align-items:center;gap:6px;min-width:0;display:inline-flex}#files-header-actions{flex:none;align-items:center;gap:2px;display:inline-flex}#file-search-toggle{width:24px;height:24px;color:var(--cmux-diff-text-muted);background:0 0;border:0;border-radius:5px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}#file-search-toggle:hover,#file-search-toggle[aria-pressed=true]{background:var(--cmux-diff-hover-bg);color:var(--cmux-diff-fg)}#file-search-toggle svg{fill:none;stroke:currentColor;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;width:15px;height:15px}#file-list{background:var(--cmux-diff-sidebar-bg);--trees-bg-override:var(--cmux-diff-sidebar-bg);--trees-fg-override:var(--cmux-diff-text-subtle);--trees-fg-muted-override:var(--cmux-diff-text-muted);--trees-bg-muted-override:var(--cmux-diff-hover-bg);--trees-selected-bg-override:var(--cmux-diff-fg);flex:auto;min-height:0;padding:6px 4px 6px 6px;overflow:hidden}@supports (color:color-mix(in lab,red,red)){#file-list{--trees-selected-bg-override:color-mix(in lab, var(--cmux-diff-fg) 11%, transparent)}}#file-list{--trees-selected-fg-override:var(--cmux-diff-fg);--trees-selected-focused-border-color-override:transparent;--trees-border-color-override:var(--cmux-diff-border);--trees-focus-ring-color-override:var(--cmux-diff-accent)}@supports (color:color-mix(in lab,red,red)){#file-list{--trees-focus-ring-color-override:color-mix(in lab, var(--cmux-diff-accent) 72%, transparent)}}#file-list{--trees-font-family-override:var(--cmux-diff-ui-font-family);--trees-font-size-override:var(--cmux-diff-ui-font-size);--trees-font-weight-semibold-override:500;--trees-density-override:.78;--trees-border-radius-override:5px;--trees-item-padding-x-override:7px;--trees-item-margin-x-override:0;--trees-padding-inline-override:8px;--trees-search-bg-override:var(--cmux-diff-bg)}@supports (color:color-mix(in lab,red,red)){#file-list{--trees-search-bg-override:color-mix(in lab, var(--cmux-diff-bg) 92%, var(--cmux-diff-fg))}}#file-list{--trees-status-added-override:light-dark(var(--cmux-diff-addition-fg-light),var(--cmux-diff-addition-fg-dark));--trees-status-modified-override:var(--cmux-diff-accent);--trees-status-renamed-override:light-dark(#a26300,#ffd166);--trees-status-deleted-override:light-dark(var(--cmux-diff-deletion-fg-light),var(--cmux-diff-deletion-fg-dark))}body[data-loading=false] .diff-loading-placeholder,body[data-loading=false]:not([data-status-only=true]) #loading-layer{display:none}#file-list file-tree-container{width:100%;height:100%;min-height:0;display:block}.file-entry{width:100%;min-height:30px;color:inherit;font:inherit;text-align:left;background:0 0;border:0;border-radius:6px;grid-template-columns:18px minmax(0,1fr) auto;align-items:center;gap:8px;padding:3px 7px;display:grid}.file-entry:hover,.file-entry[aria-current=true]{background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.file-entry:hover,.file-entry[aria-current=true]{background:color-mix(in lab,var(--cmux-diff-fg) 9%,transparent)}}.file-status{width:17px;height:17px;color:var(--cmux-diff-text-muted);border:1px solid;border-radius:5px;justify-content:center;align-items:center;font-size:9px;line-height:1;display:inline-flex}.file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.file-stats{color:var(--cmux-diff-text-muted);gap:5px;display:inline-flex}.stat-add{color:light-dark(var(--cmux-diff-addition-fg-light),var(--cmux-diff-addition-fg-dark))}.stat-del{color:light-dark(var(--cmux-diff-deletion-fg-light),var(--cmux-diff-deletion-fg-dark))}#viewer{--diffs-font-family:var(--cmux-diff-code-font-family);--diffs-header-font-family:var(--cmux-diff-ui-font-family);--diffs-font-size:var(--cmux-diff-font-size);--diffs-line-height:var(--cmux-diff-line-height);--diffs-bg-selection-override:light-dark(var(--cmux-diff-selection-bg-light),var(--cmux-diff-selection-bg-dark));overscroll-behavior:contain;overflow-anchor:none;contain:strict;border-bottom:1px solid var(--cmux-diff-border);background:0 0;grid-area:viewer;width:100%;min-width:0;height:100%;min-height:0;position:relative;overflow:clip auto}.code-view-root{overscroll-behavior:contain;overflow-anchor:none;contain:strict;width:100%;min-width:0;height:100%;min-height:0;position:relative;overflow:clip auto}@media(max-width:520px){#content,body[data-files-hidden=true] #content{grid-template-columns:minmax(0,1fr);grid-template-areas:"viewer"}#files-sidebar{display:none}}@media(prefers-reduced-motion:reduce){#files-sidebar{transition:none}}#viewer diffs-container{--diffs-font-family:var(--cmux-diff-code-font-family);--diffs-header-font-family:var(--cmux-diff-ui-font-family);--diffs-font-size:var(--cmux-diff-font-size);--diffs-line-height:var(--cmux-diff-line-height);--diffs-bg-selection-override:light-dark(var(--cmux-diff-selection-bg-light),var(--cmux-diff-selection-bg-dark));contain:layout paint style;display:block;overflow:clip}#loading-layer{z-index:4;pointer-events:none;contain:strict;background:0 0;grid-area:viewer;position:absolute;inset:0;overflow:hidden}body[data-status-only=true] #loading-layer{pointer-events:auto;justify-content:center;align-items:center;width:100%;height:100%;padding:32px;display:flex;position:static}#status{z-index:5;border:1px solid var(--cmux-diff-fg);align-items:center;gap:10px;max-width:calc(100% - 24px);min-height:32px;padding:8px 12px;display:flex;position:absolute;top:10px;left:12px}@supports (color:color-mix(in lab,red,red)){#status{border:1px solid color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}#status{background:var(--cmux-diff-bg);font-family:var(--cmux-diff-ui-font-family);font-size:13px;line-height:var(--cmux-diff-ui-line-height);color:var(--cmux-diff-fg);border-radius:7px}@supports (color:color-mix(in lab,red,red)){#status{color:color-mix(in lab,var(--cmux-diff-fg) 70%,var(--cmux-diff-bg))}}body[data-status-only=true] #status{text-align:center;text-wrap:balance;width:auto;max-width:340px;min-height:0;color:var(--cmux-diff-fg);background:0 0;border:0;border-radius:0;flex-direction:column;justify-content:center;align-items:center;gap:14px;padding:0;font-size:14px;line-height:1.55;position:static}@supports (color:color-mix(in lab,red,red)){body[data-status-only=true] #status{color:color-mix(in lab,var(--cmux-diff-fg) 58%,var(--cmux-diff-bg))}}body[data-status-only=true] #status-text{letter-spacing:.005em;font-weight:500}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}#status-icon{display:none}body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon{background:var(--cmux-diff-fg);border-radius:16px;justify-content:center;align-items:center;width:56px;height:56px;display:flex}@supports (color:color-mix(in lab,red,red)){body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon{background:color-mix(in lab,var(--cmux-diff-fg) 5%,transparent)}}body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon{border:1px solid var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon{border:1px solid color-mix(in lab,var(--cmux-diff-fg) 8%,transparent)}}body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon:before{content:"";opacity:.8;background-color:currentColor;width:26px;height:26px;display:block;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z'/%3E%3Cpath d='M14 2v6h6'/%3E%3Cpath d='M9 13h6'/%3E%3Cpath d='M9 17h4'/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z'/%3E%3Cpath d='M14 2v6h6'/%3E%3Cpath d='M9 13h6'/%3E%3Cpath d='M9 17h4'/%3E%3C/svg%3E") 50%/contain no-repeat}#status[data-pending=true]:before,body[data-loading=true] #status:before{content:"";border:2px solid var(--cmux-diff-fg);flex:none;width:14px;height:14px}@supports (color:color-mix(in lab,red,red)){#status[data-pending=true]:before,body[data-loading=true] #status:before{border:2px solid color-mix(in lab,var(--cmux-diff-fg) 20%,transparent)}}#status[data-pending=true]:before,body[data-loading=true] #status:before{border-top-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#status[data-pending=true]:before,body[data-loading=true] #status:before{border-top-color:color-mix(in lab,var(--cmux-diff-fg) 70%,var(--cmux-diff-bg))}}#status[data-pending=true]:before,body[data-loading=true] #status:before{border-radius:50%;animation:.8s linear infinite cmuxDiffPendingSpin}#status[data-error=true]{color:light-dark(#b42318,#ff8a80)}@keyframes cmuxDiffPendingSpin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){#status[data-pending=true]:before,body[data-loading=true] #status:before{animation:none}}#comments-section{border-top:1px solid var(--cmux-diff-border);background:var(--cmux-diff-sidebar-bg);flex-direction:column;flex:none;min-height:0;max-height:40%;display:flex}#comments-header{min-height:30px;color:var(--cmux-diff-text-muted);font-size:var(--cmux-diff-ui-font-size);align-items:center;padding:0 10px;display:flex}#comments-list{flex-direction:column;gap:4px;min-height:0;padding:0 6px 6px;display:flex;overflow-y:auto}.comments-empty{color:var(--cmux-diff-text-muted);font-size:var(--cmux-diff-ui-font-size);padding:2px 7px 6px}.comment-entry{color:var(--cmux-diff-text-subtle);font:inherit;font-size:var(--cmux-diff-ui-font-size);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:5px;flex-direction:column;gap:2px;padding:5px 7px;display:flex}.comment-entry:hover{background:var(--cmux-diff-hover-bg)}.comment-entry-header{justify-content:space-between;align-items:center;gap:6px;display:flex}.comment-entry-location{color:var(--cmux-diff-fg);text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}.comment-entry-badge{background:var(--cmux-diff-muted-bg);color:var(--cmux-diff-text-muted);font-size:calc(var(--cmux-diff-ui-font-size) - 1px);border-radius:4px;flex:none;padding:0 5px}.comment-entry-message{text-overflow:ellipsis;white-space:nowrap;color:var(--cmux-diff-text-muted);overflow:hidden}.comment-composer,.comment-card{border:1px solid var(--cmux-diff-border);background:light-dark(var(--cmux-diff-bg),var(--cmux-diff-bg));border-radius:10px;flex-direction:column;gap:8px;max-width:680px;margin:8px 12px;padding:10px 12px;display:flex}@supports (color:color-mix(in lab,red,red)){.comment-composer,.comment-card{background:light-dark(color-mix(in lab,var(--cmux-diff-bg) 92%,#fff),color-mix(in lab,var(--cmux-diff-bg) 90%,#fff))}}.comment-composer,.comment-card{color:var(--cmux-diff-fg);font-family:var(--cmux-diff-ui-font-family);font-size:13px;line-height:1.45;box-shadow:0 1px 2px lab(0% none none/.1),0 2px 8px lab(0% none none/.06)}.comment-composer:focus-within{border-color:var(--cmux-diff-accent)}@supports (color:color-mix(in lab,red,red)){.comment-composer:focus-within{border-color:color-mix(in lab,var(--cmux-diff-accent) 60%,var(--cmux-diff-border))}}.comment-composer:focus-within{box-shadow:0 0 0 3px var(--cmux-diff-accent)}@supports (color:color-mix(in lab,red,red)){.comment-composer:focus-within{box-shadow:0 0 0 3px color-mix(in lab,var(--cmux-diff-accent) 18%,transparent)}}.comment-composer-input{box-sizing:border-box;resize:none;width:100%;min-height:52px;color:var(--cmux-diff-fg);font:inherit;background:0 0;border:0;padding:0}.comment-composer-input::placeholder{color:var(--cmux-diff-text-muted)}.comment-composer-input:focus-visible{outline:none}.comment-composer-footer{justify-content:space-between;align-items:center;gap:8px;display:flex}.comment-composer-buttons{gap:6px;display:inline-flex}.comment-button{color:var(--cmux-diff-text-muted);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;padding:4px 12px;font-weight:500}.comment-button:hover:not(:disabled){background:var(--cmux-diff-hover-bg);color:var(--cmux-diff-fg)}.comment-button:disabled{opacity:.5;cursor:default}.comment-button-primary{background:var(--cmux-diff-accent);color:light-dark(#fff,#08233f)}.comment-button-primary:hover:not(:disabled){background:var(--cmux-diff-accent)}@supports (color:color-mix(in lab,red,red)){.comment-button-primary:hover:not(:disabled){background:color-mix(in lab,var(--cmux-diff-accent) 86%,var(--cmux-diff-fg))}}.comment-button-primary:hover:not(:disabled){color:light-dark(#fff,#08233f)}.comment-card-header{justify-content:space-between;align-items:center;gap:8px;min-height:20px;display:flex}.comment-card-location{font-weight:500;font-size:calc(var(--cmux-diff-ui-font-size) - 1px);color:var(--cmux-diff-text-muted)}.comment-card-actions{opacity:0;gap:2px;transition:opacity .1s;display:inline-flex}.comment-card:hover .comment-card-actions,.comment-card:focus-within .comment-card-actions{opacity:1}.comment-card-action{color:var(--cmux-diff-text-muted);font:inherit;font-size:calc(var(--cmux-diff-ui-font-size) - 1px);cursor:pointer;background:0 0;border:0;border-radius:4px;padding:1px 6px}.comment-card-action:hover{background:var(--cmux-diff-hover-bg);color:var(--cmux-diff-fg)}.comment-card-message{white-space:pre-wrap;overflow-wrap:anywhere}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}`;function kr(){const t=document.getElementById("cmux-diff-viewer-config");if(!t?.textContent)throw new Error("Missing cmux diff viewer config");return JSON.parse(t.textContent)}function Ir(t){const e=kr();wt("diff",yr),Ct(Pe(e.payload?.appearance)),typeof e.payload?.title=="string"&&e.payload.title.trim()!==""&&(document.title=e.payload.title);const r=rt(e.payload?.labels,{assertMissing:it()}),i=xi(e,r);document.body.dataset.filesHidden="false",ze(i);const n=yt(()=>s.jsx(Mi,{config:e,initialStatus:i}));lt.createRoot(t).render(s.jsx(ct,{router:n}))}export{Ir as mountDiffSurface}; + `}function ct(t,e){const r=t.palette??{},i=Kt(t.background,e),n=ue(t.foreground,i,t.type==="light"?"#000000":"#ffffff"),o=(s,l=n)=>ue(s,i,l);return{name:t.name,displayName:t.ghosttyName,type:t.type,colors:{"editor.background":i,"editor.foreground":n,"terminal.background":i,"terminal.foreground":n,"terminal.ansiBlack":o(r[0]),"terminal.ansiRed":o(r[1]),"terminal.ansiGreen":o(r[2]),"terminal.ansiYellow":o(r[3]),"terminal.ansiBlue":o(r[4]),"terminal.ansiMagenta":o(r[5]),"terminal.ansiCyan":o(r[6]),"terminal.ansiWhite":o(r[7]),"terminal.ansiBrightBlack":o(r[8]),"terminal.ansiBrightRed":o(r[9],o(r[1])),"terminal.ansiBrightGreen":o(r[10],o(r[2])),"terminal.ansiBrightYellow":o(r[11],o(r[3])),"terminal.ansiBrightBlue":o(r[12],o(r[4])),"terminal.ansiBrightMagenta":o(r[13],o(r[5])),"terminal.ansiBrightCyan":o(r[14],o(r[6])),"terminal.ansiBrightWhite":o(r[15]),"gitDecoration.addedResourceForeground":o(r[10],o(r[2],"#32d74b")),"gitDecoration.deletedResourceForeground":o(r[9],o(r[1],"#ff453a")),"gitDecoration.modifiedResourceForeground":o(r[12],o(r[4],"#0a84ff")),"editor.selectionBackground":t.selectionBackground,"editor.selectionForeground":t.selectionForeground},tokenColors:[{settings:{foreground:n,background:i}},{scope:["comment","punctuation.definition.comment"],settings:{foreground:o(r[8]),fontStyle:"italic"}},{scope:["string","constant.other.symbol"],settings:{foreground:o(r[2])}},{scope:["constant.numeric","constant.language","support.constant"],settings:{foreground:o(r[3])}},{scope:["keyword","storage","storage.type"],settings:{foreground:o(r[5])}},{scope:["entity.name.function","support.function"],settings:{foreground:o(r[4])}},{scope:["entity.name.type","entity.name.class","support.type"],settings:{foreground:o(r[6])}},{scope:["variable","meta.definition.variable"],settings:{foreground:n}},{scope:["invalid","message.error"],settings:{foreground:o(r[9],o(r[1]))}}]}}function Q(t,e={}){const r=e.pending===!0;return{error:e.error===!0,loading:e.loading===!0||r,message:t,pending:r,statusOnly:e.statusOnly===!0}}function Ri(t,e){const r=t.payload;return r?.pendingReplacement===!0?Q(r.statusMessage??e("loadingDiff"),{loading:!0,pending:!0}):typeof r?.statusMessage=="string"&&r.statusMessage.length>0?Q(r.statusMessage,{error:r.statusIsError===!0,loading:!1,statusOnly:!0}):Q(e("loadingDiff"),{loading:!0})}function Ze(t){document.body.dataset.loading=t.loading?"true":"false",document.body.dataset.statusOnly=t.statusOnly?"true":"false"}function Vi(t){const e=[];return t.forEach((r,i)=>{for(const n of r.fileDiff?.hunks??[])n.additionCount>0?e.push({itemId:r.id,itemIndex:i,lineNumber:n.additionStart,side:"additions"}):n.deletionCount>0&&e.push({itemId:r.id,itemIndex:i,lineNumber:n.deletionStart,side:"deletions"})}),e}function Ai(t,e,r,i){if(t.length===0)return-1;const n=e>=0&&es.itemId===r);return o>=0?i===1?o:Math.max(0,o-1):i===1?0:t.length-1}return Math.min(t.length-1,Math.max(0,e+i))}function Ei(t,e,r){if(t.length===0)return null;const i=t.findIndex(o=>o.id===e);if(i<0)return t[r===1?0:t.length-1].id;const n=Math.min(t.length-1,Math.max(0,i+r));return n===i?null:t[n].id}const jt="cmux.diffViewer.options";function It(){if(typeof window>"u")return null;const t=window.webkit?.messageHandlers?.cmuxDiffComments;return t!=null&&typeof t.postMessage=="function"?t:null}function ze(t){if(t==null||typeof t!="object")return{};const e=t,r={};(e.layout==="split"||e.layout==="unified")&&(r.layout=e.layout),(e.diffIndicators==="bars"||e.diffIndicators==="classic"||e.diffIndicators==="none")&&(r.diffIndicators=e.diffIndicators);for(const i of["wordWrap","wordDiffs","lineNumbers","showBackgrounds","expandUnchanged"])typeof e[i]=="boolean"&&(r[i]=e[i]);return r}async function $i(){const t=It();if(t!=null)try{const e=await t.postMessage({method:"viewerPrefs.get",params:{}});if(e?.ok)return ze(e.value?.preferences)}catch{}return Ct()}function dt(t){const e=ze(t),r=It();r?.postMessage({method:"viewerPrefs.set",params:{preferences:e}}).catch(()=>{}),Wi(e)}function Ct(){try{const t=window.localStorage.getItem(jt);return t==null?{}:ze(JSON.parse(t))}catch{return{}}}function Wi(t){try{const e=Ct();window.localStorage.setItem(jt,JSON.stringify({...e,...t}))}catch{}}const Ui=/\b(Android|iPhone|iPad|iPod|Mobile)\b/i;function Gi(t){return Ui.test(t??"")?1:3}function Hi(){return Gi(typeof navigator>"u"?void 0:navigator.userAgent)}function Ki(t){return{poolSize:Hi(),workerFactory:()=>new Worker(t,{type:"module"})}}const Ji=["82%","64%","76%","58%","70%","46%"],qi=["58%","88%","72%","94%","64%","82%","52%","78%"],Xi="./assets/pierre-diffs-1.2.7-trees-1.0.0-beta.4/worker-pool/worker-portable.js";function Yi(t,e){const r=t.payload??{},i=ze(r.viewerOptions);return delete i.layout,{activeItemId:"",activeTreePath:"",comments:[],copyFeedback:"",draft:null,fileSearchOpen:!1,filesWidth:252,filesVisible:!0,items:[],metrics:null,options:{collapsed:!1,diffIndicators:"bars",expandUnchanged:!1,lineNumbers:!0,showBackgrounds:!0,wordDiffs:!1,wordWrap:!1,...i,layout:ar(r)},optionsOpen:!1,renderGeneration:0,status:e,treeSource:null}}function Qi(t,e){switch(e.type){case"append-items":{const r=e.items.map(i=>{const n=hi(i,t.comments,t.draft);return t.options.collapsed?{...n,collapsed:!0}:n});return{...t,activeItemId:t.activeItemId||r[0]?.id||"",items:[...t.items,...r],status:t.status.loading?Q("",{loading:!1}):t.status}}case"apply-persisted-options":{const r={...e.prefs};return e.allowLayout||delete r.layout,{...t,options:{...t.options,...r}}}case"refresh":return{...t,activeItemId:"",activeTreePath:"",draft:null,items:[],metrics:null,renderGeneration:t.renderGeneration+1,status:Q("",{loading:!0}),treeSource:null};case"remove-comment":{const r=t.comments.filter(i=>i.id!==e.id);return{...t,comments:r,items:Fe(t.items,r,t.draft)}}case"rename-item":return{...t,activeItemId:t.activeItemId===e.oldId?e.newId:t.activeItemId,draft:t.draft?.itemId===e.oldId?{...t.draft,itemId:e.newId}:t.draft,items:t.items.map(r=>r.id===e.oldId||r.id===e.newId?{...r,id:e.newId,version:(r.version??0)+1}:r)};case"set-active-item":return{...t,activeItemId:e.itemId,activeTreePath:e.treePath??t.activeTreePath};case"set-comments":return{...t,comments:e.comments,items:Fe(t.items,e.comments,t.draft)};case"set-copy-feedback":return{...t,copyFeedback:e.message};case"set-draft":return{...t,draft:e.draft,items:Fe(t.items,t.comments,e.draft)};case"set-file-search-open":return{...t,fileSearchOpen:e.open,filesVisible:e.open?!0:t.filesVisible};case"set-files-width":return{...t,filesWidth:e.width};case"set-files-visible":return{...t,filesVisible:e.visible};case"set-metrics":return{...t,metrics:e.metrics};case"set-option":return e.key==="collapsed"?{...t,options:{...t.options,collapsed:!!e.value},items:t.items.map(r=>({...r,collapsed:!!e.value,version:(r.version??0)+1}))}:{...t,options:{...t.options,[e.key]:e.value}};case"set-options-open":return{...t,optionsOpen:e.open};case"set-status":return{...t,status:e.status};case"set-tree-source":{const r=e.source,i=t.activeItemId?r.treePathByItemId.get(t.activeItemId)??t.activeTreePath:t.activeTreePath;return{...t,activeTreePath:i,treeSource:r}}case"upsert-comment":{const i=t.comments.some(n=>n.id===e.comment.id)?t.comments.map(n=>n.id===e.comment.id?e.comment:n):[...t.comments,e.comment];return{...t,comments:i,items:Fe(t.items,i,t.draft)}}}}function Zi(t){const e=C.c(107),{config:r,initialStatus:i}=t,n=r.payload??{},o=St(n.labels,{assertMissing:kt()}),s=Ke(n.appearance);let l;e[0]!==r||e[1]!==i?(l=Yi(r,i),e[0]=r,e[1]=i,e[2]=l):l=e[2];const[d,f]=M.useReducer(Qi,l),u=He(d),c=M.useRef(null),p=M.useRef(null),m=M.useRef(null);let g;if(e[3]!==r.assets?.workerModuleURL){const j=er(r.assets?.workerModuleURL);g=Ki(j),e[3]=r.assets?.workerModuleURL,e[4]=g}else g=e[4];const x=g,y=Di(d.options,s),b=typeof n.repoRoot=="string"&&n.repoRoot!==""?n.repoRoot:null,w=xi()&&b!=null,v=ji(n),h=tr({bridgeAvailable:w,dispatch:f,latestState:u,repoRoot:b}),k=zi(d.options,s);k.onGutterUtilityClick=h.onGutterUtilityClick;const S=M.useRef(-1);let I;e[5]!==f||e[6]!==u?(I=j=>{const E=u.current,Y=Vi(E.items),fe=Ai(Y,S.current,E.activeItemId,j);if(fe<0)return;const ke=Y[fe];S.current=fe,c.current?.scrollTo({type:"line",id:ke.itemId,lineNumber:ke.lineNumber,side:ke.side,align:"center",behavior:"smooth-auto"}),f({type:"set-active-item",itemId:ke.itemId,treePath:E.treeSource?.treePathByItemId.get(ke.itemId)})},e[5]=f,e[6]=u,e[7]=I):I=e[7];const P=I;let N;e[8]!==f||e[9]!==u?(N=j=>{const E=u.current,Y=Ei(E.items,E.activeItemId,j);Y!=null&&(S.current=-1,c.current?.scrollTo({type:"item",id:Y,align:"start",behavior:"smooth-auto"}),f({type:"set-active-item",itemId:Y,treePath:E.treeSource?.treePathByItemId.get(Y)}))},e[8]=f,e[9]=u,e[10]=N):N=e[10];const D=N;let F;e[11]!==D?(F=()=>D(1),e[11]=D,e[12]=F):F=e[12];let _;e[13]!==P?(_=()=>P(1),e[13]=P,e[14]=_):_=e[14];let B;e[15]!==D?(B=()=>D(-1),e[15]=D,e[16]=B):B=e[16];let L;e[17]!==P?(L=()=>P(-1),e[17]=P,e[18]=L):L=e[18];let R;e[19]!==F||e[20]!==_||e[21]!==B||e[22]!==L?(R={nextFile:F,nextHunk:_,prevFile:B,prevHunk:L},e[19]=F,e[20]=_,e[21]=B,e[22]=L,e[23]=R):R=e[23];const V=He(R);Vr(d),Or(n,o,f),zr(r,o,f,u,d.renderGeneration),lr(n,f),Ci(w?b:null,h.onLoaded);let O;e[24]!==n.shortcuts?(O=n.shortcuts??{},e[24]=n.shortcuts,e[25]=O):O=e[25],Ar(O,m,f,V),Er(d.optionsOpen,f);let z;e[26]!==v||e[27]!==h||e[28]!==f?(z=(j,E)=>{const Y=j.metadata;return Y.kind==="draft"?a.jsx(wt,{labels:v,onCancel:()=>f({type:"set-draft",draft:null}),onSave:fe=>h.saveDraft(E,fe)}):a.jsx(Ii,{comment:Y.comment,labels:v,onDelete:()=>h.remove(Y.comment),onSaveMessage:fe=>h.editMessage(Y.comment,fe,E.fileDiff)})},e[26]=v,e[27]=h,e[28]=f,e[29]=z):z=e[29];const A=z;let U;if(e[30]!==d.comments||e[31]!==d.items||e[32]!==d.metrics?.completedAt){const j=Number.isFinite(d.metrics?.completedAt)&&(d.metrics?.completedAt??0)>0;U=gi(d.items,d.comments,j),e[30]=d.comments,e[31]=d.items,e[32]=d.metrics?.completedAt,e[33]=U}else U=e[33];const $=U;let G;e[34]!==f||e[35]!==d.treeSource?.treePathByItemId?(G=j=>{j.itemId!=null&&(j.anchor.state==="outdated"?c.current?.scrollTo({type:"item",id:j.itemId,align:"start",behavior:"smooth-auto"}):c.current?.scrollTo({type:"line",id:j.itemId,lineNumber:j.anchor.line,side:j.comment.side,align:"center",behavior:"smooth-auto"}),f({type:"set-active-item",itemId:j.itemId,treePath:d.treeSource?.treePathByItemId.get(j.itemId)}))},e[34]=f,e[35]=d.treeSource?.treePathByItemId,e[36]=G):G=e[36];const T=G;let W;e[37]!==d.activeItemId||e[38]!==d.activeTreePath||e[39]!==d.treeSource?.treePathByItemId?(W=d.treeSource?.treePathByItemId.get(d.activeItemId)??d.activeTreePath,e[37]=d.activeItemId,e[38]=d.activeTreePath,e[39]=d.treeSource?.treePathByItemId,e[40]=W):W=e[40];const X=W;let q;e[41]!==f||e[42]!==d.items||e[43]!==d.treeSource?.treePathByItemId?(q=j=>{const E=Gr(j,d.items);E&&(c.current?.scrollTo({type:"item",id:E,align:"start",behavior:"smooth-auto"}),f({type:"set-active-item",itemId:E,treePath:d.treeSource?.treePathByItemId.get(E)}))},e[41]=f,e[42]=d.items,e[43]=d.treeSource?.treePathByItemId,e[44]=q):q=e[44];const K=q;let Z;e[45]!==f?(Z=j=>{Ze(j),f({type:"set-status",status:j})},e[45]=f,e[46]=Z):Z=e[46];const ie=Z;let ee;e[47]!==f?(ee=j=>{dt({layout:j}),f({type:"set-option",key:"layout",value:j})},e[47]=f,e[48]=ee):ee=e[48];const re=ee;let oe;e[49]!==f?(oe=(j,E)=>{f({type:"set-option",key:j,value:E}),j!=="collapsed"&&dt({[j]:E})},e[49]=f,e[50]=oe):oe=e[50];const ne=oe;let te;e[51]!==f||e[52]!==n?(te=()=>{if(Mt(n)){window.location.reload();return}S.current=-1,f({type:"refresh"})},e[51]=f,e[52]=n,e[53]=te):te=e[53];const ce=te;let H;e[54]!==f||e[55]!==o||e[56]!==n.patchURL?(H=async()=>{try{const j=await Ut(n.patchURL,o,p.current);f({type:"set-copy-feedback",message:j})}catch{f({type:"set-copy-feedback",message:o("copyFailedGitApplyCommand")})}},e[54]=f,e[55]=o,e[56]=n.patchURL,e[57]=H):H=e[57];let me;e[58]!==o||e[59]!==ie?(me=j=>{ie(Q(o("loadingDiff"),{pending:!0})),window.location.href=Wt(j)},e[58]=o,e[59]=ie,e[60]=me):me=e[60];let pe;e[61]!==r||e[62]!==f||e[63]!==o||e[64]!==ce||e[65]!==K||e[66]!==re||e[67]!==ne||e[68]!==d||e[69]!==H||e[70]!==me?(pe=a.jsx(fr,{config:r,label:o,onCopyGitApply:H,onJump:K,onNavigate:me,onReload:ce,onSetLayout:re,onSetOption:ne,dispatch:f,state:d}),e[61]=r,e[62]=f,e[63]=o,e[64]=ce,e[65]=K,e[66]=re,e[67]=ne,e[68]=d,e[69]=H,e[70]=me,e[71]=pe):pe=e[71];const De=`${d.filesWidth}px`;let je;e[72]!==De?(je={"--cmux-diff-files-width":De},e[72]=De,e[73]=je):je=e[73];const Ne=je,Oe=d.draft!=null;let he;e[74]!==$||e[75]!==v||e[76]!==f||e[77]!==o||e[78]!==K||e[79]!==T||e[80]!==X||e[81]!==d||e[82]!==Oe?(he=a.jsx(br,{commentEntries:$,commentLabels:v,hasDraft:Oe,label:o,onSelectComment:T,onSelectItem:K,selectedPath:X,dispatch:f,state:d}),e[74]=$,e[75]=v,e[76]=f,e[77]=o,e[78]=K,e[79]=T,e[80]=X,e[81]=d,e[82]=Oe,e[83]=he):he=e[83];let ge;e[84]!==o?(ge=o("diffViewer"),e[84]=o,e[85]=ge):ge=e[85];let xe;e[86]!==y||e[87]!==A||e[88]!==k||e[89]!==d.items||e[90]!==x?(xe=d.items.length>0?a.jsxs(Bt,{poolOptions:x,highlighterOptions:y,children:[a.jsx(dr,{codeViewRef:c,highlighterOptions:y}),a.jsx(Tt,{ref:c,className:"code-view-root",containerRef:m,items:d.items,options:k,renderAnnotation:(j,E)=>A(j,E)})]}):null,e[86]=y,e[87]=A,e[88]=k,e[89]=d.items,e[90]=x,e[91]=xe):xe=e[91];let be;e[92]!==ge||e[93]!==xe?(be=a.jsx("main",{id:"viewer","aria-label":ge,children:xe}),e[92]=ge,e[93]=xe,e[94]=be):be=e[94];let ve;e[95]!==o||e[96]!==d.status?(ve=a.jsx(Ir,{label:o,status:d.status}),e[95]=o,e[96]=d.status,e[97]=ve):ve=e[97];let we;e[98]!==Ne||e[99]!==he||e[100]!==be||e[101]!==ve?(we=a.jsxs("section",{id:"content",style:Ne,children:[he,be,ve]}),e[98]=Ne,e[99]=he,e[100]=be,e[101]=ve,e[102]=we):we=e[102];let Ie;e[103]===Symbol.for("react.memo_cache_sentinel")?(Ie=a.jsx("textarea",{ref:p,"aria-hidden":"true",readOnly:!0,tabIndex:-1,className:"copy-fallback-textarea"}),e[103]=Ie):Ie=e[103];let Ce;return e[104]!==pe||e[105]!==we?(Ce=a.jsxs("div",{id:"app",children:[pe,we,Ie]}),e[104]=pe,e[105]=we,e[106]=Ce):Ce=e[106],Ce}function er(t){return new URL(t||Xi,window.location.href)}function tr(t){const e=C.c(23),{bridgeAvailable:r,dispatch:i,latestState:n,repoRoot:o}=t;let s;e[0]!==i?(s=b=>i({type:"set-comments",comments:b}),e[0]=i,e[1]=s):s=e[1];const l=s;let d;e[2]!==i?(d=(b,w)=>{const v=b.side==="deletions"?"deletions":"additions";i({type:"set-draft",draft:{itemId:w.item.id,side:v,startLine:Math.min(b.start,b.end),endLine:Math.max(b.start,b.end)}})},e[2]=i,e[3]=d):d=e[3];const f=d;let u;e[4]!==r||e[5]!==i||e[6]!==n||e[7]!==o?(u=(b,w)=>{const v=n.current.draft;if(v==null||v.itemId!==b.id||w.trim()==="")return;const h={filePath:ye(b.fileDiff,""),side:v.side,startLine:v.startLine,endLine:v.endLine,lineText:Xe(b.fileDiff,v.side,v.endLine)??"",message:w},k={...h,submissionText:st(h,b.fileDiff)};(r&&o!=null?at(o,k):Promise.resolve(or(k))).then(I=>{i({type:"upsert-comment",comment:I}),i({type:"set-draft",draft:null})}).catch(nr)},e[4]=r,e[5]=i,e[6]=n,e[7]=o,e[8]=u):u=e[8];const c=u;let p;e[9]!==r||e[10]!==i||e[11]!==o?(p=(b,w,v)=>{if(w.trim()==="")return;const h={...b,message:w,updatedAt:new Date().toISOString()},k={...h,submissionText:st(h,v)};(r&&o!=null?at(o,k):Promise.resolve(k)).then(I=>i({type:"upsert-comment",comment:I})).catch(rr)},e[9]=r,e[10]=i,e[11]=o,e[12]=p):p=e[12];const m=p;let g;e[13]!==r||e[14]!==i||e[15]!==o?(g=b=>{r&&o!=null&&vi(o,b.id).catch(ir),i({type:"remove-comment",id:b.id})},e[13]=r,e[14]=i,e[15]=o,e[16]=g):g=e[16];const x=g;let y;return e[17]!==m||e[18]!==f||e[19]!==l||e[20]!==x||e[21]!==c?(y={editMessage:m,onGutterUtilityClick:f,onLoaded:l,remove:x,saveDraft:c},e[17]=m,e[18]=f,e[19]=l,e[20]=x,e[21]=c,e[22]=y):y=e[22],y}function ir(t){return console.warn("cmux diff comment delete failed",t)}function rr(t){return console.warn("cmux diff comment edit failed",t)}function nr(t){return console.warn("cmux diff comment save failed",t)}function or(t){const e=new Date().toISOString();return{...t,id:crypto.randomUUID(),createdAt:e,updatedAt:e}}function ar(t){const e=Ge(t.layout);return t.layoutSource==="explicit"&&e?e:sr()??e??"unified"}function sr(){try{const t=window.localStorage.getItem("cmux.diffViewer.options");if(t!=null){const e=JSON.parse(t).layout,r=Ge(e);if(r)return r}return Ge(window.localStorage.getItem("cmux.diffViewer.layout"))}catch{return null}}function Ge(t){return t==="split"||t==="unified"?t:null}function lr(t,e){const r=C.c(4),i=M.useRef(!1);let n,o;r[0]!==e||r[1]!==t?(n=()=>{i.current||(i.current=!0,$i().then(s=>{e({type:"apply-persisted-options",prefs:s,allowLayout:t.layoutSource!=="explicit"})}).catch(cr))},o=[e,t],r[0]=e,r[1]=t,r[2]=n,r[3]=o):(n=r[2],o=r[3]),M.useEffect(n,o)}function cr(){}function dr(t){const{codeViewRef:e,highlighterOptions:r}=t;return Cr(r,e),null}function fr(t){const e=C.c(78),{config:r,dispatch:i,label:n,onCopyGitApply:o,onJump:s,onNavigate:l,onReload:d,onSetLayout:f,onSetOption:u,state:c}=t;let p;e[0]!==r.payload?(p=r.payload??{},e[0]=r.payload,e[1]=p):p=e[1];const m=p;let g;e[2]!==n||e[3]!==l||e[4]!==m?(g=a.jsx(ur,{label:n,onNavigate:l,payload:m}),e[2]=n,e[3]=l,e[4]=m,e[5]=g):g=e[5];let x;e[6]!==n||e[7]!==s||e[8]!==c.activeItemId||e[9]!==c.items?(x=a.jsx("div",{className:"toolbar-middle flex min-w-0 flex-1 items-center justify-center gap-1.5",children:a.jsx(gr,{items:c.items,label:n,onJump:s,selectedItemId:c.activeItemId})}),e[6]=n,e[7]=s,e[8]=c.activeItemId,e[9]=c.items,e[10]=x):x=e[10];let y;e[11]!==n||e[12]!==m.externalURL?(y=typeof m.externalURL=="string"&&m.externalURL.length>0?a.jsx("a",{id:"external-link",className:"toolbar-icon",href:m.externalURL,target:"_blank",rel:"noreferrer",title:n("openSourceURL"),"aria-label":n("openSourceURL"),children:a.jsx(le,{name:"external"})}):null,e[11]=n,e[12]=m.externalURL,e[13]=y):y=e[13];let b;e[14]!==n||e[15]!==c.options.layout?(b=c.options.layout==="split"?n("switchToUnifiedDiff"):n("switchToSplitDiff"),e[14]=n,e[15]=c.options.layout,e[16]=b):b=e[16];let w;e[17]!==n||e[18]!==c.options.layout?(w=c.options.layout==="split"?n("switchToUnifiedDiff"):n("switchToSplitDiff"),e[17]=n,e[18]=c.options.layout,e[19]=w):w=e[19];let v;e[20]!==f||e[21]!==c.options.layout?(v=()=>f(c.options.layout==="split"?"unified":"split"),e[20]=f,e[21]=c.options.layout,e[22]=v):v=e[22];let h;e[23]!==c.options.layout?(h=a.jsx(le,{name:c.options.layout}),e[23]=c.options.layout,e[24]=h):h=e[24];let k;e[25]!==b||e[26]!==w||e[27]!==v||e[28]!==h?(k=a.jsx("button",{id:"layout-toggle",className:"toolbar-icon",type:"button",title:b,"aria-label":w,onClick:v,children:h}),e[25]=b,e[26]=w,e[27]=v,e[28]=h,e[29]=k):k=e[29];let S;e[30]!==n?(S=n("options"),e[30]=n,e[31]=S):S=e[31];let I;e[32]!==n?(I=n("options"),e[32]=n,e[33]=I):I=e[33];let P;e[34]!==i||e[35]!==c.optionsOpen?(P=()=>i({type:"set-options-open",open:!c.optionsOpen}),e[34]=i,e[35]=c.optionsOpen,e[36]=P):P=e[36];let N;e[37]===Symbol.for("react.memo_cache_sentinel")?(N=a.jsx(le,{name:"dots"}),e[37]=N):N=e[37];let D;e[38]!==c.optionsOpen||e[39]!==S||e[40]!==I||e[41]!==P?(D=a.jsx("button",{id:"options-button",className:"toolbar-icon",type:"button",title:S,"aria-label":I,"aria-expanded":c.optionsOpen,"aria-controls":"options-menu",onClick:P,children:N}),e[38]=c.optionsOpen,e[39]=S,e[40]=I,e[41]=P,e[42]=D):D=e[42];let F;e[43]!==n||e[44]!==c.filesVisible?(F=c.filesVisible?n("hideFiles"):n("showFiles"),e[43]=n,e[44]=c.filesVisible,e[45]=F):F=e[45];let _;e[46]!==n||e[47]!==c.filesVisible?(_=c.filesVisible?n("hideFiles"):n("showFiles"),e[46]=n,e[47]=c.filesVisible,e[48]=_):_=e[48];let B;e[49]!==i||e[50]!==c.filesVisible?(B=()=>i({type:"set-files-visible",visible:!c.filesVisible}),e[49]=i,e[50]=c.filesVisible,e[51]=B):B=e[51];let L;e[52]===Symbol.for("react.memo_cache_sentinel")?(L=a.jsx(le,{name:"files"}),e[52]=L):L=e[52];let R;e[53]!==c.filesVisible||e[54]!==F||e[55]!==_||e[56]!==B?(R=a.jsx("button",{id:"files-toggle",className:"toolbar-icon",type:"button",title:F,"aria-label":_,"aria-pressed":c.filesVisible,onClick:B,children:L}),e[53]=c.filesVisible,e[54]=F,e[55]=_,e[56]=B,e[57]=R):R=e[57];let V;e[58]!==c.copyFeedback?(V=a.jsx("span",{id:"copy-feedback",className:"visually-hidden","aria-live":"polite",children:c.copyFeedback}),e[58]=c.copyFeedback,e[59]=V):V=e[59];let O;e[60]!==D||e[61]!==R||e[62]!==V||e[63]!==y||e[64]!==k?(O=a.jsxs("div",{className:"toolbar-actions flex shrink-0 items-center gap-1.5",children:[y,k,D,R,V]}),e[60]=D,e[61]=R,e[62]=V,e[63]=y,e[64]=k,e[65]=O):O=e[65];let z;e[66]!==i||e[67]!==n||e[68]!==o||e[69]!==d||e[70]!==u||e[71]!==c?(z=c.optionsOpen?a.jsx(xr,{dispatch:i,label:n,onCopyGitApply:o,onReload:d,onSetOption:u,state:c}):null,e[66]=i,e[67]=n,e[68]=o,e[69]=d,e[70]=u,e[71]=c,e[72]=z):z=e[72];let A;return e[73]!==g||e[74]!==O||e[75]!==z||e[76]!==x?(A=a.jsxs("header",{id:"toolbar",children:[g,x,O,z]}),e[73]=g,e[74]=O,e[75]=z,e[76]=x,e[77]=A):A=e[77],A}function ur(t){const e=C.c(24),{label:r,onNavigate:i,payload:n}=t;let o;e[0]!==r?(o=r("diffTarget"),e[0]=r,e[1]=o):o=e[1];let s;e[2]!==i||e[3]!==n.sourceOptions||e[4]!==o?(s=a.jsx($e,{ariaLabel:o,fallbackValue:"",id:"source-select",options:n.sourceOptions,onNavigate:i}),e[2]=i,e[3]=n.sourceOptions,e[4]=o,e[5]=s):s=e[5];let l;e[6]!==r?(l=r("repoPath"),e[6]=r,e[7]=l):l=e[7];const d=n.repoRoot??"";let f;e[8]!==i||e[9]!==n.repoOptions||e[10]!==l||e[11]!==d?(f=a.jsx($e,{ariaLabel:l,fallbackValue:d,id:"repo-select",options:n.repoOptions,onNavigate:i}),e[8]=i,e[9]=n.repoOptions,e[10]=l,e[11]=d,e[12]=f):f=e[12];let u;e[13]!==r?(u=r("branchBase"),e[13]=r,e[14]=u):u=e[14];const c=n.branchBaseRef??"";let p;e[15]!==i||e[16]!==n.baseOptions||e[17]!==u||e[18]!==c?(p=a.jsx($e,{ariaLabel:u,fallbackValue:c,id:"base-select",options:n.baseOptions,onNavigate:i}),e[15]=i,e[16]=n.baseOptions,e[17]=u,e[18]=c,e[19]=p):p=e[19];let m;return e[20]!==s||e[21]!==f||e[22]!==p?(m=a.jsxs("div",{className:"toolbar-left flex min-w-0 items-center gap-1.5",children:[s,f,p]}),e[20]=s,e[21]=f,e[22]=p,e[23]=m):m=e[23],m}function $e(t){const e=C.c(15),{ariaLabel:r,fallbackValue:i,id:n,onNavigate:o,options:s}=t;if(!Array.isArray(s)||s.length<2)return null;let l;e[0]!==s?(l=s.find(hr)??s.find(pr),e[0]=s,e[1]=l):l=e[1];const d=l,f=d?.value??i;let u;e[2]!==i||e[3]!==o||e[4]!==s||e[5]!==d?.value?(u=m=>{const g=s.find(x=>x.value===m.currentTarget.value);if(!g?.url){m.currentTarget.value=d?.value??i;return}o(g.url)},e[2]=i,e[3]=o,e[4]=s,e[5]=d?.value,e[6]=u):u=e[6];let c;e[7]!==s?(c=s.map(mr),e[7]=s,e[8]=c):c=e[8];let p;return e[9]!==r||e[10]!==n||e[11]!==f||e[12]!==u||e[13]!==c?(p=a.jsx("select",{id:n,"aria-label":r,defaultValue:f,title:r,onChange:u,children:c}),e[9]=r,e[10]=n,e[11]=f,e[12]=u,e[13]=c,e[14]=p):p=e[14],p}function mr(t){return a.jsx("option",{value:t.value,disabled:t.disabled||!t.url,title:t.message,children:t.label},t.value)}function pr(t){return!t.disabled}function hr(t){return t.selected}function gr(t){const e=C.c(19),{items:r,label:i,onJump:n,selectedItemId:o}=t;if(r.length===0)return null;let s;e[0]!==i?(s=i("jumpToFile"),e[0]=i,e[1]=s):s=e[1];let l;e[2]!==n?(l=p=>n(p.currentTarget.value),e[2]=n,e[3]=l):l=e[3];let d;e[4]!==i?(d=i("jumpToFile"),e[4]=i,e[5]=d):d=e[5];let f;e[6]!==d?(f=a.jsx("option",{value:"",children:d}),e[6]=d,e[7]=f):f=e[7];let u;if(e[8]!==r||e[9]!==i){let p;e[11]!==i?(p=m=>a.jsx("option",{value:m.id,children:ye(m.fileDiff,i("untitled"))},m.id),e[11]=i,e[12]=p):p=e[12],u=r.map(p),e[8]=r,e[9]=i,e[10]=u}else u=e[10];let c;return e[13]!==o||e[14]!==s||e[15]!==l||e[16]!==f||e[17]!==u?(c=a.jsxs("select",{id:"jump-select","aria-label":s,value:o,onChange:l,children:[f,u]}),e[13]=o,e[14]=s,e[15]=l,e[16]=f,e[17]=u,e[18]=c):c=e[18],c}function xr(t){const e=C.c(122),{dispatch:r,label:i,onCopyGitApply:n,onReload:o,onSetOption:s,state:l}=t;let d;e[0]!==s||e[1]!==l.options?(d=H=>s(H,!l.options[H]),e[0]=s,e[1]=l.options,e[2]=d):d=e[2];const f=d;let u;e[3]!==i?(u=i("options"),e[3]=i,e[4]=u):u=e[4];let c;e[5]!==i?(c=i("refresh"),e[5]=i,e[6]=c):c=e[6];let p;e[7]!==o||e[8]!==c?(p=a.jsx(ae,{icon:"refresh",label:c,onClick:o}),e[7]=o,e[8]=c,e[9]=p):p=e[9];let m;e[10]!==i||e[11]!==l.options.wordWrap?(m=l.options.wordWrap?i("disableWordWrap"):i("enableWordWrap"),e[10]=i,e[11]=l.options.wordWrap,e[12]=m):m=e[12];let g;e[13]!==f?(g=()=>f("wordWrap"),e[13]=f,e[14]=g):g=e[14];let x;e[15]!==l.options.wordWrap||e[16]!==m||e[17]!==g?(x=a.jsx(ae,{checked:l.options.wordWrap,icon:"wrap",label:m,onClick:g}),e[15]=l.options.wordWrap,e[16]=m,e[17]=g,e[18]=x):x=e[18];const y=l.options.collapsed?"expand":"collapse";let b;e[19]!==i||e[20]!==l.options.collapsed?(b=l.options.collapsed?i("expandAllDiffs"):i("collapseAllDiffs"),e[19]=i,e[20]=l.options.collapsed,e[21]=b):b=e[21];let w;e[22]!==f?(w=()=>f("collapsed"),e[22]=f,e[23]=w):w=e[23];let v;e[24]!==l.options.collapsed||e[25]!==w||e[26]!==y||e[27]!==b?(v=a.jsx(ae,{checked:l.options.collapsed,icon:y,label:b,onClick:w}),e[24]=l.options.collapsed,e[25]=w,e[26]=y,e[27]=b,e[28]=v):v=e[28];let h;e[29]===Symbol.for("react.memo_cache_sentinel")?(h=a.jsx("div",{className:"menu-separator"}),e[29]=h):h=e[29];let k;e[30]!==i||e[31]!==l.filesVisible?(k=l.filesVisible?i("hideFiles"):i("showFiles"),e[30]=i,e[31]=l.filesVisible,e[32]=k):k=e[32];let S;e[33]!==r||e[34]!==l.filesVisible?(S=()=>r({type:"set-files-visible",visible:!l.filesVisible}),e[33]=r,e[34]=l.filesVisible,e[35]=S):S=e[35];let I;e[36]!==l.filesVisible||e[37]!==k||e[38]!==S?(I=a.jsx(ae,{checked:l.filesVisible,icon:"files",label:k,onClick:S}),e[36]=l.filesVisible,e[37]=k,e[38]=S,e[39]=I):I=e[39];let P;e[40]!==i||e[41]!==l.options.expandUnchanged?(P=l.options.expandUnchanged?i("collapseUnchangedContext"):i("expandUnchangedContext"),e[40]=i,e[41]=l.options.expandUnchanged,e[42]=P):P=e[42];let N;e[43]!==f?(N=()=>f("expandUnchanged"),e[43]=f,e[44]=N):N=e[44];let D;e[45]!==l.options.expandUnchanged||e[46]!==P||e[47]!==N?(D=a.jsx(ae,{checked:l.options.expandUnchanged,icon:"document",label:P,onClick:N}),e[45]=l.options.expandUnchanged,e[46]=P,e[47]=N,e[48]=D):D=e[48];let F;e[49]!==i||e[50]!==l.options.showBackgrounds?(F=l.options.showBackgrounds?i("hideBackgrounds"):i("showBackgrounds"),e[49]=i,e[50]=l.options.showBackgrounds,e[51]=F):F=e[51];let _;e[52]!==f?(_=()=>f("showBackgrounds"),e[52]=f,e[53]=_):_=e[53];let B;e[54]!==l.options.showBackgrounds||e[55]!==F||e[56]!==_?(B=a.jsx(ae,{checked:l.options.showBackgrounds,icon:"background",label:F,onClick:_}),e[54]=l.options.showBackgrounds,e[55]=F,e[56]=_,e[57]=B):B=e[57];let L;e[58]!==i||e[59]!==l.options.lineNumbers?(L=l.options.lineNumbers?i("hideLineNumbers"):i("showLineNumbers"),e[58]=i,e[59]=l.options.lineNumbers,e[60]=L):L=e[60];let R;e[61]!==f?(R=()=>f("lineNumbers"),e[61]=f,e[62]=R):R=e[62];let V;e[63]!==l.options.lineNumbers||e[64]!==L||e[65]!==R?(V=a.jsx(ae,{checked:l.options.lineNumbers,icon:"numbers",label:L,onClick:R}),e[63]=l.options.lineNumbers,e[64]=L,e[65]=R,e[66]=V):V=e[66];let O;e[67]!==i||e[68]!==l.options.wordDiffs?(O=l.options.wordDiffs?i("disableWordDiffs"):i("enableWordDiffs"),e[67]=i,e[68]=l.options.wordDiffs,e[69]=O):O=e[69];let z;e[70]!==f?(z=()=>f("wordDiffs"),e[70]=f,e[71]=z):z=e[71];let A;e[72]!==l.options.wordDiffs||e[73]!==O||e[74]!==z?(A=a.jsx(ae,{checked:l.options.wordDiffs,icon:"word",label:O,onClick:z}),e[72]=l.options.wordDiffs,e[73]=O,e[74]=z,e[75]=A):A=e[75];let U;e[76]===Symbol.for("react.memo_cache_sentinel")?(U=a.jsx(le,{name:"bars"}),e[76]=U):U=e[76];let $;e[77]!==i?($=i("indicatorStyle"),e[77]=i,e[78]=$):$=e[78];let G;e[79]!==$?(G=a.jsx("span",{className:"menu-label",children:$}),e[79]=$,e[80]=G):G=e[80];let T;e[81]!==i?(T=i("bars"),e[81]=i,e[82]=T):T=e[82];let W;e[83]!==T?(W={value:"bars",icon:"bars",label:T},e[83]=T,e[84]=W):W=e[84];let X;e[85]!==i?(X=i("classic"),e[85]=i,e[86]=X):X=e[86];let q;e[87]!==X?(q={value:"classic",icon:"classic",label:X},e[87]=X,e[88]=q):q=e[88];let K;e[89]!==i?(K=i("none"),e[89]=i,e[90]=K):K=e[90];let Z;e[91]!==K?(Z={value:"none",icon:"eye",label:K},e[91]=K,e[92]=Z):Z=e[92];let ie;e[93]!==W||e[94]!==q||e[95]!==Z?(ie=[W,q,Z],e[93]=W,e[94]=q,e[95]=Z,e[96]=ie):ie=e[96];let ee;e[97]!==s||e[98]!==l.options.diffIndicators||e[99]!==ie?(ee=a.jsx("span",{className:"menu-segment-controls",children:ie.map(H=>a.jsx("button",{type:"button",className:"segment-button",title:H.label,"aria-label":H.label,"aria-pressed":l.options.diffIndicators===H.value,onClick:()=>s("diffIndicators",H.value),children:a.jsx(le,{name:H.icon})},H.value))}),e[97]=s,e[98]=l.options.diffIndicators,e[99]=ie,e[100]=ee):ee=e[100];let re;e[101]!==G||e[102]!==ee?(re=a.jsxs("div",{className:"menu-item menu-segment",children:[U,G,ee]}),e[101]=G,e[102]=ee,e[103]=re):re=e[103];let oe;e[104]===Symbol.for("react.memo_cache_sentinel")?(oe=a.jsx("div",{className:"menu-separator"}),e[104]=oe):oe=e[104];let ne;e[105]!==i?(ne=i("copyGitApplyCommand"),e[105]=i,e[106]=ne):ne=e[106];let te;e[107]!==n||e[108]!==ne?(te=a.jsx(ae,{icon:"clipboard",label:ne,onClick:n}),e[107]=n,e[108]=ne,e[109]=te):te=e[109];let ce;return e[110]!==v||e[111]!==I||e[112]!==D||e[113]!==u||e[114]!==B||e[115]!==V||e[116]!==A||e[117]!==re||e[118]!==p||e[119]!==te||e[120]!==x?(ce=a.jsxs("div",{id:"options-menu","aria-label":u,children:[p,x,v,h,I,D,B,V,A,re,oe,te]}),e[110]=v,e[111]=I,e[112]=D,e[113]=u,e[114]=B,e[115]=V,e[116]=A,e[117]=re,e[118]=p,e[119]=te,e[120]=x,e[121]=ce):ce=e[121],ce}function ae(t){const e=C.c(14),{checked:r,icon:i,label:n,onClick:o}=t,s=r??void 0;let l;e[0]!==i?(l=a.jsx(le,{name:i}),e[0]=i,e[1]=l):l=e[1];let d;e[2]!==n?(d=a.jsx("span",{className:"menu-label",children:n}),e[2]=n,e[3]=d):d=e[3];let f;e[4]!==r?(f=r?a.jsx(le,{name:"check"}):null,e[4]=r,e[5]=f):f=e[5];let u;e[6]!==f?(u=a.jsx("span",{className:"menu-check",children:f}),e[6]=f,e[7]=u):u=e[7];let c;return e[8]!==o||e[9]!==s||e[10]!==l||e[11]!==d||e[12]!==u?(c=a.jsxs("button",{type:"button",className:"menu-item","aria-pressed":s,onClick:o,children:[l,d,u]}),e[8]=o,e[9]=s,e[10]=l,e[11]=d,e[12]=u,e[13]=c):c=e[13],c}function br(t){const e=C.c(69),{commentEntries:r,commentLabels:i,dispatch:n,hasDraft:o,label:s,onSelectComment:l,onSelectItem:d,selectedPath:f,state:u}=t,c=M.useRef(null);let p;e[0]!==n?(p=T=>{const W=c.current;if(!W)return;const X=document.documentElement.clientWidth||window.innerWidth,q=Math.max(220,Math.min(520,Math.floor(X*.55))),K=Math.max(180,Math.min(q,Math.round(W.startWidth-(T-W.startX))));n({type:"set-files-width",width:K})},e[0]=n,e[1]=p):p=e[1];const m=p;let g;e[2]!==s?(g=s("changedFiles"),e[2]=s,e[3]=g):g=e[3];const x=!u.filesVisible,y=!u.filesVisible;let b;e[4]!==s?(b=s("files"),e[4]=s,e[5]=b):b=e[5];let w;e[6]!==u.filesWidth?(w=T=>{c.current={startWidth:u.filesWidth,startX:T.clientX},T.currentTarget.setPointerCapture(T.pointerId)},e[6]=u.filesWidth,e[7]=w):w=e[7];let v,h;e[8]!==m?(v=T=>m(T.clientX),h=T=>{m(T.clientX),c.current=null,T.currentTarget.releasePointerCapture(T.pointerId)},e[8]=m,e[9]=v,e[10]=h):(v=e[9],h=e[10]);let k;e[11]===Symbol.for("react.memo_cache_sentinel")?(k=()=>{c.current=null},e[11]=k):k=e[11];let S;e[12]!==n||e[13]!==u.filesWidth?(S=T=>{if(T.key!=="ArrowLeft"&&T.key!=="ArrowRight")return;T.preventDefault();const W=T.key==="ArrowLeft"?20:-20;n({type:"set-files-width",width:Math.max(180,Math.min(520,u.filesWidth+W))})},e[12]=n,e[13]=u.filesWidth,e[14]=S):S=e[14];let I;e[15]!==S||e[16]!==b||e[17]!==w||e[18]!==v||e[19]!==h?(I=a.jsx("button",{id:"files-resize-handle","aria-label":b,type:"button",tabIndex:0,onPointerDown:w,onPointerMove:v,onPointerUp:h,onPointerCancel:k,onKeyDown:S}),e[15]=S,e[16]=b,e[17]=w,e[18]=v,e[19]=h,e[20]=I):I=e[20];let P;e[21]!==s?(P=s("files"),e[21]=s,e[22]=P):P=e[22];let N;e[23]!==P?(N=a.jsx("span",{children:P}),e[23]=P,e[24]=N):N=e[24];const D=u.treeSource?.pathCount??0;let F;e[25]!==D?(F=a.jsx("span",{id:"files-count",children:D}),e[25]=D,e[26]=F):F=e[26];let _;e[27]!==N||e[28]!==F?(_=a.jsxs("span",{id:"files-title",children:[N,F]}),e[27]=N,e[28]=F,e[29]=_):_=e[29];let B;e[30]!==s||e[31]!==u.fileSearchOpen?(B=u.fileSearchOpen?s("hideFileSearch"):s("showFileSearch"),e[30]=s,e[31]=u.fileSearchOpen,e[32]=B):B=e[32];let L;e[33]!==s||e[34]!==u.fileSearchOpen?(L=u.fileSearchOpen?s("hideFileSearch"):s("showFileSearch"),e[33]=s,e[34]=u.fileSearchOpen,e[35]=L):L=e[35];const R=!u.treeSource;let V;e[36]!==n||e[37]!==u.fileSearchOpen?(V=()=>n({type:"set-file-search-open",open:!u.fileSearchOpen}),e[36]=n,e[37]=u.fileSearchOpen,e[38]=V):V=e[38];let O;e[39]===Symbol.for("react.memo_cache_sentinel")?(O=a.jsx(le,{name:"search"}),e[39]=O):O=e[39];let z;e[40]!==u.fileSearchOpen||e[41]!==B||e[42]!==L||e[43]!==R||e[44]!==V?(z=a.jsx("span",{id:"files-header-actions",children:a.jsx("button",{id:"file-search-toggle",type:"button",title:B,"aria-label":L,"aria-pressed":u.fileSearchOpen,disabled:R,onClick:V,children:O})}),e[40]=u.fileSearchOpen,e[41]=B,e[42]=L,e[43]=R,e[44]=V,e[45]=z):z=e[45];let A;e[46]!==_||e[47]!==z?(A=a.jsxs("div",{id:"files-header",children:[_,z]}),e[46]=_,e[47]=z,e[48]=A):A=e[48];let U;e[49]!==s||e[50]!==d||e[51]!==f||e[52]!==u.fileSearchOpen||e[53]!==u.status||e[54]!==u.treeSource?(U=a.jsx("div",{id:"file-list",children:u.treeSource?a.jsx(vr,{fileSearchOpen:u.fileSearchOpen,label:s,onSelectItem:d,selectedPath:f,source:u.treeSource}):u.status.loading||u.status.pending?a.jsx(yr,{}):a.jsx("div",{className:"visually-hidden",children:u.status.message})}),e[49]=s,e[50]=d,e[51]=f,e[52]=u.fileSearchOpen,e[53]=u.status,e[54]=u.treeSource,e[55]=U):U=e[55];let $;e[56]!==r||e[57]!==i||e[58]!==o||e[59]!==l?($=a.jsx(ki,{entries:r,hasDraft:o,labels:i,onSelect:l}),e[56]=r,e[57]=i,e[58]=o,e[59]=l,e[60]=$):$=e[60];let G;return e[61]!==I||e[62]!==g||e[63]!==A||e[64]!==U||e[65]!==$||e[66]!==x||e[67]!==y?(G=a.jsxs("aside",{id:"files-sidebar","aria-label":g,"aria-hidden":x,inert:y,children:[I,A,U,$]}),e[61]=I,e[62]=g,e[63]=A,e[64]=U,e[65]=$,e[66]=x,e[67]=y,e[68]=G):G=e[68],G}function vr(t){const e=C.c(18),{fileSearchOpen:r,label:i,onSelectItem:n,selectedPath:o,source:s}=t;let l;e[0]!==i||e[1]!==n||e[2]!==s?(l={label:i,onSelectItem:n,source:s},e[0]=i,e[1]=n,e[2]=s,e[3]=l):l=e[3];const d=He(l);let f;e[4]!==s.paths?(f=()=>We(s.paths),e[4]=s.paths,e[5]=f):f=e[5];const[u]=M.useState(f);let c;e[6]!==o?(c=o?[o]:[],e[6]=o,e[7]=c):c=e[7];let p;e[8]===Symbol.for("react.memo_cache_sentinel")?(p=Pt(),e[8]=p):p=e[8];const m=s.gitStatus;let g;e[9]===Symbol.for("react.memo_cache_sentinel")?(g=Oi(),e[9]=g):g=e[9];let x;e[10]!==u||e[11]!==d||e[12]!==c||e[13]!==m?(x={flattenEmptyDirectories:!1,id:"cmux-diff-file-tree",initialExpansion:"open",initialSelectedPaths:c,initialVisibleRowCount:p,itemHeight:24,overscan:12,preparedInput:u,search:!0,searchBlurBehavior:"retain",stickyFolders:!0,gitStatus:m,sort:wr,unsafeCSS:g,onSelectionChange(v){const h=v[v.length-1],k=d.current.source.pathToItemId.get(h);k&&d.current.onSelectItem(k)}},e[10]=u,e[11]=d,e[12]=c,e[13]=m,e[14]=x):x=e[14];const{model:y}=zt(x);_r(y,s),Tr(y,r),Lr(y,o);let b;e[15]===Symbol.for("react.memo_cache_sentinel")?(b={height:"100%"},e[15]=b):b=e[15];let w;return e[16]!==y?(w=a.jsx(Dt,{model:y,style:b}),e[16]=y,e[17]=w):w=e[17],w}function wr(){return 0}function yr(){const t=C.c(1);let e;return t[0]===Symbol.for("react.memo_cache_sentinel")?(e=a.jsx("div",{className:"diff-loading-placeholder","aria-hidden":"true",children:Ji.map(kr)}),t[0]=e):e=t[0],e}function kr(t,e){return a.jsxs("div",{className:"grid h-6 grid-cols-[16px_minmax(0,1fr)_44px] items-center gap-2 rounded-[5px] px-[7px]",children:[a.jsx("span",{className:"size-4 rounded-[5px] border border-[color-mix(in_lab,var(--cmux-diff-fg)_18%,transparent)]"}),a.jsx("span",{className:"h-[11px] rounded bg-[var(--cmux-diff-muted-bg)]",style:{width:t}}),a.jsx("span",{className:"h-[11px] justify-self-end rounded bg-[var(--cmux-diff-muted-bg)] opacity-70",style:{width:e%2===0?"34px":"24px"}})]},`${t}-${e}`)}function Sr(){const t=C.c(2);let e;t[0]===Symbol.for("react.memo_cache_sentinel")?(e=a.jsxs("div",{className:"mb-3 grid h-9 grid-cols-[72px_minmax(0,1fr)_96px] items-center gap-3 rounded-md bg-[color-mix(in_lab,var(--cmux-diff-fg)_5%,transparent)] px-3",children:[a.jsx("span",{className:"h-3 rounded bg-[var(--cmux-diff-muted-bg)]"}),a.jsx("span",{className:"h-3 w-2/5 rounded bg-[var(--cmux-diff-muted-bg)]"}),a.jsx("span",{className:"h-3 rounded bg-[var(--cmux-diff-muted-bg)] opacity-70"})]}),t[0]=e):e=t[0];let r;return t[1]===Symbol.for("react.memo_cache_sentinel")?(r=a.jsxs("div",{className:"diff-loading-placeholder mx-3.5 mt-3.5 border-t border-[var(--cmux-diff-border)] pt-3","aria-hidden":"true",children:[e,a.jsx("div",{className:"space-y-[13px] px-3 py-1",children:qi.map(jr)})]}),t[1]=r):r=t[1],r}function jr(t,e){return a.jsxs("div",{className:"grid grid-cols-[42px_minmax(0,1fr)] items-center gap-4",children:[a.jsx("span",{className:"h-px bg-[color-mix(in_lab,var(--cmux-diff-fg)_10%,transparent)]"}),a.jsx("span",{className:"h-3 rounded bg-[var(--cmux-diff-muted-bg)]",style:{width:t}})]},`${t}-${e}`)}function Ir(t){const e=C.c(16),{label:r,status:i}=t;if(!i.loading&&!i.pending&&!i.statusOnly&&!i.error)return null;const n=i.error?"true":"false",o=i.pending?"true":"false";let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=a.jsx("span",{id:"status-icon","aria-hidden":"true"}),e[0]=s):s=e[0];let l;e[1]!==r||e[2]!==i.message?(l=i.message||r("loadingDiff"),e[1]=r,e[2]=i.message,e[3]=l):l=e[3];let d;e[4]!==l?(d=a.jsx("span",{id:"status-text",children:l}),e[4]=l,e[5]=d):d=e[5];let f;e[6]!==n||e[7]!==o||e[8]!==d?(f=a.jsxs("div",{id:"status","data-error":n,"data-pending":o,children:[s,d]}),e[6]=n,e[7]=o,e[8]=d,e[9]=f):f=e[9];let u;e[10]!==i.loading||e[11]!==i.pending?(u=i.loading||i.pending?a.jsx(Sr,{}):null,e[10]=i.loading,e[11]=i.pending,e[12]=u):u=e[12];let c;return e[13]!==f||e[14]!==u?(c=a.jsxs("div",{id:"loading-layer","aria-live":"polite",children:[f,u]}),e[13]=f,e[14]=u,e[15]=c):c=e[15],c}function He(t){const e=C.c(3),r=M.useRef(t);let i,n;return e[0]!==t?(i=()=>{r.current=t},n=[t],e[0]=t,e[1]=i,e[2]=n):(i=e[1],n=e[2]),M.useEffect(i,n),r}function Cr(t,e){const r=C.c(5),i=Lt(),n=M.useRef(null);let o,s;r[0]!==e||r[1]!==t||r[2]!==i?(o=()=>{if(!i||Pr(n.current,t))return;let l=!0;return n.current=t,i.setRenderOptions(t).then(()=>{l&&e.current?.getInstance()?.render(!0)}).catch(Mr),()=>{l=!1}},s=[e,t,i],r[0]=e,r[1]=t,r[2]=i,r[3]=o,r[4]=s):(o=r[3],s=r[4]),M.useEffect(o,s)}function Mr(t){return console.warn("cmux diff worker render options update failed",t)}function Pr(t,e){return t?.lineDiffType===e.lineDiffType&&t?.maxLineDiffLength===e.maxLineDiffLength&&t?.preferredHighlighter===e.preferredHighlighter&&Fr(t?.theme,e.theme)&&t?.tokenizeMaxLineLength===e.tokenizeMaxLineLength&&t?.useTokenTransformer===e.useTokenTransformer}function Fr(t,e){return t===e?!0:typeof t!="object"||t==null||typeof e!="object"||e==null?!1:t.dark===e.dark&&t.light===e.light}function _r(t,e){const r=C.c(4),i=M.useRef(null);let n,o;r[0]!==t||r[1]!==e?(n=()=>{const s=i.current;i.current=e;const l=Pi(s,e,e.paths);let d=l.kind==="append"?l.requiresFullGitStatus:!1;if(l.kind==="append"){if(l.addedPaths.length>0)try{t.batch(l.addedPaths.map(Br)),d=!l.sourceFollowsPrevious}catch{const f=We(e.paths);t.resetPaths(e.paths,{preparedInput:f}),d=!0}}else{const f=We(e.paths);t.resetPaths(e.paths,{preparedInput:f}),d=!0}Fi(t,e,d)},o=[t,e],r[0]=t,r[1]=e,r[2]=n,r[3]=o):(n=r[2],o=r[3]),M.useEffect(n,o)}function Br(t){return{type:"add",path:t}}function Tr(t,e){const r=C.c(4);let i,n;r[0]!==e||r[1]!==t?(i=()=>{e?t.openSearch(""):t.closeSearch()},n=[e,t],r[0]=e,r[1]=t,r[2]=i,r[3]=n):(i=r[2],n=r[3]),M.useEffect(i,n)}function Lr(t,e){const r=C.c(4);let i,n;r[0]!==t||r[1]!==e?(i=()=>{_i(t,e)},n=[t,e],r[0]=t,r[1]=e,r[2]=i,r[3]=n):(i=r[2],n=r[3]),M.useEffect(i,n)}function zr(t,e,r,i,n){const o=C.c(7),s=M.useRef(-1);let l,d;o[0]!==t||o[1]!==r||o[2]!==e||o[3]!==i||o[4]!==n?(l=()=>{if(s.current===n||Mt(t.payload))return;s.current=n;const f=()=>i.current.renderGeneration===n,u=t.payload??{},c=Ke(u.appearance);c.themes.light.name&&et(c.themes.light.name,()=>Promise.resolve(ct(c.themes.light,c))),c.themes.dark.name&&et(c.themes.dark.name,()=>Promise.resolve(ct(c.themes.dark,c)));const p=[];r({type:"set-status",status:Q(e("parsingDiff"),{loading:!0})}),Qt({getCollapsed:()=>i.current.options.collapsed,initialFileTreeRowCount:Pt(),label:e,onBatch:m=>{f()&&(p.push(...m),r({type:"append-items",items:m}))},onComplete:m=>{if(!f())return;r({type:"set-metrics",metrics:m});const g=p;if(g.length===0){r({type:"set-status",status:Q(e("noFileDiffs"),{error:!0,loading:!1,statusOnly:!0})});return}const x=Array.from(new Set([c.theme?.light,c.theme?.dark].filter(Boolean))),y=Array.from(new Set(g.flatMap(Nr)));Rt({themes:x,langs:y.length>0?y:["text"]}).catch(Dr)},onMetrics:m=>{f()&&r({type:"set-metrics",metrics:m})},onRename:m=>{f()&&r({type:"rename-item",oldId:m.oldId,newId:m.newId})},onTreeSource:m=>{f()&&r({type:"set-tree-source",source:m})},parsePatchFiles:Ot,patchURL:u.patchURL,processFile:Nt}).catch(m=>{f()&&(console.error("cmux diff viewer render failed",m),r({type:"set-status",status:Q(e("renderFailed"),{error:!0,loading:!1,statusOnly:!0})}))})},d=[t,r,e,i,n],o[0]=t,o[1]=r,o[2]=e,o[3]=i,o[4]=n,o[5]=l,o[6]=d):(l=o[5],d=o[6]),M.useEffect(l,d)}function Dr(t){return console.warn("cmux diff highlighter preload failed",t)}function Nr(t){const e=t.fileDiff??{},r=e.lang??Vt(ye(e,""))??"text";return r?[r]:[]}function Mt(t){return t?.pendingReplacement===!0||typeof t?.statusMessage=="string"&&t.statusMessage.length>0}function Or(t,e,r){const i=C.c(5),n=M.useRef(!1);let o,s;i[0]!==r||i[1]!==e||i[2]!==t?(o=()=>{if(!n.current){if(n.current=!0,t.pendingReplacement===!0){r({type:"set-status",status:Q(t.statusMessage??e("loadingDiff"),{loading:!0,pending:!0})}),fetch("/__cmux_diff_viewer_wait"+location.pathname,{cache:"no-store"}).then(Rr).catch(l=>{document.documentElement.dataset.cmuxDiffWait="failed",r({type:"set-status",status:Q(e("renderFailed"),{error:!0,loading:!1,statusOnly:!0})}),console.warn("cmux diff viewer deferred load failed",l)});return}typeof t.statusMessage=="string"&&t.statusMessage.length>0&&r({type:"set-status",status:Q(t.statusMessage,{error:t.statusIsError===!0,loading:!1,statusOnly:!0})})}},s=[r,e,t],i[0]=r,i[1]=e,i[2]=t,i[3]=o,i[4]=s):(o=i[3],s=i[4]),M.useEffect(o,s)}async function Rr(t){if(!t.ok)throw new Error("replacement failed");(await t.text()).includes('data-cmux-diff-pending="true"')||window.location.reload()}function Vr(t){const e=C.c(10);let r;e[0]!==t.filesVisible||e[1]!==t.items||e[2]!==t.metrics||e[3]!==t.options.diffIndicators||e[4]!==t.options.layout||e[5]!==t.options.wordWrap||e[6]!==t.status?(r=()=>{document.body.dataset.filesHidden=t.filesVisible?"false":"true",document.body.dataset.loading=t.status.loading?"true":"false",document.documentElement.dataset.layout=t.options.layout,document.documentElement.dataset.wordWrap=String(t.options.wordWrap),document.documentElement.dataset.diffIndicators=t.options.diffIndicators,t.metrics&&(document.body.dataset.streamFileCount=String(t.metrics.fileCount??t.items.length),document.body.dataset.streamRenderableFileCount=String(t.metrics.renderableFileCount??t.items.length),document.body.dataset.streamFlushCount=String(t.metrics.flushCount??0),document.body.dataset.streamMaxBatchSize=String(t.metrics.maxBatchSize??0),document.body.dataset.streamTreeRefreshCount=String(t.metrics.treeRefreshCount??0),Number.isFinite(t.metrics.completedAt)&&t.metrics.completedAt>0&&(document.body.dataset.streamElapsedMs=String(Math.round(t.metrics.completedAt-t.metrics.startedAt)))),Ze(t.status)},e[0]=t.filesVisible,e[1]=t.items,e[2]=t.metrics,e[3]=t.options.diffIndicators,e[4]=t.options.layout,e[5]=t.options.wordWrap,e[6]=t.status,e[7]=r):r=e[7];let i;e[8]!==t?(i=[t],e[8]=t,e[9]=i):i=e[9],M.useEffect(r,i)}function Ar(t,e,r,i){const n=C.c(18);let o;n[0]!==r||n[1]!==i||n[2]!==t.diffViewerNextFile||n[3]!==t.diffViewerNextHunk||n[4]!==t.diffViewerOpenFileSearch||n[5]!==t.diffViewerPrevFile||n[6]!==t.diffViewerPrevHunk||n[7]!==t.diffViewerScrollDown||n[8]!==t.diffViewerScrollToBottom||n[9]!==t.diffViewerScrollToTop||n[10]!==t.diffViewerScrollUp||n[11]!==e?(o=()=>{const l=se(t.diffViewerScrollDown),d=se(t.diffViewerScrollUp),f=se(t.diffViewerScrollToBottom),u=se(t.diffViewerScrollToTop),c=se(t.diffViewerOpenFileSearch),p=se(t.diffViewerNextHunk),m=se(t.diffViewerPrevHunk),g=se(t.diffViewerNextFile),x=se(t.diffViewerPrevFile);let y=null,b=0;const w=()=>{y=null,b!==0&&(window.clearTimeout(b),b=0)},v=h=>{if(!(h.defaultPrevented||Ur(h.target))){if(y&&!Le(y.shortcut.second,h)&&w(),y&&Le(y.shortcut.second,h)){h.preventDefault(),y.action(),w();return}if(de(l,h)){h.preventDefault(),ut(e.current,1);return}if(de(d,h)){h.preventDefault(),ut(e.current,-1);return}if(de(f,h)){h.preventDefault(),e.current?.scrollTo({top:e.current.scrollHeight,behavior:"auto"});return}if(de(c,h)){h.preventDefault(),r({type:"set-file-search-open",open:!0});return}if(de(p,h)){h.preventDefault(),i.current.nextHunk();return}if(de(m,h)){h.preventDefault(),i.current.prevHunk();return}if(de(g,h)){h.preventDefault(),i.current.nextFile();return}if(de(x,h)){h.preventDefault(),i.current.prevFile();return}u&&$r(u,h)&&(h.preventDefault(),y={shortcut:u,action:()=>e.current?.scrollTo({top:0,behavior:"auto"})},b=window.setTimeout(w,700))}};return document.addEventListener("keydown",v),()=>{w(),document.removeEventListener("keydown",v)}},n[0]=r,n[1]=i,n[2]=t.diffViewerNextFile,n[3]=t.diffViewerNextHunk,n[4]=t.diffViewerOpenFileSearch,n[5]=t.diffViewerPrevFile,n[6]=t.diffViewerPrevHunk,n[7]=t.diffViewerScrollDown,n[8]=t.diffViewerScrollToBottom,n[9]=t.diffViewerScrollToTop,n[10]=t.diffViewerScrollUp,n[11]=e,n[12]=o):o=n[12];let s;n[13]!==r||n[14]!==i||n[15]!==t||n[16]!==e?(s=[r,i,t,e],n[13]=r,n[14]=i,n[15]=t,n[16]=e,n[17]=s):s=n[17],M.useEffect(o,s)}function Er(t,e){const r=C.c(4);let i,n;r[0]!==e||r[1]!==t?(i=()=>{if(!t)return;const o=l=>{l.target instanceof Element&&l.target.closest("#toolbar")||e({type:"set-options-open",open:!1})},s=l=>{l.key==="Escape"&&e({type:"set-options-open",open:!1})};return document.addEventListener("click",o),document.addEventListener("keydown",s),()=>{document.removeEventListener("click",o),document.removeEventListener("keydown",s)}},n=[e,t],r[0]=e,r[1]=t,r[2]=i,r[3]=n):(i=r[2],n=r[3]),M.useEffect(i,n)}function se(t){return!t||t.unbound===!0||!t.first?null:{first:ft(t.first),second:t.second?ft(t.second):null}}function ft(t){return{key:String(t?.key??"").toLowerCase(),command:t?.command===!0,shift:t?.shift===!0,option:t?.option===!0,control:t?.control===!0}}function de(t,e){return!!(t&&!t.second&&Le(t.first,e))}function $r(t,e){return!!(t.second&&Le(t.first,e))}function Le(t,e){return!t||e.metaKey!==t.command||e.ctrlKey!==t.control||e.altKey!==t.option||e.shiftKey!==t.shift?!1:Wr(e)===t.key}function Wr(t){return t.code==="Space"?"space":typeof t.key!="string"||t.key.length===0?"":(t.key.length===1,t.key.toLowerCase())}function Ur(t){return!!(t instanceof Element?t:null)?.closest("input, textarea, select, [contenteditable='true']")}function ut(t,e){if(!t)return;const r=Math.max(80,Math.floor(t.clientHeight*.38));t.scrollBy({top:e*r,behavior:"auto"})}function Gr(t,e){return e.some(r=>r.id===t)?t:e[0]?.id??""}function Pt(){const t=window.visualViewport?.height??window.innerHeight;return!Number.isFinite(t)||t<=0?25:Math.min(96,Math.max(25,Math.ceil(t/24)))}const Hr=`@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-outline-style:solid}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--font-weight-medium:500;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--ease-out:cubic-bezier(0, 0, .2, 1);--blur-sm:8px;--blur-lg:16px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.\\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.top-0{top:calc(var(--spacing) * 0)}.top-1\\/2{top:50%}.right-2\\.5{right:calc(var(--spacing) * 2.5)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-\\[calc\\(100\\%\\+6px\\)\\]{bottom:calc(100% + 6px)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-px{margin:1px}.mx-3\\.5{margin-inline:calc(var(--spacing) * 3.5)}.ms-1{margin-inline-start:calc(var(--spacing) * 1)}.mt-1\\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-3\\.5{margin-top:calc(var(--spacing) * 3.5)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-\\[3px\\]{margin-right:3px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-px{margin-bottom:1px}.ml-1\\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-16{width:calc(var(--spacing) * 16);height:calc(var(--spacing) * 16)}.size-\\[22px\\]{width:22px;height:22px}.\\!h-auto{height:auto!important}.h-0{height:calc(var(--spacing) * 0)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-\\[1lh\\]{height:1lh}.h-\\[1px\\]{height:1px}.h-\\[11px\\]{height:11px}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.max-h-\\[25dvh\\]{max-height:25dvh}.max-h-\\[140px\\]{max-height:140px}.max-h-none{max-height:none}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\\[1\\.25rem\\]{min-height:1.25rem}.w-2\\/5{width:40%}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-7{width:calc(var(--spacing) * 7)}.w-52{width:calc(var(--spacing) * 52)}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-16{max-width:calc(var(--spacing) * 16)}.max-w-20{max-width:calc(var(--spacing) * 20)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-\\[60\\%\\]{max-width:60%}.max-w-\\[77\\%\\]{max-width:77%}.max-w-\\[320px\\]{max-width:320px}.max-w-full{max-width:100%}.max-w-none{max-width:none}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-56{min-width:calc(var(--spacing) * 56)}.min-w-max{min-width:max-content}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.-translate-y-1\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-\\[16px_minmax\\(0\\,1fr\\)_44px\\]{grid-template-columns:16px minmax(0,1fr) 44px}.grid-cols-\\[42px_minmax\\(0\\,1fr\\)\\]{grid-template-columns:42px minmax(0,1fr)}.grid-cols-\\[72px_minmax\\(0\\,1fr\\)_96px\\]{grid-template-columns:72px minmax(0,1fr) 96px}.grid-cols-\\[auto_minmax\\(0\\,1fr\\)_auto\\]{grid-template-columns:auto minmax(0,1fr) auto}.grid-cols-\\[minmax\\(0\\,auto\\)_auto_minmax\\(0\\,1fr\\)\\]{grid-template-columns:minmax(0,auto) auto minmax(0,1fr)}.flex-col{flex-direction:column}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-\\[5px\\]{gap:5px}:where(.space-y-\\[13px\\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(13px * var(--tw-space-y-reverse));margin-block-end:calc(13px * calc(1 - var(--tw-space-y-reverse)))}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\\[5px\\]{border-radius:5px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_18\\%\\,transparent\\)\\]{border-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.border-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_18\\%\\,transparent\\)\\]{border-color:color-mix(in lab,var(--cmux-diff-fg) 18%,transparent)}}.border-\\[color\\:var\\(--gray-0\\)\\]{border-color:var(--gray-0)}.border-\\[var\\(--cmux-diff-border\\)\\]{border-color:var(--cmux-diff-border)}.border-transparent{border-color:#0000}.bg-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_5\\%\\,transparent\\)\\]{background-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.bg-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_5\\%\\,transparent\\)\\]{background-color:color-mix(in lab,var(--cmux-diff-fg) 5%,transparent)}}.bg-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_10\\%\\,transparent\\)\\]{background-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.bg-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_10\\%\\,transparent\\)\\]{background-color:color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}.bg-\\[color\\:var\\(--gray-0\\)\\]{background-color:var(--gray-0)}.bg-\\[var\\(--cmux-diff-muted-bg\\)\\]{background-color:var(--cmux-diff-muted-bg)}.\\[mask-image\\:linear-gradient\\(to_right\\,black_calc\\(100\\%_-_0\\.25rem\\)\\,transparent\\)\\]{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - .25rem),#0000);mask-image:linear-gradient(90deg,#000 calc(100% - .25rem),#0000)}.\\[mask-repeat\\:no-repeat\\]{-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.object-cover{object-fit:cover}.p-0\\.5{padding:calc(var(--spacing) * .5)}.p-2{padding:calc(var(--spacing) * 2)}.\\!px-0{padding-inline:calc(var(--spacing) * 0)!important}.px-0\\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-\\[7px\\]{padding-inline:7px}.px-\\[var\\(--padding-row-x\\)\\]{padding-inline:var(--padding-row-x)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-\\[var\\(--padding-row-y\\)\\]{padding-block:var(--padding-row-y)}.pt-0\\.5{padding-top:calc(var(--spacing) * .5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pr-0{padding-right:calc(var(--spacing) * 0)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-left{text-align:left}.align-bottom{vertical-align:bottom}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\!leading-none{--tw-leading:1!important;line-height:1!important}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-\\[18px\\]{--tw-leading:18px;line-height:18px}.leading-\\[calc\\(var\\(--codex-chat-font-size\\)\\+8px\\)\\]{--tw-leading:calc(var(--codex-chat-font-size) + 8px);line-height:calc(var(--codex-chat-font-size) + 8px)}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.break-words{overflow-wrap:break-word}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.text-current{color:currentColor}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-\\[0\\.5px\\]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(.5px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-none{-webkit-user-select:none;user-select:none}.\\[--edge-fade-distance\\:2rem\\]{--edge-fade-distance:2rem}.group-focus-within\\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media(hover:hover){.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\\:bg-transparent:hover{background-color:#0000}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-40:disabled{opacity:.4}.data-\\[state\\=checked\\]\\:translate-x-\\[14px\\][data-state=checked]{--tw-translate-x:14px;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\\[state\\=unchecked\\]\\:translate-x-\\[2px\\][data-state=unchecked]{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y)}@container (min-width:500px){.\\@\\[500px\\]\\:inline{display:inline}}.\\[\\&_\\.ProseMirror\\]\\:\\!h-5 .ProseMirror{height:calc(var(--spacing) * 5)!important}.\\[\\&_\\.ProseMirror\\]\\:h-auto .ProseMirror{height:auto}.\\[\\&_\\.ProseMirror\\]\\:\\!min-h-5 .ProseMirror{min-height:calc(var(--spacing) * 5)!important}.\\[\\&_\\.ProseMirror\\]\\:min-h-\\[2rem\\] .ProseMirror{min-height:2rem}.\\[\\&_\\.ProseMirror\\]\\:min-w-0 .ProseMirror{min-width:calc(var(--spacing) * 0)}.\\[\\&_\\.ProseMirror\\]\\:flex-1 .ProseMirror{flex:1}.\\[\\&_\\.ProseMirror\\]\\:resize-none .ProseMirror{resize:none}.\\[\\&_\\.ProseMirror\\]\\:overflow-hidden .ProseMirror{overflow:hidden}.\\[\\&_\\.ProseMirror\\]\\:leading-5 .ProseMirror{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.\\[\\&_\\.ProseMirror\\]\\:whitespace-nowrap .ProseMirror{white-space:nowrap}.\\[\\&_\\.ProseMirror\\]\\:focus-visible\\:outline-none .ProseMirror:focus-visible{--tw-outline-style:none;outline-style:none}.\\[\\&_\\.ProseMirror_p\\]\\:m-0 .ProseMirror p{margin:calc(var(--spacing) * 0)}.\\[\\&_\\.ProseMirror_p\\]\\:overflow-hidden .ProseMirror p{overflow:hidden}.\\[\\&_\\.ProseMirror_p\\]\\:text-ellipsis .ProseMirror p{text-overflow:ellipsis}.\\[\\&_\\.ProseMirror_p\\]\\:whitespace-nowrap .ProseMirror p{white-space:nowrap}.\\[\\&_\\.contain-inline-size\\]\\:\\[contain\\:initial\\] .contain-inline-size{contain:initial}.\\[\\&\\>\\*\\:last-child\\]\\:mb-0>:last-child{margin-bottom:calc(var(--spacing) * 0)}.\\[\\&\\>ol\\:first-child\\]\\:mt-0>ol:first-child,.\\[\\&\\>ul\\:first-child\\]\\:mt-0>ul:first-child{margin-top:calc(var(--spacing) * 0)}}:root{color-scheme:light dark;--cmux-diff-bg-light:#fff;--cmux-diff-bg-dark:#000;--cmux-diff-fg-light:#000;--cmux-diff-fg-dark:#fff;--cmux-diff-selection-bg-light:#abd8ff;--cmux-diff-selection-bg-dark:#3f638b;--cmux-diff-ui-font-family:system-ui, -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", Arial, sans-serif;--cmux-diff-ui-font-size:12px;--cmux-diff-ui-line-height:16px;--cmux-diff-code-font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;--cmux-diff-font-size:10px;--cmux-diff-line-height:20px;--cmux-diff-bg:var(--cmux-diff-bg-light);--cmux-diff-fg:var(--cmux-diff-fg-light);--cmux-diff-border:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-border:color-mix(in lab, var(--cmux-diff-fg) 12%, transparent)}}:root{--cmux-diff-toolbar-bg:var(--cmux-diff-bg);--cmux-diff-sidebar-bg:var(--cmux-diff-bg);--cmux-diff-muted-bg:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-muted-bg:color-mix(in lab, var(--cmux-diff-fg) 8%, transparent)}}:root{--cmux-diff-hover-bg:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-hover-bg:color-mix(in lab, var(--cmux-diff-fg) 10%, transparent)}}:root{--cmux-diff-accent:light-dark(#0a84ff,#7ab7ff);--cmux-diff-text-muted:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-text-muted:color-mix(in lab, var(--cmux-diff-fg) 72%, var(--cmux-diff-bg))}}:root{--cmux-diff-text-subtle:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-text-subtle:color-mix(in lab, var(--cmux-diff-fg) 84%, var(--cmux-diff-bg))}}:root{--cmux-diff-surface-fill-light:var(--cmux-diff-bg-light);--cmux-diff-surface-fill-dark:var(--cmux-diff-bg-dark);--cmux-diff-surface-fill:var(--cmux-diff-surface-fill-light);background:var(--cmux-diff-surface-fill);color:var(--cmux-diff-fg)}@media(prefers-color-scheme:dark){:root{--cmux-diff-bg:var(--cmux-diff-bg-dark);--cmux-diff-fg:var(--cmux-diff-fg-dark);--cmux-diff-surface-fill:var(--cmux-diff-surface-fill-dark)}}*{box-sizing:border-box}html,body{background:var(--cmux-diff-surface-fill);height:100%;overflow:hidden}body{background:var(--cmux-diff-surface-fill);height:100vh;min-height:0;color:var(--cmux-diff-fg);font-family:var(--cmux-diff-ui-font-family);font-size:var(--cmux-diff-ui-font-size);line-height:var(--cmux-diff-ui-line-height);flex-direction:column;margin:0;display:flex;overflow:hidden}#root{background:0 0;height:100%;min-height:0}#app{overscroll-behavior:contain;contain:strict;height:100vh;min-height:0;color:inherit;background:0 0;grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr);display:grid;overflow:hidden}.copy-fallback-textarea{opacity:0;pointer-events:none;width:1px;height:1px;position:fixed;top:0;left:-9999px}#toolbar{border-bottom:1px solid var(--cmux-diff-border);background:var(--cmux-diff-toolbar-bg);min-height:32px;color:var(--cmux-diff-fg);flex:none;grid-template-columns:minmax(0,1.1fr) minmax(124px,.9fr) auto;align-items:center;gap:7px;padding:3px 4px 3px 8px;display:grid;position:relative}@supports (color:color-mix(in lab,red,red)){#toolbar{color:color-mix(in lab,var(--cmux-diff-fg) 76%,var(--cmux-diff-bg))}}#toolbar{z-index:50}.toolbar-left,.toolbar-middle,.toolbar-actions{align-items:center;min-width:0;display:flex}.toolbar-left,.toolbar-middle{gap:6px}.toolbar-left{justify-self:stretch}.toolbar-middle{justify-content:center}.toolbar-actions{justify-self:end;gap:4px}#source-select,#repo-select,#base-select,#jump-select{appearance:none;background:linear-gradient(45deg,transparent 50%,currentColor 50%) right 11px center / 4px 4px no-repeat,linear-gradient(135deg,currentColor 50%,transparent 50%) right 7px center / 4px 4px no-repeat,var(--cmux-diff-fg);border:1px solid #0000;border-radius:6px;min-width:0;max-width:100%;height:24px;padding:0 24px 0 9px}@supports (color:color-mix(in lab,red,red)){#source-select,#repo-select,#base-select,#jump-select{background:linear-gradient(45deg,transparent 50%,currentColor 50%) right 11px center / 4px 4px no-repeat,linear-gradient(135deg,currentColor 50%,transparent 50%) right 7px center / 4px 4px no-repeat,color-mix(in lab,var(--cmux-diff-fg) 7%,transparent)}}#source-select,#repo-select,#base-select,#jump-select{color:inherit;font:inherit}#source-select{flex:0 118px}#source-select:hover,#repo-select:hover,#base-select:hover,#jump-select:hover{border-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#source-select:hover,#repo-select:hover,#base-select:hover,#jump-select:hover{border-color:color-mix(in lab,var(--cmux-diff-fg) 24%,transparent)}}#source-select:hover,#repo-select:hover,#base-select:hover,#jump-select:hover{background-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#source-select:hover,#repo-select:hover,#base-select:hover,#jump-select:hover{background-color:color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}#source-select[hidden],#repo-select[hidden],#base-select[hidden],#jump-select[hidden]{display:none}#jump-select{width:100%}#repo-select{flex:0 132px}#base-select{flex:0 120px}#source-select:focus,#repo-select:focus,#base-select:focus,#jump-select:focus,.toolbar-icon:focus-visible,.menu-item:focus-visible,.file-entry:focus-visible{outline:2px solid var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#source-select:focus,#repo-select:focus,#base-select:focus,#jump-select:focus,.toolbar-icon:focus-visible,.menu-item:focus-visible,.file-entry:focus-visible{outline:2px solid color-mix(in lab,var(--cmux-diff-fg) 36%,transparent)}}#source-select:focus,#repo-select:focus,#base-select:focus,#jump-select:focus,.toolbar-icon:focus-visible,.menu-item:focus-visible,.file-entry:focus-visible{outline-offset:1px}@media(max-width:760px){#toolbar{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"source actions""jump actions"}.toolbar-left{grid-area:source}.toolbar-middle{grid-area:jump;justify-content:stretch}.toolbar-actions{grid-area:actions}}.toolbar-icon{width:20px;height:20px;color:var(--cmux-diff-fg);background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.toolbar-icon{color:color-mix(in lab,var(--cmux-diff-fg) 60%,var(--cmux-diff-bg))}}.toolbar-icon{cursor:pointer;padding:0}.toolbar-icon:hover,.toolbar-icon[aria-expanded=true]{border-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.toolbar-icon:hover,.toolbar-icon[aria-expanded=true]{border-color:color-mix(in lab,var(--cmux-diff-fg) 14%,transparent)}}.toolbar-icon:hover,.toolbar-icon[aria-expanded=true]{background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.toolbar-icon:hover,.toolbar-icon[aria-expanded=true]{background:color-mix(in lab,var(--cmux-diff-fg) 9%,transparent)}}.toolbar-icon:hover,.toolbar-icon[aria-expanded=true],.toolbar-icon[aria-pressed=true]{color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.toolbar-icon[aria-pressed=true]{color:color-mix(in lab,var(--cmux-diff-fg) 78%,var(--cmux-diff-bg))}}.toolbar-icon[hidden]{display:none}.toolbar-icon svg,.menu-item svg{fill:none;stroke:currentColor;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;width:14px;height:14px;display:block}#layout-toggle svg [data-diff-deletion],#layout-toggle svg [data-diff-addition]{stroke:none}#layout-toggle svg [data-diff-deletion]{fill:light-dark(var(--cmux-diff-deletion-fg-light),var(--cmux-diff-deletion-fg-dark))}#layout-toggle svg [data-diff-addition]{fill:light-dark(var(--cmux-diff-addition-fg-light),var(--cmux-diff-addition-fg-dark))}.toolbar-icon svg [data-precision-dot],.menu-item svg [data-precision-dot]{stroke-width:2px}#options-menu{border:1px solid var(--cmux-diff-fg);min-width:246px;padding:8px;position:absolute;top:calc(100% + 7px);right:10px}@supports (color:color-mix(in lab,red,red)){#options-menu{border:1px solid color-mix(in lab,var(--cmux-diff-fg) 13%,transparent)}}#options-menu{background:var(--cmux-diff-bg);z-index:100;border-radius:8px;box-shadow:0 16px 34px lab(0% none none/.28)}#options-menu[hidden]{display:none}.menu-separator{background:var(--cmux-diff-fg);height:1px;margin:7px 6px}@supports (color:color-mix(in lab,red,red)){.menu-separator{background:color-mix(in lab,var(--cmux-diff-fg) 12%,transparent)}}.menu-item{width:100%;min-height:31px;color:var(--cmux-diff-fg);background:0 0;border:0;border-radius:6px;grid-template-columns:22px minmax(0,1fr) 18px;align-items:center;gap:10px;display:grid}@supports (color:color-mix(in lab,red,red)){.menu-item{color:color-mix(in lab,var(--cmux-diff-fg) 86%,var(--cmux-diff-bg))}}.menu-item{font:inherit;text-align:left;padding:0 7px}.menu-item:hover:not(:disabled){background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.menu-item:hover:not(:disabled){background:color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}.menu-item:hover:not(:disabled){color:var(--cmux-diff-fg)}.menu-segment{cursor:default}.menu-segment:hover{background:0 0}.menu-segment-controls{background:0 0;border-radius:7px;justify-self:end;align-items:center;gap:2px;padding:2px;display:inline-flex}.segment-button{width:27px;height:24px;color:var(--cmux-diff-fg);background:0 0;border:0;border-radius:5px;justify-content:center;align-items:center;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.segment-button{color:color-mix(in lab,var(--cmux-diff-fg) 62%,var(--cmux-diff-bg))}}.segment-button{padding:0}.segment-button:hover,.segment-button[aria-pressed=true]{background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.segment-button:hover,.segment-button[aria-pressed=true]{background:color-mix(in lab,var(--cmux-diff-fg) 12%,transparent)}}.segment-button:hover,.segment-button[aria-pressed=true],.menu-item:disabled{color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.menu-item:disabled{color:color-mix(in lab,var(--cmux-diff-fg) 36%,var(--cmux-diff-bg))}}.menu-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.menu-check{justify-self:end}#content{--cmux-diff-files-width:252px;grid-template-columns:minmax(0,1fr) var(--cmux-diff-files-width);overscroll-behavior:contain;contain:strict;background:0 0;flex:auto;grid-template-rows:minmax(0,1fr);grid-template-areas:"viewer files";min-width:0;min-height:0;display:grid;position:relative;overflow:hidden}body[data-files-hidden=true] #content{grid-template-columns:minmax(0,1fr) 0}body[data-status-only=true] #content{grid-template-columns:minmax(0,1fr);grid-template-areas:"viewer"}#files-sidebar{border-left:1px solid var(--cmux-diff-border);background:var(--cmux-diff-sidebar-bg);contain:strict;opacity:1;flex-direction:column;grid-area:files;width:100%;min-width:0;height:100%;min-height:0;transition:opacity .1s,visibility linear;display:flex;position:relative;overflow:hidden}#files-resize-handle{z-index:3;appearance:none;cursor:col-resize;background:0 0;border:0;outline:none;width:8px;margin:0;padding:0;position:absolute;top:0;bottom:0;left:0}#files-resize-handle:after{content:"";background:0 0;width:1px;position:absolute;top:0;bottom:0;left:0}body[data-files-hidden=true] #files-sidebar{opacity:0;pointer-events:none;visibility:hidden;transition:opacity .1s,visibility 0s linear .1s}body[data-status-only=true] #files-sidebar{display:none}#files-header{z-index:1;border-bottom:1px solid var(--cmux-diff-border);background:var(--cmux-diff-sidebar-bg);min-height:30px;color:var(--cmux-diff-text-muted);justify-content:space-between;align-items:center;gap:8px;padding:0 7px 0 10px;display:flex;position:relative}#files-title{align-items:center;gap:6px;min-width:0;display:inline-flex}#files-header-actions{flex:none;align-items:center;gap:2px;display:inline-flex}#file-search-toggle{width:24px;height:24px;color:var(--cmux-diff-text-muted);background:0 0;border:0;border-radius:5px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}#file-search-toggle:hover,#file-search-toggle[aria-pressed=true]{background:var(--cmux-diff-hover-bg);color:var(--cmux-diff-fg)}#file-search-toggle svg{fill:none;stroke:currentColor;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;width:15px;height:15px}#file-list{background:var(--cmux-diff-sidebar-bg);--trees-bg-override:var(--cmux-diff-sidebar-bg);--trees-fg-override:var(--cmux-diff-text-subtle);--trees-fg-muted-override:var(--cmux-diff-text-muted);--trees-bg-muted-override:var(--cmux-diff-hover-bg);--trees-selected-bg-override:var(--cmux-diff-fg);flex:auto;min-height:0;padding:6px 4px 6px 6px;overflow:hidden}@supports (color:color-mix(in lab,red,red)){#file-list{--trees-selected-bg-override:color-mix(in lab, var(--cmux-diff-fg) 11%, transparent)}}#file-list{--trees-selected-fg-override:var(--cmux-diff-fg);--trees-selected-focused-border-color-override:transparent;--trees-border-color-override:var(--cmux-diff-border);--trees-focus-ring-color-override:var(--cmux-diff-accent)}@supports (color:color-mix(in lab,red,red)){#file-list{--trees-focus-ring-color-override:color-mix(in lab, var(--cmux-diff-accent) 72%, transparent)}}#file-list{--trees-font-family-override:var(--cmux-diff-ui-font-family);--trees-font-size-override:var(--cmux-diff-ui-font-size);--trees-font-weight-semibold-override:500;--trees-density-override:.78;--trees-border-radius-override:5px;--trees-item-padding-x-override:7px;--trees-item-margin-x-override:0;--trees-padding-inline-override:8px;--trees-search-bg-override:var(--cmux-diff-bg)}@supports (color:color-mix(in lab,red,red)){#file-list{--trees-search-bg-override:color-mix(in lab, var(--cmux-diff-bg) 92%, var(--cmux-diff-fg))}}#file-list{--trees-status-added-override:light-dark(var(--cmux-diff-addition-fg-light),var(--cmux-diff-addition-fg-dark));--trees-status-modified-override:var(--cmux-diff-accent);--trees-status-renamed-override:light-dark(#a26300,#ffd166);--trees-status-deleted-override:light-dark(var(--cmux-diff-deletion-fg-light),var(--cmux-diff-deletion-fg-dark))}body[data-loading=false] .diff-loading-placeholder,body[data-loading=false]:not([data-status-only=true]) #loading-layer{display:none}#file-list file-tree-container{width:100%;height:100%;min-height:0;display:block}.file-entry{width:100%;min-height:30px;color:inherit;font:inherit;text-align:left;background:0 0;border:0;border-radius:6px;grid-template-columns:18px minmax(0,1fr) auto;align-items:center;gap:8px;padding:3px 7px;display:grid}.file-entry:hover,.file-entry[aria-current=true]{background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.file-entry:hover,.file-entry[aria-current=true]{background:color-mix(in lab,var(--cmux-diff-fg) 9%,transparent)}}.file-status{width:17px;height:17px;color:var(--cmux-diff-text-muted);border:1px solid;border-radius:5px;justify-content:center;align-items:center;font-size:9px;line-height:1;display:inline-flex}.file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.file-stats{color:var(--cmux-diff-text-muted);gap:5px;display:inline-flex}.stat-add{color:light-dark(var(--cmux-diff-addition-fg-light),var(--cmux-diff-addition-fg-dark))}.stat-del{color:light-dark(var(--cmux-diff-deletion-fg-light),var(--cmux-diff-deletion-fg-dark))}#viewer{--diffs-font-family:var(--cmux-diff-code-font-family);--diffs-header-font-family:var(--cmux-diff-ui-font-family);--diffs-font-size:var(--cmux-diff-font-size);--diffs-line-height:var(--cmux-diff-line-height);--diffs-bg-selection-override:light-dark(var(--cmux-diff-selection-bg-light),var(--cmux-diff-selection-bg-dark));overscroll-behavior:contain;overflow-anchor:none;contain:strict;border-bottom:1px solid var(--cmux-diff-border);background:0 0;grid-area:viewer;width:100%;min-width:0;height:100%;min-height:0;position:relative;overflow:clip auto}.code-view-root{overscroll-behavior:contain;overflow-anchor:none;contain:strict;width:100%;min-width:0;height:100%;min-height:0;position:relative;overflow:clip auto}@media(max-width:520px){#content,body[data-files-hidden=true] #content{grid-template-columns:minmax(0,1fr);grid-template-areas:"viewer"}#files-sidebar{display:none}}@media(prefers-reduced-motion:reduce){#files-sidebar{transition:none}}#viewer diffs-container{--diffs-font-family:var(--cmux-diff-code-font-family);--diffs-header-font-family:var(--cmux-diff-ui-font-family);--diffs-font-size:var(--cmux-diff-font-size);--diffs-line-height:var(--cmux-diff-line-height);--diffs-bg-selection-override:light-dark(var(--cmux-diff-selection-bg-light),var(--cmux-diff-selection-bg-dark));contain:layout paint style;display:block;overflow:clip}#loading-layer{z-index:4;pointer-events:none;contain:strict;background:0 0;grid-area:viewer;position:absolute;inset:0;overflow:hidden}body[data-status-only=true] #loading-layer{pointer-events:auto;justify-content:center;align-items:center;width:100%;height:100%;padding:32px;display:flex;position:static}#status{z-index:5;border:1px solid var(--cmux-diff-fg);align-items:center;gap:10px;max-width:calc(100% - 24px);min-height:32px;padding:8px 12px;display:flex;position:absolute;top:10px;left:12px}@supports (color:color-mix(in lab,red,red)){#status{border:1px solid color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}#status{background:var(--cmux-diff-bg);font-family:var(--cmux-diff-ui-font-family);font-size:13px;line-height:var(--cmux-diff-ui-line-height);color:var(--cmux-diff-fg);border-radius:7px}@supports (color:color-mix(in lab,red,red)){#status{color:color-mix(in lab,var(--cmux-diff-fg) 70%,var(--cmux-diff-bg))}}body[data-status-only=true] #status{text-align:center;text-wrap:balance;width:auto;max-width:340px;min-height:0;color:var(--cmux-diff-fg);background:0 0;border:0;border-radius:0;flex-direction:column;justify-content:center;align-items:center;gap:14px;padding:0;font-size:14px;line-height:1.55;position:static}@supports (color:color-mix(in lab,red,red)){body[data-status-only=true] #status{color:color-mix(in lab,var(--cmux-diff-fg) 58%,var(--cmux-diff-bg))}}body[data-status-only=true] #status-text{letter-spacing:.005em;font-weight:500}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}#status-icon{display:none}body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon{background:var(--cmux-diff-fg);border-radius:16px;justify-content:center;align-items:center;width:56px;height:56px;display:flex}@supports (color:color-mix(in lab,red,red)){body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon{background:color-mix(in lab,var(--cmux-diff-fg) 5%,transparent)}}body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon{border:1px solid var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon{border:1px solid color-mix(in lab,var(--cmux-diff-fg) 8%,transparent)}}body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon:before{content:"";opacity:.8;background-color:currentColor;width:26px;height:26px;display:block;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z'/%3E%3Cpath d='M14 2v6h6'/%3E%3Cpath d='M9 13h6'/%3E%3Cpath d='M9 17h4'/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z'/%3E%3Cpath d='M14 2v6h6'/%3E%3Cpath d='M9 13h6'/%3E%3Cpath d='M9 17h4'/%3E%3C/svg%3E") 50%/contain no-repeat}#status[data-pending=true]:before,body[data-loading=true] #status:before{content:"";border:2px solid var(--cmux-diff-fg);flex:none;width:14px;height:14px}@supports (color:color-mix(in lab,red,red)){#status[data-pending=true]:before,body[data-loading=true] #status:before{border:2px solid color-mix(in lab,var(--cmux-diff-fg) 20%,transparent)}}#status[data-pending=true]:before,body[data-loading=true] #status:before{border-top-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#status[data-pending=true]:before,body[data-loading=true] #status:before{border-top-color:color-mix(in lab,var(--cmux-diff-fg) 70%,var(--cmux-diff-bg))}}#status[data-pending=true]:before,body[data-loading=true] #status:before{border-radius:50%;animation:.8s linear infinite cmuxDiffPendingSpin}#status[data-error=true]{color:light-dark(#b42318,#ff8a80)}@keyframes cmuxDiffPendingSpin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){#status[data-pending=true]:before,body[data-loading=true] #status:before{animation:none}}#comments-section{border-top:1px solid var(--cmux-diff-border);background:var(--cmux-diff-sidebar-bg);flex-direction:column;flex:none;min-height:0;max-height:40%;display:flex}#comments-header{min-height:30px;color:var(--cmux-diff-text-muted);font-size:var(--cmux-diff-ui-font-size);align-items:center;padding:0 10px;display:flex}#comments-list{flex-direction:column;gap:4px;min-height:0;padding:0 6px 6px;display:flex;overflow-y:auto}.comments-empty{color:var(--cmux-diff-text-muted);font-size:var(--cmux-diff-ui-font-size);padding:2px 7px 6px}.comment-entry{color:var(--cmux-diff-text-subtle);font:inherit;font-size:var(--cmux-diff-ui-font-size);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:5px;flex-direction:column;gap:2px;padding:5px 7px;display:flex}.comment-entry:hover{background:var(--cmux-diff-hover-bg)}.comment-entry-header{justify-content:space-between;align-items:center;gap:6px;display:flex}.comment-entry-location{color:var(--cmux-diff-fg);text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}.comment-entry-badge{background:var(--cmux-diff-muted-bg);color:var(--cmux-diff-text-muted);font-size:calc(var(--cmux-diff-ui-font-size) - 1px);border-radius:4px;flex:none;padding:0 5px}.comment-entry-message{text-overflow:ellipsis;white-space:nowrap;color:var(--cmux-diff-text-muted);overflow:hidden}.comment-composer,.comment-card{border:1px solid var(--cmux-diff-border);background:light-dark(var(--cmux-diff-bg),var(--cmux-diff-bg));border-radius:10px;flex-direction:column;gap:8px;max-width:680px;margin:8px 12px;padding:10px 12px;display:flex}@supports (color:color-mix(in lab,red,red)){.comment-composer,.comment-card{background:light-dark(color-mix(in lab,var(--cmux-diff-bg) 92%,#fff),color-mix(in lab,var(--cmux-diff-bg) 90%,#fff))}}.comment-composer,.comment-card{color:var(--cmux-diff-fg);font-family:var(--cmux-diff-ui-font-family);font-size:13px;line-height:1.45;box-shadow:0 1px 2px lab(0% none none/.1),0 2px 8px lab(0% none none/.06)}.comment-composer:focus-within{border-color:var(--cmux-diff-accent)}@supports (color:color-mix(in lab,red,red)){.comment-composer:focus-within{border-color:color-mix(in lab,var(--cmux-diff-accent) 60%,var(--cmux-diff-border))}}.comment-composer:focus-within{box-shadow:0 0 0 3px var(--cmux-diff-accent)}@supports (color:color-mix(in lab,red,red)){.comment-composer:focus-within{box-shadow:0 0 0 3px color-mix(in lab,var(--cmux-diff-accent) 18%,transparent)}}.comment-composer-input{box-sizing:border-box;resize:none;width:100%;min-height:52px;color:var(--cmux-diff-fg);font:inherit;background:0 0;border:0;padding:0}.comment-composer-input::placeholder{color:var(--cmux-diff-text-muted)}.comment-composer-input:focus-visible{outline:none}.comment-composer-footer{justify-content:space-between;align-items:center;gap:8px;display:flex}.comment-composer-buttons{gap:6px;display:inline-flex}.comment-button{color:var(--cmux-diff-text-muted);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;padding:4px 12px;font-weight:500}.comment-button:hover:not(:disabled){background:var(--cmux-diff-hover-bg);color:var(--cmux-diff-fg)}.comment-button:disabled{opacity:.5;cursor:default}.comment-button-primary{background:var(--cmux-diff-accent);color:light-dark(#fff,#08233f)}.comment-button-primary:hover:not(:disabled){background:var(--cmux-diff-accent)}@supports (color:color-mix(in lab,red,red)){.comment-button-primary:hover:not(:disabled){background:color-mix(in lab,var(--cmux-diff-accent) 86%,var(--cmux-diff-fg))}}.comment-button-primary:hover:not(:disabled){color:light-dark(#fff,#08233f)}.comment-card-header{justify-content:space-between;align-items:center;gap:8px;min-height:20px;display:flex}.comment-card-location{font-weight:500;font-size:calc(var(--cmux-diff-ui-font-size) - 1px);color:var(--cmux-diff-text-muted)}.comment-card-actions{opacity:0;gap:2px;transition:opacity .1s;display:inline-flex}.comment-card:hover .comment-card-actions,.comment-card:focus-within .comment-card-actions{opacity:1}.comment-card-action{color:var(--cmux-diff-text-muted);font:inherit;font-size:calc(var(--cmux-diff-ui-font-size) - 1px);cursor:pointer;background:0 0;border:0;border-radius:4px;padding:1px 6px}.comment-card-action:hover{background:var(--cmux-diff-hover-bg);color:var(--cmux-diff-fg)}.comment-card-message{white-space:pre-wrap;overflow-wrap:anywhere}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}`;function Kr(){const t=document.getElementById("cmux-diff-viewer-config");if(!t?.textContent)throw new Error("Missing cmux diff viewer config");return JSON.parse(t.textContent)}function Yr(t){const e=Kr();Et("diff",Hr),Ht(Ke(e.payload?.appearance)),typeof e.payload?.title=="string"&&e.payload.title.trim()!==""&&(document.title=e.payload.title);const r=St(e.payload?.labels,{assertMissing:kt()}),i=Ri(e,r);document.body.dataset.filesHidden="false",Ze(i);const n=$t(()=>a.jsx(Zi,{config:e,initialStatus:i}));Ft.createRoot(t).render(a.jsx(_t,{router:n}))}export{Yr as mountDiffSurface}; diff --git a/Sources/DiffViewerPreferencesStore.swift b/Sources/DiffViewerPreferencesStore.swift new file mode 100644 index 00000000000..df3a806240e --- /dev/null +++ b/Sources/DiffViewerPreferencesStore.swift @@ -0,0 +1,115 @@ +import Foundation + +/// Persists the user's diff viewer display preferences (layout plus the +/// options-menu toggles) as a single JSON file shared with the `cmux` CLI. +/// +/// The viewer webview saves changes through `DiffCommentsBridge` +/// (`viewerPrefs.set`) and reads them back at boot (`viewerPrefs.get`); the +/// CLI reads the same file when generating a viewer page so new diff panels +/// open with the last-used layout. One file, one source of truth — page-local +/// `localStorage` is only a fallback for pages opened outside cmux, because +/// generated viewer origins do not reliably persist web storage. +final class DiffViewerPreferencesStore: @unchecked Sendable { + static let shared = DiffViewerPreferencesStore() + + static let validLayouts: Set = ["split", "unified"] + static let validDiffIndicators: Set = ["bars", "classic", "none"] + static let booleanKeys: Set = [ + "wordWrap", "wordDiffs", "lineNumbers", "showBackgrounds", "expandUnchanged", + ] + + private let lock = NSLock() + private let fileURL: URL? + private var cached: [String: Any]? + + init(fileURL: URL? = DiffViewerPreferencesStore.defaultFileURL()) { + self.fileURL = fileURL + } + + nonisolated static func defaultFileURL( + appSupportDirectory: URL? = FileManager.default.urls( + for: .applicationSupportDirectory, + in: .userDomainMask + ).first, + isRunningUnderAutomatedTests: Bool = SessionRestorePolicy.isRunningUnderAutomatedTests() + ) -> URL? { + guard !isRunningUnderAutomatedTests, let appSupportDirectory else { return nil } + return appSupportDirectory + .appendingPathComponent("cmux", isDirectory: true) + .appendingPathComponent("diff-viewer", isDirectory: true) + .appendingPathComponent("preferences.json", isDirectory: false) + } + + /// Current sanitized preferences. Unknown keys and invalid values are + /// dropped so corrupt or hand-edited files can never poison the viewer. + func preferences() -> [String: Any] { + lock.lock() + defer { lock.unlock() } + return loadLocked() + } + + /// Merges validated updates into the stored preferences and persists + /// atomically. Returns the merged result. + @discardableResult + func merge(_ updates: [String: Any]) -> [String: Any] { + let sanitizedUpdates = Self.sanitize(updates) + lock.lock() + defer { lock.unlock() } + var merged = loadLocked() + for (key, value) in sanitizedUpdates { + merged[key] = value + } + cached = merged + persistLocked(merged) + return merged + } + + static func sanitize(_ raw: [String: Any]) -> [String: Any] { + var sanitized: [String: Any] = [:] + if let layout = raw["layout"] as? String, validLayouts.contains(layout) { + sanitized["layout"] = layout + } + if let indicators = raw["diffIndicators"] as? String, validDiffIndicators.contains(indicators) { + sanitized["diffIndicators"] = indicators + } + for key in booleanKeys { + if let value = raw[key] as? Bool { + sanitized[key] = value + } + } + return sanitized + } + + private func loadLocked() -> [String: Any] { + if let cached { + return cached + } + guard let fileURL, + let data = try? Data(contentsOf: fileURL), + let object = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else { + cached = [:] + return [:] + } + let sanitized = Self.sanitize(object) + cached = sanitized + return sanitized + } + + private func persistLocked(_ preferences: [String: Any]) { + guard let fileURL else { return } + do { + try FileManager.default.createDirectory( + at: fileURL.deletingLastPathComponent(), + withIntermediateDirectories: true + ) + let data = try JSONSerialization.data( + withJSONObject: preferences, + options: [.prettyPrinted, .sortedKeys] + ) + try data.write(to: fileURL, options: .atomic) + } catch { + // Preferences are a convenience; losing a write must never break + // the viewer or the bridge reply. + } + } +} diff --git a/Sources/KeyboardShortcutContext.swift b/Sources/KeyboardShortcutContext.swift index 35d936a340d..36f6a55b2b9 100644 --- a/Sources/KeyboardShortcutContext.swift +++ b/Sources/KeyboardShortcutContext.swift @@ -123,7 +123,11 @@ extension KeyboardShortcutSettings.Action { .diffViewerScrollUp, .diffViewerScrollToBottom, .diffViewerScrollToTop, - .diffViewerOpenFileSearch: + .diffViewerOpenFileSearch, + .diffViewerNextHunk, + .diffViewerPrevHunk, + .diffViewerNextFile, + .diffViewerPrevFile: return .browserPanel case .switchRightSidebarToFiles, .switchRightSidebarToFind, .switchRightSidebarToSessions, .switchRightSidebarToFeed, .switchRightSidebarToDock: return .rightSidebarFocus diff --git a/Sources/KeyboardShortcutSettings.swift b/Sources/KeyboardShortcutSettings.swift index 24def9f497f..8bb0a4e1839 100644 --- a/Sources/KeyboardShortcutSettings.swift +++ b/Sources/KeyboardShortcutSettings.swift @@ -159,6 +159,10 @@ enum KeyboardShortcutSettings { case diffViewerScrollToBottom case diffViewerScrollToTop case diffViewerOpenFileSearch + case diffViewerNextHunk + case diffViewerPrevHunk + case diffViewerNextFile + case diffViewerPrevFile var id: String { rawValue } @@ -254,6 +258,10 @@ enum KeyboardShortcutSettings { case .diffViewerScrollToBottom: return String(localized: "shortcut.diffViewerScrollToBottom.label", defaultValue: "Diff Viewer: Scroll to Bottom") case .diffViewerScrollToTop: return String(localized: "shortcut.diffViewerScrollToTop.label", defaultValue: "Diff Viewer: Scroll to Top") case .diffViewerOpenFileSearch: return String(localized: "shortcut.diffViewerOpenFileSearch.label", defaultValue: "Diff Viewer: Open File Search") + case .diffViewerNextHunk: return String(localized: "shortcut.diffViewerNextHunk.label", defaultValue: "Diff Viewer: Next Hunk") + case .diffViewerPrevHunk: return String(localized: "shortcut.diffViewerPrevHunk.label", defaultValue: "Diff Viewer: Previous Hunk") + case .diffViewerNextFile: return String(localized: "shortcut.diffViewerNextFile.label", defaultValue: "Diff Viewer: Next File") + case .diffViewerPrevFile: return String(localized: "shortcut.diffViewerPrevFile.label", defaultValue: "Diff Viewer: Previous File") } } @@ -486,6 +494,14 @@ enum KeyboardShortcutSettings { ) case .diffViewerOpenFileSearch: return StoredShortcut(key: "/", command: false, shift: false, option: false, control: false) + case .diffViewerNextHunk: + return StoredShortcut(key: "n", command: false, shift: false, option: false, control: false) + case .diffViewerPrevHunk: + return StoredShortcut(key: "p", command: false, shift: false, option: false, control: false) + case .diffViewerNextFile: + return StoredShortcut(key: "]", command: false, shift: false, option: false, control: false) + case .diffViewerPrevFile: + return StoredShortcut(key: "[", command: false, shift: false, option: false, control: false) } } @@ -508,7 +524,11 @@ enum KeyboardShortcutSettings { .diffViewerScrollUp, .diffViewerScrollToBottom, .diffViewerScrollToTop, - .diffViewerOpenFileSearch: + .diffViewerOpenFileSearch, + .diffViewerNextHunk, + .diffViewerPrevHunk, + .diffViewerNextFile, + .diffViewerPrevFile: return true default: return false @@ -521,7 +541,11 @@ enum KeyboardShortcutSettings { .diffViewerScrollUp, .diffViewerScrollToBottom, .diffViewerScrollToTop, - .diffViewerOpenFileSearch: + .diffViewerOpenFileSearch, + .diffViewerNextHunk, + .diffViewerPrevHunk, + .diffViewerNextFile, + .diffViewerPrevFile: return true default: return false diff --git a/Sources/Panels/DiffCommentsBridge.swift b/Sources/Panels/DiffCommentsBridge.swift index d4efab74be0..c875933ae53 100644 --- a/Sources/Panels/DiffCommentsBridge.swift +++ b/Sources/Panels/DiffCommentsBridge.swift @@ -52,11 +52,13 @@ final class DiffCommentsBridge: NSObject, WKScriptMessageHandlerWithReply { } private let store: DiffCommentStore + private let preferencesStore: DiffViewerPreferencesStore - init(store: DiffCommentStore? = nil) { - // Default resolved in the MainActor body: a `.shared` default argument + init(store: DiffCommentStore? = nil, preferencesStore: DiffViewerPreferencesStore? = nil) { + // Defaults resolved in the MainActor body: a `.shared` default argument // would evaluate in the caller's nonisolated context and warn. self.store = store ?? DiffCommentStore.shared + self.preferencesStore = preferencesStore ?? DiffViewerPreferencesStore.shared } /// Adds the reply handler to a user content controller exactly once. @@ -150,6 +152,21 @@ final class DiffCommentsBridge: NSObject, WKScriptMessageHandlerWithReply { throw BridgeError.invalidRequest("Malformed bridge request") } let params = body["params"] as? [String: Any] ?? [:] + + // Viewer display preferences are global (not per-repo), so they are + // handled before the repoRoot requirement that comment methods share. + switch method { + case "viewerPrefs.get": + return ["preferences": preferencesStore.preferences()] + case "viewerPrefs.set": + guard let rawPreferences = params["preferences"] as? [String: Any] else { + throw BridgeError.invalidRequest("Missing preferences") + } + return ["preferences": preferencesStore.merge(rawPreferences)] + default: + break + } + guard let repoRoot = (params["repoRoot"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines), !repoRoot.isEmpty else { throw BridgeError.invalidRequest("Missing repoRoot") diff --git a/cmux.xcodeproj/project.pbxproj b/cmux.xcodeproj/project.pbxproj index 1dee531ea88..073cc63620d 100644 --- a/cmux.xcodeproj/project.pbxproj +++ b/cmux.xcodeproj/project.pbxproj @@ -292,6 +292,7 @@ D1FFC0DE000000000000A002 /* DiffCommentStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1FFC0DE000000000000A001 /* DiffCommentStore.swift */; }; D1FFC0DE000000000000C002 /* DiffCommentStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1FFC0DE000000000000C001 /* DiffCommentStoreTests.swift */; }; D1FFC0DE000000000000D002 /* DiffCommentSubmissionPool.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1FFC0DE000000000000D001 /* DiffCommentSubmissionPool.swift */; }; + D1FFC0DE000000000000A012 /* DiffViewerPreferencesStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1FFC0DE000000000000A011 /* DiffViewerPreferencesStore.swift */; }; B8F266266A1A3D9A45BD840F /* DisplayResolutionRegressionUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8F266276A1A3D9A45BD840F /* DisplayResolutionRegressionUITests.swift */; }; D0C0D0C0D0C0D0C0D0C0D003 /* DockEmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C0D0C0D0C0D0C0D0C0D004 /* DockEmptyView.swift */; }; D0C0D0C0D0C0D0C0D0C0D001 /* DockPanelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C0D0C0D0C0D0C0D0C0D002 /* DockPanelView.swift */; }; @@ -1090,6 +1091,7 @@ D1FFC0DE000000000000A001 /* DiffCommentStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffCommentStore.swift; sourceTree = ""; }; D1FFC0DE000000000000C001 /* DiffCommentStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffCommentStoreTests.swift; sourceTree = ""; }; D1FFC0DE000000000000D001 /* DiffCommentSubmissionPool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffCommentSubmissionPool.swift; sourceTree = ""; }; + D1FFC0DE000000000000A011 /* DiffViewerPreferencesStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffViewerPreferencesStore.swift; sourceTree = ""; }; B8F266276A1A3D9A45BD840F /* DisplayResolutionRegressionUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayResolutionRegressionUITests.swift; sourceTree = ""; }; D0C0D0C0D0C0D0C0D0C0D004 /* DockEmptyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DockEmptyView.swift; sourceTree = ""; }; D0C0D0C0D0C0D0C0D0C0D002 /* DockPanelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DockPanelView.swift; sourceTree = ""; }; @@ -1905,6 +1907,7 @@ C10D51700000000000000001 /* ClosedItemHistory.swift */, D1FFC0DE000000000000D001 /* DiffCommentSubmissionPool.swift */, D1FFC0DE000000000000A001 /* DiffCommentStore.swift */, + D1FFC0DE000000000000A011 /* DiffViewerPreferencesStore.swift */, C3677003000000000000002 /* TabManager+CompatibilityTypes.swift */, E3309A04 /* TabManager+EqualizeSplits.swift */, E3309A0E /* SplitEqualizer.swift */, @@ -2981,6 +2984,7 @@ D1FFC0DE000000000000B002 /* DiffCommentsBridge.swift in Sources */, D1FFC0DE000000000000A002 /* DiffCommentStore.swift in Sources */, D1FFC0DE000000000000D002 /* DiffCommentSubmissionPool.swift in Sources */, + D1FFC0DE000000000000A012 /* DiffViewerPreferencesStore.swift in Sources */, D0C0D0C0D0C0D0C0D0C0D003 /* DockEmptyView.swift in Sources */, D0C0D0C0D0C0D0C0D0C0D001 /* DockPanelView.swift in Sources */, D0B10014A1B2C3D4E5F60001 /* DragOverlayRoutingPolicy.swift in Sources */, diff --git a/cmuxTests/CMUXOpenCommandTests.swift b/cmuxTests/CMUXOpenCommandTests.swift index 16f66b194cd..9712059a742 100644 --- a/cmuxTests/CMUXOpenCommandTests.swift +++ b/cmuxTests/CMUXOpenCommandTests.swift @@ -386,6 +386,14 @@ final class CMUXOpenCommandTests: XCTestCase { XCTAssertEqual((try XCTUnwrap(scrollTop["second"] as? [String: Any]))["key"] as? String, "g") let fileSearch = try XCTUnwrap(shortcuts["diffViewerOpenFileSearch"] as? [String: Any]) XCTAssertEqual(fileSearch["unbound"] as? Bool, true) + let nextHunk = try XCTUnwrap(shortcuts["diffViewerNextHunk"] as? [String: Any]) + XCTAssertEqual((try XCTUnwrap(nextHunk["first"] as? [String: Any]))["key"] as? String, "n") + let prevHunk = try XCTUnwrap(shortcuts["diffViewerPrevHunk"] as? [String: Any]) + XCTAssertEqual((try XCTUnwrap(prevHunk["first"] as? [String: Any]))["key"] as? String, "p") + let nextFile = try XCTUnwrap(shortcuts["diffViewerNextFile"] as? [String: Any]) + XCTAssertEqual((try XCTUnwrap(nextFile["first"] as? [String: Any]))["key"] as? String, "]") + let prevFile = try XCTUnwrap(shortcuts["diffViewerPrevFile"] as? [String: Any]) + XCTAssertEqual((try XCTUnwrap(prevFile["first"] as? [String: Any]))["key"] as? String, "[") let files = try diffViewerAllowedFiles(for: rawURL, from: params) XCTAssertTrue(html.contains("Review diff"), html) XCTAssertTrue(html.contains("