1- import { useEffect , useState } from 'react'
2- import { CodeEditor } from './code-editor'
3- import { Button } from './ui/button'
4- import { useToast } from './ui/use-toast'
5-
6- export function CodeView ( {
7- code : initialCode ,
8- lang,
9- onSave,
10- } : {
11- code : string
12- lang : string
13- onSave : ( content : string ) => void
14- } ) {
15- const [ code , setCode ] = useState ( initialCode )
16- const [ hasUnsavedChanges , setHasUnsavedChanges ] = useState ( false )
17- const { toast } = useToast ( )
1+ // import "prismjs/plugins/line-numbers/prism-line-numbers.js";
2+ // import "prismjs/plugins/line-numbers/prism-line-numbers.css";
3+ import './code-theme.css'
4+ import Prism from 'prismjs'
5+ import 'prismjs/components/prism-javascript'
6+ import 'prismjs/components/prism-jsx'
7+ import 'prismjs/components/prism-python'
8+ import 'prismjs/components/prism-tsx'
9+ import 'prismjs/components/prism-typescript'
10+ import { useEffect } from 'react'
1811
12+ export function CodeView ( { code, lang } : { code : string ; lang : string } ) {
1913 useEffect ( ( ) => {
20- setCode ( initialCode )
21- setHasUnsavedChanges ( false )
22- } , [ initialCode ] )
23-
24- function handleCodeChange ( newCode : string | undefined ) {
25- setCode ( newCode || '' )
26- setHasUnsavedChanges ( ( newCode || '' ) !== initialCode )
27- }
28-
29- function handleSave ( ) {
30- onSave ( code )
31- setHasUnsavedChanges ( false )
32- toast ( {
33- title : 'File saved' ,
34- description : 'Your changes have been saved successfully.' ,
35- } )
36- }
14+ Prism . highlightAll ( )
15+ } , [ code ] )
3716
3817 return (
39- < div className = "h-full flex flex-col" >
40- < div className = "flex-1 min-h-0" >
41- < CodeEditor
42- code = { code }
43- lang = { lang }
44- onChange = { handleCodeChange }
45- />
46- </ div >
47- < div className = "p-3 border-t bg-muted/20 flex items-center justify-between" >
48- < div className = "flex items-center gap-4 text-sm text-muted-foreground" >
49- < span > Lines: { code . split ( '\n' ) . length } </ span >
50- < span > Characters: { code . length } </ span >
51- < span > Language: { lang || 'text' } </ span >
52- </ div >
53- < div className = "flex items-center gap-2" >
54- { hasUnsavedChanges && (
55- < span className = "text-xs text-orange-500" > Unsaved changes</ span >
56- ) }
57- < Button
58- onClick = { handleSave }
59- size = "sm"
60- variant = { hasUnsavedChanges ? 'default' : 'outline' }
61- >
62- Save { hasUnsavedChanges && '*' }
63- </ Button >
64- </ div >
65- </ div >
66- </ div >
18+ < pre
19+ className = "p-4 pt-2"
20+ style = { {
21+ fontSize : 12 ,
22+ backgroundColor : 'transparent' ,
23+ borderRadius : 0 ,
24+ margin : 0 ,
25+ } }
26+ >
27+ < code className = { `language-${ lang } ` } > { code } </ code >
28+ </ pre >
6729 )
68- }
30+ }
0 commit comments