1- import React from 'react' ;
1+ "use client" ;
2+ import React , { useState } from 'react' ;
23import { refractor } from 'refractor' ;
34import js from 'refractor/lang/javascript' ;
45import jsx from 'refractor/lang/jsx' ;
56import scss from 'refractor/lang/scss' ; // Add SCSS import
67import Copy from '@/components/Copy' ;
78
89import Tooltip from '@radui/ui/Tooltip'
10+ import Button from '@radui/ui/Button'
911
1012refractor . register ( js ) ;
1113refractor . register ( jsx ) ;
@@ -29,6 +31,7 @@ const renderElement = (element, index) => {
2931} ;
3032
3133const CodeBlock = ( { children, language = 'jsx' } ) => {
34+ const [ expanded , setExpanded ] = useState ( false ) ;
3235 let code = refractor . highlight ( children , language ) ;
3336 code = code . children . map ( ( child , index ) => renderElement ( child , index ) ) ;
3437
@@ -39,7 +42,23 @@ const CodeBlock = ({ children, language = 'jsx' }) => {
3942
4043 return (
4144 < pre className = "relative mb-8" >
42- < code className = { `language-${ language } whitespace-pre-wrap` } style = { { wordBreak : 'break-word' } } > { code } </ code >
45+ < div className = "relative " >
46+ < code className = { `language-${ language } whitespace-pre-wrap` } style = { { wordBreak : 'break-word' } }
47+ style = { {
48+ height : expanded ? 'auto' : 180 ,
49+ maxHeight : 640 ,
50+ overflowY : expanded ? 'scroll' : 'hidden' ,
51+
52+ } }
53+ > { code } </ code >
54+ { ! expanded && < div className = "code-block-blur" > </ div > }
55+ < div className = "flex justify-center w-full bg-gradient-to-t from-background to-transparent bg-gray-100 px-4 py-2" >
56+
57+ < Button size = "small" onClick = { ( ) => setExpanded ( ! expanded ) } >
58+ Show { expanded ? 'less' : 'more' }
59+ </ Button >
60+ </ div >
61+ </ div >
4362 < span className = "absolute top-2 right-2" >
4463 < Tooltip label = "Copy" placement = "bottom" >
4564 < Copy content = { copyContent } />
0 commit comments