11/* eslint-disable @typescript-eslint/no-var-requires */
2- import { useEffect , useState , useCallback } from 'react' ;
32import classNames from 'classnames' ;
4- import { transform as transformCode , Options } from 'sucrase' ;
53import CodeEditor from './CodeEditor' ;
64import Preview from './Preview' ;
75import canUseDOM from './utils/canUseDOM' ;
86import evalCode from './utils/evalCode' ;
97import CodeIcon from './icons/Code' ;
8+ import { useEffect , useState , useCallback } from 'react' ;
9+ import { transform as transformCode , Options } from 'sucrase' ;
1010
1111const React = require ( 'react' ) ;
1212const ReactDOM = require ( 'react-dom' ) ;
@@ -22,7 +22,7 @@ export interface RendererProps extends Omit<React.HTMLAttributes<HTMLElement>, '
2222 copyCodeButtonAs ?: React . ElementType ;
2323
2424 /** Dependent objects required by the executed code */
25- dependencies ?: object ;
25+ dependencies ?: Record < string , unknown > ;
2626
2727 /** Renders a code editor that can modify the source code */
2828 editable ?: boolean ;
@@ -47,18 +47,18 @@ export interface RendererProps extends Omit<React.HTMLAttributes<HTMLElement>, '
4747 transformOptions ?: Options ;
4848
4949 /** 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 ;
5154
5255 /** Customize the rendering footer */
5356 renderExtraFooter ?: ( ) => React . ReactNode ;
5457
55- /**
56- * Callback triggered when the editor is opened
57- */
58+ /** Callback triggered when the editor is opened */
5859 onOpenEditor ?: ( ) => void ;
59- /**
60- * Callback triggered when the editor is closed
61- */
60+
61+ /** Callback triggered when the editor is closed */
6262 onCloseEditor ?: ( ) => void ;
6363
6464 /** Callback triggered after code change */
@@ -168,14 +168,16 @@ const Renderer = React.forwardRef((props: RendererProps, ref: React.Ref<HTMLDivE
168168 [ executeCode , onChange ]
169169 ) ;
170170
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 } >
179181 { typeof codeIcon !== 'undefined' ? (
180182 codeIcon
181183 ) : (
@@ -192,7 +194,9 @@ const Renderer = React.forwardRef((props: RendererProps, ref: React.Ref<HTMLDivE
192194 < Preview hasError = { hasError } errorMessage = { errorMessage } onError = { handleError } >
193195 { compiledReactNode }
194196 </ Preview >
195- < div className = "rcv-toolbar" > { renderToolbar ? renderToolbar ( codeButton ) : codeButton } </ div >
197+ < div className = "rcv-toolbar" >
198+ { renderToolbar ? renderToolbar ( showCodeButton , showCodeButtonProps ) : showCodeButton }
199+ </ div >
196200 { showCodeEditor && (
197201 < CodeEditor
198202 { ...editorProps }
0 commit comments