Skip to main content Skills Marktplatz Entdecken und erkunden Sie KI-Skills, die von der Community erstellt wurden.
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Prompt kopierenPrompt-Details anzeigen Ein direkter Befehl überspringt den Prüf-Prompt. Prüfen Sie die Quelle, bevor Sie ihn ausführen.
npx skills add https://github.com/gmackie/agent-skills --skill react-ui-shadcn-tailwindDer Befehl bleibt in einer Zeile. Scrollen Sie horizontal, um ihn vor dem Kopieren vollständig zu prüfen.
Sie bevorzugen eine lokale Kopie? Laden Sie die Dateien herunter, die SkillsMP derzeit vorliegen.
ZIP herunterladen Herunterladen... name react-ui-shadcn-tailwind description Generate modern React UI components using shadcn/ui and Tailwind CSS. Create forms, dashboards, data tables, and interactive components with consistent design patterns. allowed-tools fs_read fs_write execute_bash metadata {"tags":"design,react,ui,webapp","groups":"react","invocation":"model","author":"kiro-cli","version":"1.0","category":"frontend","compatibility":"Requires React, Tailwind CSS, shadcn/ui installed"}
React UI Generation with shadcn/ui and Tailwind
Instructions
1. Set up shadcn/ui and Tailwind
Initialize shadcn/ui in existing React project:
npx shadcn-ui@latest init
Install additional components:
npx shadcn-ui@latest add button card form input label select textarea
npx shadcn-ui@latest add table dialog sheet toast tabs badge
npx shadcn-ui@latest add dropdown-menu avatar separator progress
2. Form components with validation
Advanced form with react-hook-form:
import { useForm } from "react-hook-form"
import { zodResolver } from "@hookform/resolvers/zod"
import * as z from "zod"
import { Button } from "@/components/ui/button"
import { Form , FormControl , FormField , FormItem , FormLabel , FormMessage } from "@/components/ui/form"
import { Input } from "@/components/ui/input"
import { Select , SelectContent , SelectItem , SelectTrigger , SelectValue } from "@/components/ui/select"
import { Textarea } from "@/components/ui/textarea"
import { Card , CardContent , CardHeader , CardTitle } from "@/components/ui/card"
const formSchema = z.object ({
name : z.string ().min (2 , "Name must be at least 2 characters" ),
email : z.string ().email ("Invalid email address" ),
role : z.string ().min (1 , "Please select a role" ),
bio : z.string ().max (500 , "Bio must be less than 500 characters" ),
})
export function UserProfileForm ( ) {
const form = useForm<z.infer <typeof formSchema>>({
resolver : zodResolver (formSchema),
defaultValues : {
name : "" ,
email : "" ,
role : "" ,
bio : "" ,
},
})
function onSubmit (values : z.infer<typeof formSchema> ) {
console .log (values)
}
return (
<Card className ="w-full max-w-2xl mx-auto" >
<CardHeader >
<CardTitle > User Profile</CardTitle >
</CardHeader >
<CardContent >
<Form {...form }>
<form onSubmit ={form.handleSubmit(onSubmit)} className ="space-y-6" >
<FormField
control ={form.control}
name ="name"
render ={({ field }) => (
<FormItem >
<FormLabel > Name</FormLabel >
<FormControl >
<Input placeholder ="Enter your name" {...field } />
</FormControl >
<FormMessage />
</FormItem >
)}
/>
<FormField
control ={form.control}
name =
= }) => (
Email
)}
/>
(
Role
Admin
User
Moderator
)}
/>
(
Bio
)}
/>
Save Profile
)
}
3. Data table with sorting and filtering
Advanced data table component:
import { useState } from "react"
import { Table , TableBody , TableCell , TableHead , TableHeader , TableRow } from "@/components/ui/table"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { Badge } from "@/components/ui/badge"
import { DropdownMenu , DropdownMenuContent , DropdownMenuItem , DropdownMenuTrigger } from "@/components/ui/dropdown-menu"
import { Card , CardContent , CardHeader , CardTitle } from "@/components/ui/card"
import { MoreHorizontal , Search , Filter } from "lucide-react"
interface User {
id : string
name : string
email : string
:
: |
:
}
: [] = [
{ : , : , : , : , : , : },
{ : , : , : , : , : , : },
]
( ) {
[users, setUsers] = useState< []>(mockUsers)
[searchTerm, setSearchTerm] = ( )
[statusFilter, setStatusFilter] = useState< >( )
filteredUsers = users. ( {
matchesSearch = user. . (). (searchTerm. ()) ||
user. . (). (searchTerm. ())
matchesStatus = statusFilter === || user. === statusFilter
matchesSearch && matchesStatus
})
(
)
}
4. Dashboard layout with metrics
Dashboard with cards and charts:
import { Card , CardContent , CardHeader , CardTitle } from "@/components/ui/card"
import { Progress } from "@/components/ui/progress"
import { Badge } from "@/components/ui/badge"
import { Tabs , TabsContent , TabsList , TabsTrigger } from "@/components/ui/tabs"
import { Users , DollarSign , Activity , TrendingUp } from "lucide-react"
export function Dashboard ( ) {
return (
<div className ="p-6 space-y-6" >
<div className ="flex items-center justify-between" >
<h1 className ="text-3xl font-bold" > Dashboard</h1 >
<Badge variant ="outline" > Last updated: 2 min ago</Badge >
{/* Metrics Cards */}
Total Revenue
$45,231.89
+20.1% from last month
Active Users
2,350
+180.1% from last month
Sales
12,234
+19% from last month
Active Now
573
+201 since last hour
{/* Detailed Analytics */}
Overview
Analytics
Reports
Recent Activity
New user registered
2 minutes ago
Payment received
5 minutes ago
Progress
Monthly Goal
75%
Weekly Target
60%
)
}
5. Modal dialogs and sheets
Reusable modal patterns:
import { useState } from "react"
import { Dialog , DialogContent , DialogHeader , DialogTitle , DialogTrigger } from "@/components/ui/dialog"
import { Sheet , SheetContent , SheetHeader , SheetTitle , SheetTrigger } from "@/components/ui/sheet"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
export function CreateUserModal ( ) {
const [open, setOpen] = useState (false )
return (
<Dialog open ={open} onOpenChange ={setOpen} >
<DialogTrigger asChild >
<Button > Create User</Button >
</ >
Create New User
Name
Email
setOpen(false)}>Cancel
setOpen(false)}>Create
)
}
( ) {
(
)
}
Examples
Quick UI generation commands
"Create a user registration form with validation"
"Generate a data table for products with search and filters"
"Build a dashboard with revenue metrics and charts"
"Create a settings modal with theme switcher"
"Generate a responsive navigation with mobile menu"
Custom component patterns
export function LoadingCard ({ title, children, isLoading }: {
title: string
children: React.ReactNode
isLoading?: boolean
} ) {
return (
<Card >
<CardHeader >
<CardTitle > {title}</CardTitle >
</CardHeader >
<CardContent >
{isLoading ? (
<div className ="flex items-center justify-center h-32" >
<div className ="animate-spin rounded-full h-8 w-8 border-b-2 border-primary" > </div >
</div >
) : (
children
)}
</CardContent >
</Card >
)
}
Troubleshooting
Components not styled : Verify Tailwind CSS is properly configured and imported
shadcn/ui components missing : Run npx shadcn-ui@latest add [component-name]
Form validation not working : Check zod schema and react-hook-form setup
Table sorting broken : Implement proper sort state management
Modal not closing : Ensure proper state management with open/onOpenChange
Responsive issues : Use Tailwind responsive prefixes (sm:, md:, lg:, xl:)
"email"
render
{({
field
<FormItem >
<FormLabel >
</FormLabel >
<FormControl >
<Input type ="email" placeholder ="Enter your email" {...field } />
</FormControl >
<FormMessage />
</FormItem >
<FormField
control ={form.control}
name ="role"
render ={({ field }) =>
<FormItem >
<FormLabel >
</FormLabel >
<Select onValueChange ={field.onChange} defaultValue ={field.value} >
<FormControl >
<SelectTrigger >
<SelectValue placeholder ="Select a role" />
</SelectTrigger >
</FormControl >
<SelectContent >
<SelectItem value ="admin" >
</SelectItem >
<SelectItem value ="user" >
</SelectItem >
<SelectItem value ="moderator" >
</SelectItem >
</SelectContent >
</Select >
<FormMessage />
</FormItem >
<FormField
control ={form.control}
name ="bio"
render ={({ field }) =>
<FormItem >
<FormLabel >
</FormLabel >
<FormControl >
<Textarea
placeholder ="Tell us about yourself"
className ="resize-none"
{...field }
/>
</FormControl >
<FormMessage />
</FormItem >
<Button type ="submit" className ="w-full" >
</Button >
</form >
</Form >
</CardContent >
</Card >
role
string
status
"active"
"inactive"
lastLogin
string
const
mockUsers
User
id
"1"
name
"John Doe"
email
"john@example.com"
role
"admin"
status
"active"
lastLogin
"2024-01-15"
id
"2"
name
"Jane Smith"
email
"jane@example.com"
role
"user"
status
"inactive"
lastLogin
"2024-01-10"
export
function
UsersTable
const
User
const
useState
""
const
string
"all"
const
filter
user =>
const
name
toLowerCase
includes
toLowerCase
email
toLowerCase
includes
toLowerCase
const
"all"
status
return
return
<Card >
<CardHeader >
<CardTitle > Users Management</CardTitle >
<div className ="flex gap-4" >
<div className ="relative flex-1" >
<Search className ="absolute left-2 top-2.5 h-4 w-4 text-muted-foreground" />
<Input
placeholder ="Search users..."
value ={searchTerm}
onChange ={(e) => setSearchTerm(e.target.value)}
className="pl-8"
/>
</div >
<DropdownMenu >
<DropdownMenuTrigger asChild >
<Button variant ="outline" >
<Filter className ="mr-2 h-4 w-4" />
Status: {statusFilter}
</Button >
</DropdownMenuTrigger >
<DropdownMenuContent >
<DropdownMenuItem onClick ={() => setStatusFilter("all")}>All</DropdownMenuItem >
<DropdownMenuItem onClick ={() => setStatusFilter("active")}>Active</DropdownMenuItem >
<DropdownMenuItem onClick ={() => setStatusFilter("inactive")}>Inactive</DropdownMenuItem >
</DropdownMenuContent >
</DropdownMenu >
</div >
</CardHeader >
<CardContent >
<Table >
<TableHeader >
<TableRow >
<TableHead > Name</TableHead >
<TableHead > Email</TableHead >
<TableHead > Role</TableHead >
<TableHead > Status</TableHead >
<TableHead > Last Login</TableHead >
<TableHead className ="w-[100px]" > Actions</TableHead >
</TableRow >
</TableHeader >
<TableBody >
{filteredUsers.map((user) => (
<TableRow key ={user.id} >
<TableCell className ="font-medium" > {user.name}</TableCell >
<TableCell > {user.email}</TableCell >
<TableCell >
<Badge variant ={user.role === "admin" ? "default " : "secondary "}>
{user.role}
</Badge >
</TableCell >
<TableCell >
<Badge variant ={user.status === "active" ? "default " : "destructive "}>
{user.status}
</Badge >
</TableCell >
<TableCell > {user.lastLogin}</TableCell >
<TableCell >
<DropdownMenu >
<DropdownMenuTrigger asChild >
<Button variant ="ghost" className ="h-8 w-8 p-0" >
<MoreHorizontal className ="h-4 w-4" />
</Button >
</DropdownMenuTrigger >
<DropdownMenuContent align ="end" >
<DropdownMenuItem > Edit</DropdownMenuItem >
<DropdownMenuItem > Delete</DropdownMenuItem >
</DropdownMenuContent >
</DropdownMenu >
</TableCell >
</TableRow >
))}
</TableBody >
</Table >
</CardContent >
</Card >
</div >
<div className ="grid gap-4 md:grid-cols-2 lg:grid-cols-4" >
<Card >
<CardHeader className ="flex flex-row items-center justify-between space-y-0 pb-2" >
<CardTitle className ="text-sm font-medium" >
</CardTitle >
<DollarSign className ="h-4 w-4 text-muted-foreground" />
</CardHeader >
<CardContent >
<div className ="text-2xl font-bold" >
</div >
<p className ="text-xs text-muted-foreground" >
</p >
</CardContent >
</Card >
<Card >
<CardHeader className ="flex flex-row items-center justify-between space-y-0 pb-2" >
<CardTitle className ="text-sm font-medium" >
</CardTitle >
<Users className ="h-4 w-4 text-muted-foreground" />
</CardHeader >
<CardContent >
<div className ="text-2xl font-bold" >
</div >
<p className ="text-xs text-muted-foreground" >
</p >
</CardContent >
</Card >
<Card >
<CardHeader className ="flex flex-row items-center justify-between space-y-0 pb-2" >
<CardTitle className ="text-sm font-medium" >
</CardTitle >
<TrendingUp className ="h-4 w-4 text-muted-foreground" />
</CardHeader >
<CardContent >
<div className ="text-2xl font-bold" >
</div >
<p className ="text-xs text-muted-foreground" >
</p >
</CardContent >
</Card >
<Card >
<CardHeader className ="flex flex-row items-center justify-between space-y-0 pb-2" >
<CardTitle className ="text-sm font-medium" >
</CardTitle >
<Activity className ="h-4 w-4 text-muted-foreground" />
</CardHeader >
<CardContent >
<div className ="text-2xl font-bold" >
</div >
<p className ="text-xs text-muted-foreground" >
</p >
</CardContent >
</Card >
</div >
<Tabs defaultValue ="overview" className ="space-y-4" >
<TabsList >
<TabsTrigger value ="overview" >
</TabsTrigger >
<TabsTrigger value ="analytics" >
</TabsTrigger >
<TabsTrigger value ="reports" >
</TabsTrigger >
</TabsList >
<TabsContent value ="overview" className ="space-y-4" >
<div className ="grid gap-4 md:grid-cols-2 lg:grid-cols-7" >
<Card className ="col-span-4" >
<CardHeader >
<CardTitle >
</CardTitle >
</CardHeader >
<CardContent className ="space-y-4" >
<div className ="flex items-center space-x-4" >
<div className ="w-2 h-2 bg-blue-500 rounded-full" >
</div >
<div className ="flex-1" >
<p className ="text-sm font-medium" >
</p >
<p className ="text-xs text-muted-foreground" >
</p >
</div >
</div >
<div className ="flex items-center space-x-4" >
<div className ="w-2 h-2 bg-green-500 rounded-full" >
</div >
<div className ="flex-1" >
<p className ="text-sm font-medium" >
</p >
<p className ="text-xs text-muted-foreground" >
</p >
</div >
</div >
</CardContent >
</Card >
<Card className ="col-span-3" >
<CardHeader >
<CardTitle >
</CardTitle >
</CardHeader >
<CardContent className ="space-y-4" >
<div className ="space-y-2" >
<div className ="flex items-center justify-between text-sm" >
<span >
</span >
<span >
</span >
</div >
<Progress value ={75} />
</div >
<div className ="space-y-2" >
<div className ="flex items-center justify-between text-sm" >
<span >
</span >
<span >
</span >
</div >
<Progress value ={60} />
</div >
</CardContent >
</Card >
</div >
</TabsContent >
</Tabs >
</div >
DialogTrigger
<DialogContent className ="sm:max-w-[425px]" >
<DialogHeader >
<DialogTitle >
</DialogTitle >
</DialogHeader >
<div className ="grid gap-4 py-4" >
<div className ="grid grid-cols-4 items-center gap-4" >
<Label htmlFor ="name" className ="text-right" >
</Label >
<Input id ="name" className ="col-span-3" />
</div >
<div className ="grid grid-cols-4 items-center gap-4" >
<Label htmlFor ="email" className ="text-right" >
</Label >
<Input id ="email" type ="email" className ="col-span-3" />
</div >
</div >
<div className ="flex justify-end gap-2" >
<Button variant ="outline" onClick ={() =>
</Button >
<Button onClick ={() =>
</Button >
</div >
</DialogContent >
</Dialog >
export
function
SettingsSheet
return
<Sheet >
<SheetTrigger asChild >
<Button variant ="outline" > Settings</Button >
</SheetTrigger >
<SheetContent >
<SheetHeader >
<SheetTitle > Settings</SheetTitle >
</SheetHeader >
<div className ="py-4 space-y-4" >
<div className ="space-y-2" >
<Label > Theme</Label >
<select className ="w-full p-2 border rounded" >
<option > Light</option >
<option > Dark</option >
<option > System</option >
</select >
</div >
</div >
</SheetContent >
</Sheet >
Mehr aus diesem Repository
Comprehensive Cloudflare platform skill covering Workers, Pages, storage (KV, D1, R2), AI (Workers AI, Vectorize, Agents SDK), feature flags (Flagship), networking (Tunnel, Spectrum), security (WAF, DDoS), and infrastructure-as-code (Terraform, Pulumi). Use for any Cloudflare development task. Biases towards retrieval from Cloudflare docs over pre-trained knowledge.
EAS service (paid). Deploy Expo apps to the app stores with EAS - build and submit to the iOS App Store, Google Play Store, and TestFlight, configure eas.json build and submit profiles, manage app versions and build numbers, and publish App Store metadata and ASO. Use whenever the user wants to deploy, release, or ship an app to production or the app stores, is preparing a production build, running eas build or eas submit, shipping to TestFlight, bumping version or build numbers, or setting up store listing metadata. For deploying an Expo website or API routes, use the eas-hosting skill.
Verwandte Berufe SOC
Basierend auf der SOC-Berufsklassifikation