@@ -12,19 +12,32 @@ const COMMENTS = {
1212 FOCUS_END : '// codeblock-focus-end' ,
1313} ;
1414
15+ interface PreProps {
16+ children : React . ReactElement < { className ?: string ; children : string } > ;
17+ 'data-name' ?: string ;
18+ 'data-snack' ?: string | 'embed' ;
19+ 'data-dependencies' ?: string ;
20+ 'data-lang' ?: string ;
21+ }
22+
1523export default function Pre ( {
1624 children,
1725 'data-name' : name ,
1826 'data-snack' : snack ,
1927 'data-dependencies' : deps ,
2028 'data-lang' : lang ,
2129 ...rest
22- } ) {
30+ } : PreProps ) {
2331 const [ isExpanded , setIsExpanded ] = React . useState ( false ) ;
2432
2533 const { colorMode } = useColorMode ( ) ;
26- const activeVersion = useActiveVersion ( ) ;
27- const { versions } = usePluginData ( 'react-navigation-versions' ) ;
34+ const activeVersion = useActiveVersion ( undefined ) ;
35+ const { versions } = usePluginData ( 'react-navigation-versions' ) as {
36+ versions : Record <
37+ string ,
38+ Record < string , string | [ string , Record < string , string > ] >
39+ > ;
40+ } ;
2841
2942 const child = React . Children . only ( children ) ;
3043
@@ -39,11 +52,6 @@ export default function Pre({
3952 }
4053
4154 // Replace + and - with magic comments
42- // Need to add following in docusaurus.config.js
43- // themeConfig.prims.magicComments: [
44- // { className: 'code-block-diff-add-line', line: 'diff-add' },
45- // { className: 'code-block-diff-remove-line', line: 'diff-remove' },
46- // ],
4755 const content = code
4856 . split ( '\n' )
4957 . map ( ( line ) => {
@@ -57,15 +65,15 @@ export default function Pre({
5765 } )
5866 . join ( '\n' ) ;
5967
60- children = React . cloneElement ( child , {
68+ const modifiedChildren = React . cloneElement ( child , {
6169 className : `language-${ lang } ` ,
6270 children : content ,
6371 } ) ;
6472
65- return < MDXPre { ...rest } > { children } </ MDXPre > ;
73+ return < MDXPre { ...rest } > { modifiedChildren } </ MDXPre > ;
6674 }
6775
68- const buttons = [ ] ;
76+ const buttons : React . ReactNode [ ] = [ ] ;
6977
7078 if ( child . props . children . includes ?.( COMMENTS . FOCUS_START ) ) {
7179 buttons . push (
@@ -106,7 +114,7 @@ export default function Pre({
106114 const version = activeVersion ?. name ;
107115
108116 // Handle snack demos
109- if ( snack && versions [ version ] != null ) {
117+ if ( snack && version && versions [ version ] != null ) {
110118 const code = child . props . children ;
111119
112120 if ( typeof code !== 'string' ) {
@@ -115,7 +123,7 @@ export default function Pre({
115123 ) ;
116124 }
117125
118- const dependencies = deps
126+ const dependencies : Record < string , string > = deps
119127 ? Object . fromEntries (
120128 deps . split ( ',' ) . map ( ( entry ) => {
121129 let prefix = '' ;
@@ -135,34 +143,37 @@ export default function Pre({
135143
136144 Object . assign (
137145 dependencies ,
138- Object . entries ( versions [ version ] ) . reduce ( ( acc , [ key , value ] ) => {
139- if ( code . includes ( `from '${ key } '` ) ) {
140- if ( Array . isArray ( value ) ) {
141- const [ v , peers ] = value ;
142-
143- Object . assign ( acc , {
144- [ key ] : v ,
145- ...Object . fromEntries (
146- Object . entries ( peers ) . map ( ( [ key , value ] ) => {
147- const meta = versions [ version ] [ key ] ;
148-
149- if ( value === '*' && meta ) {
150- const v = Array . isArray ( meta ) ? meta [ 0 ] : meta ;
151-
152- return [ key , v ] ;
153- }
154-
155- return [ key , value ] ;
156- } )
157- ) ,
158- } ) ;
159- } else {
160- acc [ key ] = value ;
146+ Object . entries ( versions [ version ] ) . reduce (
147+ ( acc , [ key , value ] ) => {
148+ if ( code . includes ( `from '${ key } '` ) ) {
149+ if ( Array . isArray ( value ) ) {
150+ const [ v , peers ] = value ;
151+
152+ Object . assign ( acc , {
153+ [ key ] : v ,
154+ ...Object . fromEntries (
155+ Object . entries ( peers ) . map ( ( [ key , value ] ) => {
156+ const meta = versions [ version ] [ key ] ;
157+
158+ if ( value === '*' && meta ) {
159+ const v = Array . isArray ( meta ) ? meta [ 0 ] : meta ;
160+
161+ return [ key , v ] ;
162+ }
163+
164+ return [ key , value ] ;
165+ } )
166+ ) ,
167+ } ) ;
168+ } else {
169+ acc [ key ] = value ;
170+ }
161171 }
162- }
163172
164- return acc ;
165- } , { } )
173+ return acc ;
174+ } ,
175+ { } as Record < string , string >
176+ )
166177 ) ;
167178
168179 const url = new URL ( 'https://snack.expo.dev' ) ;
@@ -209,7 +220,6 @@ export default function Pre({
209220 style = { {
210221 width : '100%' ,
211222 height : 660 ,
212- border : 'none' ,
213223 border : '1px solid var(--ifm-table-border-color)' ,
214224 borderRadius : 'var(--ifm-global-radius)' ,
215225 overflow : 'hidden' ,
@@ -263,7 +273,16 @@ export default function Pre({
263273 ) ;
264274}
265275
266- function FocusedCodeBlock ( { children, expanded, ...rest } ) {
276+ interface FocusedCodeBlockProps {
277+ children : React . ReactElement < { children : string } > ;
278+ expanded : boolean ;
279+ }
280+
281+ function FocusedCodeBlock ( {
282+ children,
283+ expanded,
284+ ...rest
285+ } : FocusedCodeBlockProps ) {
267286 const child = React . Children . only ( children ) ;
268287 const code = child . props . children ;
269288
@@ -274,7 +293,7 @@ function FocusedCodeBlock({ children, expanded, ...rest }) {
274293 if ( expanded ) {
275294 content = code
276295 . split ( '\n' )
277- . filter ( ( line ) =>
296+ . filter ( ( line : string ) =>
278297 [ COMMENTS . FOCUS_START , COMMENTS . FOCUS_END ] . every (
279298 ( comment ) => line . trim ( ) !== comment
280299 )
@@ -284,7 +303,7 @@ function FocusedCodeBlock({ children, expanded, ...rest }) {
284303 const lines = code . split ( '\n' ) ;
285304
286305 let focus = false ;
287- let indent ;
306+ let indent : string | undefined ;
288307
289308 for ( const line of lines ) {
290309 if ( line . trim ( ) === COMMENTS . FOCUS_START ) {
@@ -293,10 +312,10 @@ function FocusedCodeBlock({ children, expanded, ...rest }) {
293312 focus = false ;
294313 } else if ( focus ) {
295314 if ( indent === undefined ) {
296- indent = line . match ( / ^ \s * / ) [ 0 ] ;
315+ indent = line . match ( / ^ \s * / ) ?. [ 0 ] ;
297316 }
298317
299- if ( line . startsWith ( indent ) ) {
318+ if ( indent && line . startsWith ( indent ) ) {
300319 content += line . slice ( indent . length ) + '\n' ;
301320 } else {
302321 content += line + '\n' ;
@@ -305,9 +324,11 @@ function FocusedCodeBlock({ children, expanded, ...rest }) {
305324 }
306325 }
307326
308- children = React . Children . map ( children , ( c ) =>
327+ const modifiedChildren = React . Children . map ( children , ( c ) =>
309328 React . cloneElement ( c , { children : content } )
310329 ) ;
330+
331+ return < MDXPre { ...rest } > { modifiedChildren } </ MDXPre > ;
311332 }
312333
313334 return < MDXPre { ...rest } > { children } </ MDXPre > ;
0 commit comments