refactor: Enhance Diff View with advanced line and character-level change detection

- Improved diff algorithm to detect more granular line and character-level changes
- Added support for character-level highlighting in diff view
- Simplified diff view mode by removing side-by-side option
- Updated component rendering to support more detailed change visualization
- Optimized line change detection with improved matching strategy
This commit is contained in:
Toddyclipsgg
2025-02-23 19:34:27 -03:00
parent b3ec53fa42
commit 36872ee6a0
4 changed files with 1199 additions and 507 deletions

View File

@@ -74,13 +74,9 @@ const workbenchVariants = {
const FileModifiedDropdown = memo(({
fileHistory,
onSelectFile,
diffViewMode,
toggleDiffViewMode,
}: {
fileHistory: Record<string, FileHistory>,
onSelectFile: (filePath: string) => void,
diffViewMode: 'inline' | 'side',
toggleDiffViewMode: () => void,
}) => {
const modifiedFiles = Object.entries(fileHistory);
const hasChanges = modifiedFiles.length > 0;
@@ -251,12 +247,6 @@ const FileModifiedDropdown = memo(({
</>
)}
</Popover>
<button
onClick={(e) => { e.stopPropagation(); toggleDiffViewMode(); }}
className="flex items-center gap-2 px-3 py-1.5 text-sm rounded-lg bg-bolt-elements-background-depth-2 hover:bg-bolt-elements-background-depth-3 transition-colors text-bolt-elements-textPrimary border border-bolt-elements-borderColor"
>
<span className="font-medium">{diffViewMode === 'inline' ? 'Inline' : 'Side by Side'}</span>
</button>
</div>
);
});
@@ -272,7 +262,6 @@ export const Workbench = memo(({
const [isSyncing, setIsSyncing] = useState(false);
const [isPushDialogOpen, setIsPushDialogOpen] = useState(false);
const [diffViewMode, setDiffViewMode] = useState<'inline' | 'side'>('inline');
const [fileHistory, setFileHistory] = useState<Record<string, FileHistory>>({});
const modifiedFiles = Array.from(useStore(workbenchStore.unsavedFiles).keys());
@@ -343,10 +332,6 @@ export const Workbench = memo(({
workbenchStore.currentView.set('diff');
}, []);
const toggleDiffViewMode = useCallback(() => {
setDiffViewMode(prev => prev === 'inline' ? 'side' : 'inline');
}, []);
return (
chatStarted && (
<motion.div
@@ -405,8 +390,6 @@ export const Workbench = memo(({
<FileModifiedDropdown
fileHistory={fileHistory}
onSelectFile={handleSelectFile}
diffViewMode={diffViewMode}
toggleDiffViewMode={toggleDiffViewMode}
/>
)}
<IconButton
@@ -444,7 +427,6 @@ export const Workbench = memo(({
<DiffView
fileHistory={fileHistory}
setFileHistory={setFileHistory}
diffViewMode={diffViewMode}
actionRunner={actionRunner}
/>
</View>