Files
claudia/src/lib/claudeSyntaxTheme.ts
Mufeed VH efdeff7a31 fix(build): resolve TypeScript errors and add missing dependencies
- Add missing zustand dependency to package.json
- Fix unused variable errors in ToolWidgets.tsx
- Remove invalid 'white' theme comparison in claudeSyntaxTheme.ts
- Add proper TypeScript types to stores using StateCreator pattern
- Add null checks and type casting in Settings.tsx filter operations
- Add onChange handler to Switch component to suppress React warning
- Add 'check' script for TypeScript validation

These changes ensure the TypeScript build passes without errors.
2025-07-28 15:28:07 +05:30

258 lines
5.8 KiB
TypeScript

import { ThemeMode } from '@/contexts/ThemeContext';
/**
* Claude-themed syntax highlighting theme factory
* Returns different syntax themes based on the current theme mode
*
* @param theme - The current theme mode
* @returns Prism syntax highlighting theme object
*/
export const getClaudeSyntaxTheme = (theme: ThemeMode): any => {
const themes = {
dark: {
base: '#e3e8f0',
background: 'transparent',
comment: '#6b7280',
punctuation: '#9ca3af',
property: '#f59e0b', // Amber/Orange
tag: '#8b5cf6', // Violet
string: '#10b981', // Emerald Green
function: '#818cf8', // Indigo
keyword: '#c084fc', // Light Violet
variable: '#a78bfa', // Light Purple
operator: '#9ca3af',
},
gray: {
base: '#e3e8f0',
background: 'transparent',
comment: '#71717a',
punctuation: '#a1a1aa',
property: '#fbbf24', // Yellow
tag: '#a78bfa', // Light Purple
string: '#34d399', // Green
function: '#93bbfc', // Light Blue
keyword: '#d8b4fe', // Light Purple
variable: '#c084fc', // Purple
operator: '#a1a1aa',
},
light: {
base: '#1f2937',
background: 'transparent',
comment: '#9ca3af',
punctuation: '#6b7280',
property: '#dc2626', // Red
tag: '#7c3aed', // Purple
string: '#059669', // Green
function: '#2563eb', // Blue
keyword: '#9333ea', // Purple
variable: '#8b5cf6', // Violet
operator: '#6b7280',
},
white: {
base: '#000000',
background: 'transparent',
comment: '#6b7280',
punctuation: '#374151',
property: '#dc2626', // Red
tag: '#5b21b6', // Deep Purple
string: '#047857', // Dark Green
function: '#1e40af', // Dark Blue
keyword: '#6b21a8', // Dark Purple
variable: '#6d28d9', // Dark Violet
operator: '#374151',
},
custom: {
// Default to dark theme colors for custom
base: '#e3e8f0',
background: 'transparent',
comment: '#6b7280',
punctuation: '#9ca3af',
property: '#f59e0b',
tag: '#8b5cf6',
string: '#10b981',
function: '#818cf8',
keyword: '#c084fc',
variable: '#a78bfa',
operator: '#9ca3af',
}
};
const colors = themes[theme] || themes.dark;
return {
'code[class*="language-"]': {
color: colors.base,
background: colors.background,
textShadow: 'none',
fontFamily: 'var(--font-mono)',
fontSize: '0.875em',
textAlign: 'left',
whiteSpace: 'pre',
wordSpacing: 'normal',
wordBreak: 'normal',
wordWrap: 'normal',
lineHeight: '1.5',
MozTabSize: '4',
OTabSize: '4',
tabSize: '4',
WebkitHyphens: 'none',
MozHyphens: 'none',
msHyphens: 'none',
hyphens: 'none',
},
'pre[class*="language-"]': {
color: colors.base,
background: colors.background,
textShadow: 'none',
fontFamily: 'var(--font-mono)',
fontSize: '0.875em',
textAlign: 'left',
whiteSpace: 'pre',
wordSpacing: 'normal',
wordBreak: 'normal',
wordWrap: 'normal',
lineHeight: '1.5',
MozTabSize: '4',
OTabSize: '4',
tabSize: '4',
WebkitHyphens: 'none',
MozHyphens: 'none',
msHyphens: 'none',
hyphens: 'none',
padding: '1em',
margin: '0',
overflow: 'auto',
},
':not(pre) > code[class*="language-"]': {
background: theme === 'light'
? 'rgba(139, 92, 246, 0.1)'
: 'rgba(139, 92, 246, 0.1)',
padding: '0.1em 0.3em',
borderRadius: '0.3em',
whiteSpace: 'normal',
},
'comment': {
color: colors.comment,
fontStyle: 'italic',
},
'prolog': {
color: colors.comment,
},
'doctype': {
color: colors.comment,
},
'cdata': {
color: colors.comment,
},
'punctuation': {
color: colors.punctuation,
},
'namespace': {
opacity: '0.7',
},
'property': {
color: colors.property,
},
'tag': {
color: colors.tag,
},
'boolean': {
color: colors.property,
},
'number': {
color: colors.property,
},
'constant': {
color: colors.property,
},
'symbol': {
color: colors.property,
},
'deleted': {
color: '#ef4444',
},
'selector': {
color: colors.variable,
},
'attr-name': {
color: colors.variable,
},
'string': {
color: colors.string,
},
'char': {
color: colors.string,
},
'builtin': {
color: colors.tag,
},
'url': {
color: colors.string,
},
'inserted': {
color: colors.string,
},
'entity': {
color: colors.variable,
cursor: 'help',
},
'atrule': {
color: colors.keyword,
},
'attr-value': {
color: colors.string,
},
'keyword': {
color: colors.keyword,
},
'function': {
color: colors.function,
},
'class-name': {
color: colors.property,
},
'regex': {
color: '#06b6d4', // Cyan
},
'important': {
color: colors.property,
fontWeight: 'bold',
},
'variable': {
color: colors.variable,
},
'bold': {
fontWeight: 'bold',
},
'italic': {
fontStyle: 'italic',
},
'operator': {
color: colors.operator,
},
'script': {
color: colors.base,
},
'parameter': {
color: colors.property,
},
'method': {
color: colors.function,
},
'field': {
color: colors.property,
},
'annotation': {
color: colors.comment,
},
'type': {
color: colors.variable,
},
'module': {
color: colors.tag,
},
};
};
// Export default dark theme for backward compatibility
export const claudeSyntaxTheme = getClaudeSyntaxTheme('dark');