1
1
/* eslint-disable @typescript-eslint/no-var-requires */
2
- import { useEffect , useState , useCallback } from 'react' ;
3
2
import classNames from 'classnames' ;
4
- import { transform as transformCode , Options } from 'sucrase' ;
5
3
import CodeEditor from './CodeEditor' ;
6
4
import Preview from './Preview' ;
7
5
import canUseDOM from './utils/canUseDOM' ;
8
6
import evalCode from './utils/evalCode' ;
9
7
import CodeIcon from './icons/Code' ;
8
+ import { useEffect , useState , useCallback } from 'react' ;
9
+ import { transform as transformCode , Options } from 'sucrase' ;
10
10
11
11
const React = require ( 'react' ) ;
12
12
const ReactDOM = require ( 'react-dom' ) ;
@@ -22,7 +22,7 @@ export interface RendererProps extends Omit<React.HTMLAttributes<HTMLElement>, '
22
22
copyCodeButtonAs ?: React . ElementType ;
23
23
24
24
/** Dependent objects required by the executed code */
25
- dependencies ?: object ;
25
+ dependencies ?: Record < string , unknown > ;
26
26
27
27
/** Renders a code editor that can modify the source code */
28
28
editable ?: boolean ;
@@ -47,18 +47,18 @@ export interface RendererProps extends Omit<React.HTMLAttributes<HTMLElement>, '
47
47
transformOptions ?: Options ;
48
48
49
49
/** Customize the rendering toolbar */
50
- renderToolbar ?: ( buttons : React . ReactNode ) => React . ReactNode ;
50
+ renderToolbar ?: (
51
+ buttons : React . ReactNode ,
52
+ showCodeButtonProps : React . HTMLAttributes < HTMLButtonElement >
53
+ ) => React . ReactNode ;
51
54
52
55
/** Customize the rendering footer */
53
56
renderExtraFooter ?: ( ) => React . ReactNode ;
54
57
55
- /**
56
- * Callback triggered when the editor is opened
57
- */
58
+ /** Callback triggered when the editor is opened */
58
59
onOpenEditor ?: ( ) => void ;
59
- /**
60
- * Callback triggered when the editor is closed
61
- */
60
+
61
+ /** Callback triggered when the editor is closed */
62
62
onCloseEditor ?: ( ) => void ;
63
63
64
64
/** Callback triggered after code change */
@@ -168,14 +168,16 @@ const Renderer = React.forwardRef((props: RendererProps, ref: React.Ref<HTMLDivE
168
168
[ executeCode , onChange ]
169
169
) ;
170
170
171
- const codeButton = (
172
- < button
173
- role = "switch"
174
- aria-checked = { editable }
175
- aria-label = "Show the full source"
176
- className = { classNames ( prefix ( 'btn' ) , prefix ( 'btn-xs' ) , buttonClassName ) }
177
- onClick = { handleExpandEditor }
178
- >
171
+ const showCodeButtonProps = {
172
+ role : 'switch' ,
173
+ 'aria-checked' : editable ,
174
+ 'aria-label' : 'Show the full source' ,
175
+ className : buttonClassName ,
176
+ onClick : handleExpandEditor
177
+ } ;
178
+
179
+ const showCodeButton = (
180
+ < button { ...showCodeButtonProps } >
179
181
{ typeof codeIcon !== 'undefined' ? (
180
182
codeIcon
181
183
) : (
@@ -192,7 +194,9 @@ const Renderer = React.forwardRef((props: RendererProps, ref: React.Ref<HTMLDivE
192
194
< Preview hasError = { hasError } errorMessage = { errorMessage } onError = { handleError } >
193
195
{ compiledReactNode }
194
196
</ Preview >
195
- < div className = "rcv-toolbar" > { renderToolbar ? renderToolbar ( codeButton ) : codeButton } </ div >
197
+ < div className = "rcv-toolbar" >
198
+ { renderToolbar ? renderToolbar ( showCodeButton , showCodeButtonProps ) : showCodeButton }
199
+ </ div >
196
200
{ showCodeEditor && (
197
201
< CodeEditor
198
202
{ ...editorProps }
0 commit comments