@@ -2,6 +2,7 @@ import { Meta, StoryObj } from '@storybook/react-vite';
22import  {  TrackCanvas ,  TrackDriver  }  from  './TrackCanvas' ; 
33import  {  useEffect ,  useState  }  from  'react' ; 
44import  tracks  from  './tracks/tracks.json' ; 
5+ import  {  BROKEN_TRACKS  }  from  './tracks/broken-tracks' ; 
56
67export  default  { 
78  component : TrackCanvas , 
@@ -284,6 +285,48 @@ export const Primary: Story = {
284285  } , 
285286} ; 
286287
288+ export  const  SingleDriver : Story  =  { 
289+   argTypes : { 
290+     progress : { 
291+       control : {  type : 'range' ,  min : 0 ,  max : 1 ,  step : 0.01  } , 
292+       description : 'Driver progress around the track (0-1)' , 
293+     } , 
294+     carNumber : { 
295+       control : {  type : 'text'  } , 
296+       description : 'Driver car number' , 
297+     } , 
298+     isPlayer : { 
299+       control : {  type : 'boolean'  } , 
300+     } , 
301+     carClassColor : { 
302+       control : {  type : 'number'  } , 
303+       description : 'Driver car class color' , 
304+     } , 
305+   } , 
306+   // eslint-disable-next-line @typescript-eslint/no-explicit-any 
307+   render : ( args : any )  =>  { 
308+     const  drivers  =  [ { 
309+       driver : { 
310+         CarIdx : 39 , 
311+         CarNumber : args . carNumber  ||  '29' , 
312+         CarClassColor : args . carClassColor  ||  11430911 , 
313+         CarClassEstLapTime : 126.2284 , 
314+       } , 
315+       progress : args . progress  ||  0 , 
316+       isPlayer : args . isPlayer  ||  false , 
317+     } ]  as  TrackDriver [ ] ; 
318+ 
319+     return  < TrackCanvas  trackId = { args . trackId }  drivers = { drivers }  /> ; 
320+   } , 
321+   args : { 
322+     trackId : 1 , 
323+     progress : 0 , 
324+     carNumber : '29' , 
325+     isPlayer : true , 
326+     carClassColor : 11430911 , 
327+   } , 
328+ }  as  Story ; 
329+ 
287330export  const  CirclingAround : Story  =  { 
288331  render : ( args )  =>  { 
289332    const  [ drivers ,  setDrivers ]  =  useState ( args . drivers ) ; 
@@ -353,3 +396,43 @@ export const AllTracksGrid: Story = {
353396    ) ; 
354397  } , 
355398} ; 
399+ 
400+ export  const  BrokenTracksGrid : Story  =  { 
401+   render : ( )  =>  { 
402+     const  trackSize  =  200 ; 
403+ 
404+     return  ( 
405+       < div  className = "p-4 bg-gray-900 min-h-screen font-sans" > 
406+         < h1  className = "text-white text-center mb-6 text-2xl" > 
407+           Broken Tracks ({ BROKEN_TRACKS . length }  total)
408+         </ h1 > 
409+         < p  className = "text-gray-400 text-center mb-6" > 
410+           These tracks are broken and will be hidden in production but available for debugging in development/storybook.
411+         </ p > 
412+         < div  
413+           className = "grid gap-4 justify-center mx-auto" 
414+           style = { { 
415+             gridTemplateColumns : 'repeat(auto-fit, minmax(200px, 1fr))' , 
416+             maxWidth : '100%' , 
417+             width : '100%' 
418+           } } 
419+         > 
420+           { BROKEN_TRACKS . map ( ( brokenTrack )  =>  ( 
421+             < div  
422+               key = { brokenTrack . id }  
423+               className = "border border-red-600 rounded-lg overflow-hidden bg-gray-800 relative aspect-square" 
424+               style = { {  maxWidth : trackSize ,  maxHeight : trackSize  } } 
425+             > 
426+               < div  className = "w-full h-full" > 
427+                 < TrackCanvas  
428+                   trackId = { brokenTrack . id }  
429+                   drivers = { sampleData }  
430+                 /> 
431+               </ div > 
432+             </ div > 
433+           ) ) } 
434+         </ div > 
435+       </ div > 
436+     ) ; 
437+   } , 
438+ } ; 
0 commit comments