diff --git a/bun.lock b/bun.lock index b7e955c1..a7a6cd95 100644 --- a/bun.lock +++ b/bun.lock @@ -74,7 +74,7 @@ }, "packages/desktop": { "name": "@openchamber/desktop", - "version": "1.4.6", + "version": "1.4.8", "dependencies": { "@openchamber/ui": "workspace:*", "@tauri-apps/plugin-notification": "^2.3.3", @@ -97,7 +97,7 @@ }, "packages/ui": { "name": "@openchamber/ui", - "version": "1.4.6", + "version": "1.4.8", "dependencies": { "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", @@ -106,7 +106,7 @@ "@fontsource/ibm-plex-sans": "^5.1.1", "@ibm/plex": "^6.4.1", "@opencode-ai/sdk": "^1.1.8", - "@pierre/diffs": "^1.0.0", + "@pierre/diffs": "^1.0.5", "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", @@ -169,7 +169,7 @@ }, "packages/vscode": { "name": "openchamber", - "version": "1.4.6", + "version": "1.4.8", "dependencies": { "@openchamber/ui": "workspace:*", "@opencode-ai/sdk": "^1.1.8", @@ -192,7 +192,7 @@ }, "packages/web": { "name": "@openchamber/web", - "version": "1.4.6", + "version": "1.4.8", "bin": { "openchamber": "./bin/cli.js", }, @@ -539,7 +539,7 @@ "@opencode-ai/sdk": ["@opencode-ai/sdk@1.1.8", "", {}, "sha512-N/02945tafTFN1FjlGCWO++dErtNyWaYOdARPifuL4nSsxTk2XtqZ2naZ28rj8kekjYR8JX1MA5upNEqwztOZA=="], - "@pierre/diffs": ["@pierre/diffs@1.0.2", "", { "dependencies": { "@shikijs/core": "^3.0.0", "@shikijs/engine-javascript": "3.19.0", "@shikijs/transformers": "3.19.0", "diff": "8.0.2", "hast-util-to-html": "9.0.5", "lru_map": "0.4.1", "shiki": "3.19.0" }, "peerDependencies": { "react": "^18.3.1 || ^19.0.0", "react-dom": "^18.3.1 || ^19.0.0" } }, "sha512-RkFSDD5X/U+8QjyilPViYGJfmJNWXR17zTL8zw48+DcVC1Ujbh6I1edyuRnFfgRzpft05x2DSCkz2cjoIAxPvQ=="], + "@pierre/diffs": ["@pierre/diffs@1.0.5", "", { "dependencies": { "@shikijs/core": "^3.0.0", "@shikijs/engine-javascript": "^3.0.0", "@shikijs/transformers": "^3.0.0", "diff": "8.0.2", "hast-util-to-html": "9.0.5", "lru_map": "0.4.1", "shiki": "^3.0.0" }, "peerDependencies": { "react": "^18.3.1 || ^19.0.0", "react-dom": "^18.3.1 || ^19.0.0" } }, "sha512-QcFhO6BW1Zz3BP+WFuH1tO2DjFJY5Sb6NmRjmEoVeEu1AVOd3HoUEFTnztxgxn+2c2ZFyFZP+6T4X/g8LDuZLw=="], "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], diff --git a/packages/desktop/src-tauri/Cargo.lock b/packages/desktop/src-tauri/Cargo.lock index ff31e934..cc718b6e 100644 --- a/packages/desktop/src-tauri/Cargo.lock +++ b/packages/desktop/src-tauri/Cargo.lock @@ -2977,7 +2977,7 @@ dependencies = [ [[package]] name = "openchamber-desktop" -version = "1.4.7" +version = "1.4.8" dependencies = [ "anyhow", "axum", diff --git a/packages/ui/package.json b/packages/ui/package.json index 0dcca147..8053d808 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -18,7 +18,7 @@ "@fontsource/ibm-plex-sans": "^5.1.1", "@ibm/plex": "^6.4.1", "@opencode-ai/sdk": "^1.1.8", - "@pierre/diffs": "^1.0.0", + "@pierre/diffs": "^1.0.5", "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", diff --git a/packages/ui/src/components/views/DiffView.tsx b/packages/ui/src/components/views/DiffView.tsx index e9c5b31d..546f4209 100644 --- a/packages/ui/src/components/views/DiffView.tsx +++ b/packages/ui/src/components/views/DiffView.tsx @@ -5,6 +5,7 @@ import { useSessionStore } from '@/stores/useSessionStore'; import { useDirectoryStore } from '@/stores/useDirectoryStore'; import { useUIStore } from '@/stores/useUIStore'; import { useGitStore, useGitStatus, useIsGitRepo, useGitFileCount } from '@/stores/useGitStore'; +import { cn } from '@/lib/utils'; import type { GitStatus } from '@/lib/api/types'; import { DropdownMenu, @@ -15,6 +16,7 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; +import { Button } from '@/components/ui/button'; import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'; import { ScrollableOverlay } from '@/components/ui/ScrollableOverlay'; import { getLanguageFromExtension, isImageFile } from '@/lib/toolHelpers'; @@ -240,21 +242,13 @@ interface FileListProps { changedFiles: FileEntry[]; selectedFile: string | null; onSelectFile: (path: string) => void; - isCompact: boolean; } const FileList = React.memo(({ changedFiles, selectedFile, onSelectFile, - isCompact, }) => { - const getLabel = React.useCallback((path: string) => { - if (!isCompact) return path; - const lastSlash = path.lastIndexOf('/'); - return lastSlash >= 0 ? path.slice(lastSlash + 1) : path; - }, [isCompact]); - if (changedFiles.length === 0) return null; return ( @@ -269,11 +263,12 @@ const FileList = React.memo(({ @@ -701,50 +697,64 @@ const MultiFileDiffEntry = React.memo(({ - -
- - {isExpanded ? ( - - ) : ( - - )} - - - {descriptor.code} - - - {file.path} - -
-
- {formatDiffTotals(file.insertions, file.deletions)} - { - const nextLayout: 'inline' | 'side-by-side' = - mode === 'side-by-side' ? 'side-by-side' : 'inline'; - setDiffFileLayout(file.path, nextLayout); - }} - className="opacity-70" - /> -
-
- -
+
+ +
+
+ + {isExpanded ? ( + + ) : ( + + )} + + + {descriptor.code} + + + {file.path} + +
+
+ {formatDiffTotals(file.insertions, file.deletions)} + { + const nextLayout: 'inline' | 'side-by-side' = + mode === 'side-by-side' ? 'side-by-side' : 'inline'; + setDiffFileLayout(file.path, nextLayout); + }} + className="opacity-70" + /> +
+ +
+ +
{diffLoadError ? (
@@ -1065,7 +1075,7 @@ export const DiffView: React.FC = () => {
{showFileSidebar && (
-
+
Files {changedFiles.length}
@@ -1073,7 +1083,6 @@ export const DiffView: React.FC = () => { changedFiles={changedFiles} selectedFile={selectedFile} onSelectFile={handleSelectFileAndScroll} - isCompact={screenWidth < 1280} />
)} @@ -1082,7 +1091,7 @@ export const DiffView: React.FC = () => { outerClassName="flex-1 min-h-0" className="pr-2" > -
+
{changedFiles.map((file) => ( { )}
{selectedFileEntry && ( - + )} {selectedFileEntry && currentLayoutForSelectedFile && (