@@ -116,10 +116,11 @@ const ToolingTable = ({
116116 < Headline2 > { toTitleCase ( group , '-' ) } </ Headline2 >
117117 </ div >
118118 ) }
119- < div className = 'overflow-x-auto' >
120- < table className = 'min-w-full bg-white dark:bg-slate-800 border border-gray-200' >
119+ < div className = 'overflow-x-hidden' >
120+ { /* Desktop Table */ }
121+ < table className = 'hidden lg:table min-w-full bg-white dark:bg-slate-800 border border-gray-200' >
121122 < thead >
122- < tr className = 'flex w-full min-w-[976px ]' >
123+ < tr className = 'flex w-full min-w-[860px ]' >
123124 < TableSortableColumnHeader
124125 sortBy = 'name'
125126 transform = { transform }
@@ -269,6 +270,65 @@ const ToolingTable = ({
269270 } ) }
270271 </ tbody >
271272 </ table >
273+
274+ { /* Mobile Table */ }
275+ < table className = 'lg:hidden min-w-full bg-white dark:bg-slate-800 border border-gray-200' >
276+ < tbody >
277+ { toolsByGroup [ group ] . map ( ( tool : JSONSchemaTool , index ) => {
278+ const bowtieData = getBowtieData ( tool ) ;
279+ if ( bowtieData ) {
280+ tool . bowtie = bowtieData ;
281+ }
282+ return (
283+ < tr
284+ key = { index }
285+ className = 'border-b border-gray-200 hover:bg-gray-100 dark:hover:bg-slate-700 cursor-pointer'
286+ onClick = { ( ) => openModal ( tool ) }
287+ >
288+ < td className = 'p-2 relative' >
289+ { bowtieData && (
290+ < div className = 'absolute top-0 right-0 m-2 text-sm text-gray-600 dark:text-gray-300 flex items-center' >
291+ < span > Bowtie:</ span >
292+ < a
293+ href = { `https://bowtie.report/#/implementations/${ bowtieData . id } ` }
294+ target = 'blank'
295+ onClick = { ( event ) => event . stopPropagation ( ) }
296+ title = 'See at Bowtie'
297+ className = 'ml-1'
298+ >
299+ < OutLinkIcon className = 'fill-none stroke-current w-5 h-5 stroke-2' />
300+ </ a >
301+ </ div >
302+ ) }
303+
304+ < div className = 'flex justify-between items-center' >
305+ < div className = 'font-medium' >
306+ { tool . name }
307+ { tool . status === 'obsolete' && (
308+ < Tag intent = 'error' > { tool . status } </ Tag >
309+ ) }
310+ </ div >
311+ </ div >
312+ < div className = 'text-sm text-gray-600 dark:text-gray-300 mt-1' >
313+ Languages: { tool . languages ?. join ( ', ' ) }
314+ </ div >
315+ < div className = 'text-sm text-gray-600 dark:text-gray-300 mt-1' >
316+ Supported Dialects:
317+ </ div >
318+ < div className = 'flex flex-wrap gap-1 mt-1' >
319+ { tool . supportedDialects ?. draft ?. map ( ( draft ) => (
320+ < Badge key = { draft } > { draft } </ Badge >
321+ ) ) }
322+ </ div >
323+ < div className = 'text-sm text-gray-600 dark:text-gray-300 mt-1' >
324+ License: { tool . license }
325+ </ div >
326+ </ td >
327+ </ tr >
328+ ) ;
329+ } ) }
330+ </ tbody >
331+ </ table >
272332 </ div >
273333 </ section >
274334 ) ) }
@@ -278,7 +338,6 @@ const ToolingTable = ({
278338 </ >
279339 ) ;
280340} ;
281-
282341const TableColumnHeader = ( {
283342 children,
284343 attributes : propAttributes ,
0 commit comments