Skip to content

Commit c115ec5

Browse files
committed
Add expand functionality to CodeBlock component
1 parent 03c5e22 commit c115ec5

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

docs/components/layout/Documentation/helpers/CodeBlock.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
import React from 'react';
1+
"use client";
2+
import React, { useState } from 'react';
23
import { refractor } from 'refractor';
34
import js from 'refractor/lang/javascript';
45
import jsx from 'refractor/lang/jsx';
56
import scss from 'refractor/lang/scss'; // Add SCSS import
67
import Copy from '@/components/Copy';
78

89
import Tooltip from '@radui/ui/Tooltip'
10+
import Button from '@radui/ui/Button'
911

1012
refractor.register(js);
1113
refractor.register(jsx);
@@ -29,6 +31,7 @@ const renderElement = (element, index) => {
2931
};
3032

3133
const 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

Comments
 (0)