diff --git a/app/components/workbench/DiffView.tsx b/app/components/workbench/DiffView.tsx
index 447eac83..e1cb843d 100644
--- a/app/components/workbench/DiffView.tsx
+++ b/app/components/workbench/DiffView.tsx
@@ -10,6 +10,7 @@ import { diffFiles, extractRelativePath } from '~/utils/diff';
import { ActionRunner } from '~/lib/runtime/action-runner';
import type { FileHistory } from '~/types/actions';
import { getLanguageFromExtension } from '~/utils/getLanguageFromExtension';
+import { themeStore } from '~/lib/stores/theme';
interface CodeComparisonProps {
beforeCode: string;
@@ -302,12 +303,20 @@ const processChanges = (beforeCode: string, afterCode: string) => {
const lineNumberStyles = "w-9 shrink-0 pl-2 py-1 text-left font-mono text-bolt-elements-textTertiary border-r border-bolt-elements-borderColor bg-bolt-elements-background-depth-1";
const lineContentStyles = "px-1 py-1 font-mono whitespace-pre flex-1 group-hover:bg-bolt-elements-background-depth-2 text-bolt-elements-textPrimary";
const diffPanelStyles = "h-full overflow-auto diff-panel-content";
+
+// Updated color styles for better consistency
const diffLineStyles = {
- added: 'bg-green-500/20 border-l-4 border-green-500',
- removed: 'bg-red-500/20 border-l-4 border-red-500',
+ added: 'bg-green-500/10 dark:bg-green-500/20 border-l-4 border-green-500',
+ removed: 'bg-red-500/10 dark:bg-red-500/20 border-l-4 border-red-500',
unchanged: ''
};
+const changeColorStyles = {
+ added: 'text-green-700 dark:text-green-500 bg-green-500/10 dark:bg-green-500/20',
+ removed: 'text-red-700 dark:text-red-500 bg-red-500/10 dark:bg-red-500/20',
+ unchanged: 'text-bolt-elements-textPrimary'
+};
+
const renderContentWarning = (type: 'binary' | 'error') => (
@@ -324,10 +333,11 @@ const renderContentWarning = (type: 'binary' | 'error') => (
);
-const NoChangesView = memo(({ beforeCode, language, highlighter }: {
+const NoChangesView = memo(({ beforeCode, language, highlighter, theme }: {
beforeCode: string;
language: string;
highlighter: any;
+ theme: string;
}) => (
@@ -347,7 +357,7 @@ const NoChangesView = memo(({ beforeCode, language, highlighter }: {
]*>/g, '')
.replace(/<\/?code[^>]*>/g, '')
: line
@@ -372,7 +382,8 @@ const CodeLine = memo(({
type,
highlighter,
language,
- block
+ block,
+ theme
}: {
lineNumber: number;
content: string;
@@ -380,17 +391,14 @@ const CodeLine = memo(({
highlighter: any;
language: string;
block: DiffBlock;
+ theme: string;
}) => {
- const bgColor = {
- added: 'bg-green-500/20 border-l-4 border-green-500',
- removed: 'bg-red-500/20 border-l-4 border-red-500',
- unchanged: ''
- }[type];
+ const bgColor = diffLineStyles[type];
const renderContent = () => {
if (type === 'unchanged' || !block.charChanges) {
const highlightedCode = highlighter ?
- highlighter.codeToHtml(content, { lang: language, theme: 'github-dark' })
+ highlighter.codeToHtml(content, { lang: language, theme: theme === 'dark' ? 'github-dark' : 'github-light' })
.replace(/<\/?pre[^>]*>/g, '')
.replace(/<\/?code[^>]*>/g, '')
: content;
@@ -400,14 +408,10 @@ const CodeLine = memo(({
return (
<>
{block.charChanges.map((change, index) => {
- const changeClass = {
- added: 'text-green-500 bg-green-500/20',
- removed: 'text-red-500 bg-red-500/20',
- unchanged: ''
- }[change.type];
+ const changeClass = changeColorStyles[change.type];
const highlightedCode = highlighter ?
- highlighter.codeToHtml(change.value, { lang: language, theme: 'github-dark' })
+ highlighter.codeToHtml(change.value, { lang: language, theme: theme === 'dark' ? 'github-dark' : 'github-light' })
.replace(/<\/?pre[^>]*>/g, '')
.replace(/<\/?code[^>]*>/g, '')
: change.value;
@@ -429,8 +433,8 @@ const CodeLine = memo(({
{lineNumber + 1}
- {type === 'added' && '+'}
- {type === 'removed' && '-'}
+ {type === 'added' && +}
+ {type === 'removed' && -}
{type === 'unchanged' && ' '}
{renderContent()}
@@ -488,20 +492,20 @@ const FileInfo = memo(({
{showStats && (
{additions > 0 && (
- +{additions}
+ +{additions}
)}
{deletions > 0 && (
- -{deletions}
+ -{deletions}
)}
)}
-
Modified
+
Modified
{new Date().toLocaleTimeString()}
>
) : (
-
No Changes
+
No Changes
)}
@@ -512,6 +516,7 @@ const FileInfo = memo(({
const InlineDiffComparison = memo(({ beforeCode, afterCode, filename, language, lightTheme, darkTheme }: CodeComparisonProps) => {
const [isFullscreen, setIsFullscreen] = useState(false);
const [highlighter, setHighlighter] = useState
(null);
+ const theme = useStore(themeStore);
const toggleFullscreen = useCallback(() => {
setIsFullscreen(prev => !prev);
@@ -521,7 +526,7 @@ const InlineDiffComparison = memo(({ beforeCode, afterCode, filename, language,
useEffect(() => {
getHighlighter({
- themes: ['github-dark'],
+ themes: ['github-dark', 'github-light'],
langs: ['typescript', 'javascript', 'json', 'html', 'css', 'jsx', 'tsx']
}).then(setHighlighter);
}, []);
@@ -551,6 +556,7 @@ const InlineDiffComparison = memo(({ beforeCode, afterCode, filename, language,
highlighter={highlighter}
language={language}
block={block}
+ theme={theme}
/>
))}
@@ -559,6 +565,7 @@ const InlineDiffComparison = memo(({ beforeCode, afterCode, filename, language,
beforeCode={beforeCode}
language={language}
highlighter={highlighter}
+ theme={theme}
/>
)}