@@ -4,15 +4,13 @@ import Link from 'next/link';
44import Image from 'next/image' ;
55import { useState } from 'react' ;
66import { CopyBlock } from '@/app/components/copy-block' ;
7+ import ComponentGallery from '@/app/components/component-gallery' ;
78
89export default function HomePage ( ) {
910 const [ diagramMode , setDiagramMode ] = useState < 'Production' | 'Development' > ( 'Production' ) ;
1011
1112 return (
1213 < main className = "flex flex-col min-h-[calc(100vh-4rem)]" >
13-
14-
15-
1614 { /* Hero Section - Dark Theme */ }
1715 < section className = "relative w-full bg-slate-950 border-b border-white/10 overflow-hidden" >
1816
@@ -322,16 +320,176 @@ export default function HomePage() {
322320 />
323321 </ div >
324322
323+ </ div >
324+ </ div >
325+
326+ { /* React Component Gallery Divider - Full Width Dark Section */ }
327+ < section className = "relative w-full bg-slate-950 border-y border-white/10 overflow-hidden" >
328+ { /* Background Effects */ }
329+ < div className = "absolute inset-0 opacity-20 pointer-events-none" >
330+ < svg className = "h-full w-full" aria-hidden = "true" >
331+ < defs >
332+ < pattern id = "featured-grid" width = "40" height = "40" patternUnits = "userSpaceOnUse" >
333+ < path d = "M0 40L40 0H20L0 20M40 40V20L20 40" stroke = "#0ea5e9" strokeWidth = "1" fill = "none" opacity = "0.1" />
334+ </ pattern >
335+ </ defs >
336+ < rect width = "100%" height = "100%" fill = "url(#featured-grid)" />
337+ </ svg >
338+ </ div >
339+
340+ < div className = "absolute top-0 left-1/4 h-64 w-64 rounded-full bg-blue-600/20 blur-[80px] pointer-events-none" > </ div >
341+ < div className = "absolute bottom-0 right-1/4 h-64 w-64 rounded-full bg-cyan-500/10 blur-[80px] pointer-events-none" > </ div >
342+
343+ < div className = "relative z-10 max-w-4xl mx-auto px-4 py-16 text-center" >
344+ < div className = "inline-flex items-center gap-2 px-4 py-1.5 rounded-full border border-cyan-500/30 bg-cyan-500/10 text-sm font-medium text-cyan-300 mb-6" >
345+ < svg className = "w-4 h-4" fill = "none" viewBox = "0 0 24 24" stroke = "currentColor" >
346+ < path strokeLinecap = "round" strokeLinejoin = "round" strokeWidth = "2" d = "M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z" />
347+ </ svg >
348+ @servicestack/react
349+ </ div >
350+
351+ < h2 className = "text-4xl md:text-5xl font-bold text-white tracking-tight mb-6" >
352+ React Component Gallery
353+ </ h2 >
354+
355+ < p className = "text-lg text-slate-300 max-w-3xl mx-auto leading-relaxed" >
356+ @servicestack/react bridges the gap between your backend and frontend, delivering
357+ production-grade React applications with minimal code and maximum capability.
358+ With API-enabled validation bound forms you can focus on building features, not wiring forms.
359+ </ p >
360+ </ div >
361+ </ section >
362+
363+ < div className = "flex-1 w-full bg-background text-foreground" >
364+ < div className = "max-w-6xl mx-auto px-4 space-y-24" >
365+
366+ < ReactComponentGallery />
367+
325368 < PricingCallout />
326369 </ div >
327370 </ div >
371+
328372 </ main >
329373 ) ;
330374}
331375
376+ function ReactComponentGallery ( ) {
377+ return (
378+ < div className = "mt-8 prose dark:prose-invert max-w-none" >
379+
380+ < div className = "grid grid-cols-1 md:grid-cols-2 gap-6 not-prose mb-12" >
381+ < Link href = "https://react.servicestack.net/gallery/autoquerygrid" className = "block p-6 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-lg hover:border-indigo-500 dark:hover:border-indigo-500 transition-colors" >
382+ < h3 className = "text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2" > AutoQueryGrid</ h3 >
383+ < p className = "text-gray-600 dark:text-gray-400" >
384+ Powerful data grid with built-in querying, filtering, and sorting capabilities.
385+ </ p >
386+ </ Link >
387+
388+ < Link href = "https://react.servicestack.net/gallery/datagrid" className = "block p-6 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-lg hover:border-indigo-500 dark:hover:border-indigo-500 transition-colors" >
389+ < h3 className = "text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2" > DataGrid</ h3 >
390+ < p className = "text-gray-600 dark:text-gray-400" >
391+ Flexible data grid component for displaying collections with custom rendering.
392+ </ p >
393+ </ Link >
394+
395+ < Link href = "https://react.servicestack.net/gallery/autoform" className = "block p-6 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-lg hover:border-indigo-500 dark:hover:border-indigo-500 transition-colors" >
396+ < h3 className = "text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2" > Auto Forms</ h3 >
397+ < p className = "text-gray-600 dark:text-gray-400" >
398+ Automatically generated forms from your ServiceStack DTOs with validation.
399+ </ p >
400+ </ Link >
401+
402+ < Link href = "https://react.servicestack.net/gallery/form-inputs" className = "block p-6 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-lg hover:border-indigo-500 dark:hover:border-indigo-500 transition-colors" >
403+ < h3 className = "text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2" > Form Inputs</ h3 >
404+ < p className = "text-gray-600 dark:text-gray-400" >
405+ Rich collection of form input components with built-in validation and styling.
406+ </ p >
407+ </ Link >
408+
409+ < Link href = "https://react.servicestack.net/gallery/alerts" className = "block p-6 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-lg hover:border-indigo-500 dark:hover:border-indigo-500 transition-colors" >
410+ < h3 className = "text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2" > Alerts</ h3 >
411+ < p className = "text-gray-600 dark:text-gray-400" >
412+ Alert and notification components for displaying messages to users.
413+ </ p >
414+ </ Link >
415+
416+ < Link href = "https://react.servicestack.net/gallery/modals" className = "block p-6 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-lg hover:border-indigo-500 dark:hover:border-indigo-500 transition-colors" >
417+ < h3 className = "text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2" > Modals</ h3 >
418+ < p className = "text-gray-600 dark:text-gray-400" >
419+ Modal dialogs and slide-over panels for focused user interactions.
420+ </ p >
421+ </ Link >
422+
423+ < Link href = "https://react.servicestack.net/gallery/navigation" className = "block p-6 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-lg hover:border-indigo-500 dark:hover:border-indigo-500 transition-colors" >
424+ < h3 className = "text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2" > Navigation</ h3 >
425+ < p className = "text-gray-600 dark:text-gray-400" >
426+ Navigation components including Tabs, Breadcrumbs, NavList, and Buttons.
427+ </ p >
428+ </ Link >
429+
430+ < Link href = "https://react.servicestack.net/gallery/formats" className = "block p-6 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-lg hover:border-indigo-500 dark:hover:border-indigo-500 transition-colors" >
431+ < h3 className = "text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2" > Formats</ h3 >
432+ < p className = "text-gray-600 dark:text-gray-400" >
433+ PreviewFormat component for rendering data in different formats like currency, bytes, icons, and links.
434+ </ p >
435+ </ Link >
436+
437+ < Link href = "https://react.servicestack.net/gallery/fileinput" className = "block p-6 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-lg hover:border-indigo-500 dark:hover:border-indigo-500 transition-colors" >
438+ < h3 className = "text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2" > FileInput</ h3 >
439+ < p className = "text-gray-600 dark:text-gray-400" >
440+ File upload component with support for single and multiple files, drag & drop , and managed uploads .
441+ </ p >
442+ </ Link >
443+
444+ < Link href = "https://react.servicestack.net/gallery/taginput" className = "block p-6 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-lg hover:border-indigo-500 dark:hover:border-indigo-500 transition-colors" >
445+ < h3 className = "text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2" > TagInput</ h3 >
446+ < p className = "text-gray-600 dark:text-gray-400" >
447+ Tag input component for managing multiple values with autocomplete and validation.
448+ </ p >
449+ </ Link >
450+
451+ < Link href = "https://react.servicestack.net/gallery/combobox" className = "block p-6 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-lg hover:border-indigo-500 dark:hover:border-indigo-500 transition-colors" >
452+ < h3 className = "text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2" > Combobox</ h3 >
453+ < p className = "text-gray-600 dark:text-gray-400" >
454+ Searchable dropdown component with support for objects, key-value pairs, and custom rendering.
455+ </ p >
456+ </ Link >
457+
458+ < Link href = "https://react.servicestack.net/gallery/autocomplete" className = "block p-6 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-lg hover:border-indigo-500 dark:hover:border-indigo-500 transition-colors" >
459+ < h3 className = "text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2" > Autocomplete</ h3 >
460+ < p className = "text-gray-600 dark:text-gray-400" >
461+ Autocomplete input with single/multiple selection and custom item rendering.
462+ </ p >
463+ </ Link >
464+
465+ < Link href = "https://react.servicestack.net/gallery/custom-autoforms" className = "block p-6 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-lg hover:border-indigo-500 dark:hover:border-indigo-500 transition-colors" >
466+ < h3 className = "text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2" > Custom Auto Forms</ h3 >
467+ < p className = "text-gray-600 dark:text-gray-400" >
468+ Learn how to create custom AutoQuery implementations for complex scenarios.
469+ </ p >
470+ </ Link >
471+
472+ < Link href = "https://react.servicestack.net/gallery/markdown" className = "block p-6 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-lg hover:border-indigo-500 dark:hover:border-indigo-500 transition-colors" >
473+ < h3 className = "text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2" > Markdown Editor</ h3 >
474+ < p className = "text-gray-600 dark:text-gray-400" >
475+ Rich markdown editor with toolbar, keyboard shortcuts, and GitHub Flavored Markdown support.
476+ </ p >
477+ </ Link >
478+
479+ < Link href = "https://react.servicestack.net/gallery/custom-inputs" className = "block p-6 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-lg hover:border-indigo-500 dark:hover:border-indigo-500 transition-colors" >
480+ < h3 className = "text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2" > Custom Inputs</ h3 >
481+ < p className = "text-gray-600 dark:text-gray-400" >
482+ Create custom input components that integrate seamlessly with AutoForm.
483+ </ p >
484+ </ Link >
485+ </ div >
486+ </ div >
487+ )
488+ }
489+
332490function PricingCallout ( ) {
333491 return (
334- < div className = "relative max-w-4xl mx-auto mt-60 rounded-3xl overflow-hidden bg-slate-950 border border-white/10 shadow-2xl" >
492+ < div className = "relative max-w-4xl mx-auto mt-60 mb-32 rounded-3xl overflow-hidden bg-slate-950 border border-white/10 shadow-2xl" >
335493 { /* Background Effects */ }
336494 < div className = "absolute inset-0 opacity-20 pointer-events-none" >
337495 < svg className = "h-full w-full" aria-hidden = "true" >
0 commit comments