11import React from 'react' ;
22import ReactDOM from 'react-dom/client' ;
33import ReactDiffViewer from 'react-diff-viewer' ;
4- import ReactDiffViewerContinued from 'react-diff-viewer-continued' ;
54import { Diff , Hunk , parseDiff } from 'react-diff-view' ;
65import 'react-diff-view/style/index.css' ;
76import { DiffViewer } from 'react-virtualized-diff' ;
@@ -23,13 +22,24 @@ type BenchmarkResult = {
2322 userAgent : string ;
2423} ;
2524
25+ type DiffViewerLikeProps = {
26+ oldValue : string ;
27+ newValue : string ;
28+ splitView : boolean ;
29+ showDiffOnly : boolean ;
30+ } ;
31+
32+ type DiffViewerLikeComponent = React . ComponentType < DiffViewerLikeProps > ;
33+
2634declare global {
2735 interface Window {
2836 __BENCHMARK_DONE__ ?: boolean ;
2937 __BENCHMARK_RESULT__ ?: BenchmarkResult ;
3038 }
3139}
3240
41+ const CONTINUED_PKG = 'react-diff-viewer-continued' ;
42+
3343const defaultParams : BenchmarkParams = {
3444 lib : 'virtualized-diff-viewer' ,
3545 lines : 1000 ,
@@ -97,6 +107,27 @@ function App() {
97107 const params = React . useMemo ( parseParams , [ ] ) ;
98108 const containerRef = React . useRef < HTMLDivElement > ( null ) ;
99109 const [ payload ] = React . useState ( ( ) => generateTexts ( params . lines ) ) ;
110+ const [ continuedViewer , setContinuedViewer ] = React . useState < DiffViewerLikeComponent > ( ( ) => ReactDiffViewer ) ;
111+
112+ React . useEffect ( ( ) => {
113+ let mounted = true ;
114+
115+ import ( /* @vite -ignore */ CONTINUED_PKG )
116+ . then ( ( mod : unknown ) => {
117+ if ( ! mounted ) return ;
118+ const loaded = ( ( mod as { default ?: DiffViewerLikeComponent } ) . default ?? mod ) as DiffViewerLikeComponent ;
119+ if ( loaded ) {
120+ setContinuedViewer ( ( ) => loaded ) ;
121+ }
122+ } )
123+ . catch ( ( ) => {
124+ console . warn ( `[benchmark] Optional dependency not found: ${ CONTINUED_PKG } . Falling back to react-diff-viewer.` ) ;
125+ } ) ;
126+
127+ return ( ) => {
128+ mounted = false ;
129+ } ;
130+ } , [ ] ) ;
100131
101132 React . useEffect ( ( ) => {
102133 const markDone = async ( ) => {
@@ -158,8 +189,9 @@ function App() {
158189 />
159190 ) ;
160191 } else if ( params . lib === 'react-diff-viewer-continued' ) {
192+ const ContinuedViewer = continuedViewer ;
161193 viewer = (
162- < ReactDiffViewerContinued
194+ < ContinuedViewer
163195 oldValue = { payload . oldText }
164196 newValue = { payload . newText }
165197 splitView
0 commit comments