diff --git a/src/components/ReactPreview.tsx b/src/components/ReactPreview.tsx index 2539b65..9375071 100644 --- a/src/components/ReactPreview.tsx +++ b/src/components/ReactPreview.tsx @@ -6,6 +6,24 @@ import { AIErrorHelper } from '@/components/AIErrorHelper' import { WarningCircle } from '@phosphor-icons/react' import { InputParameter } from '@/lib/types' import * as Babel from '@babel/standalone' +import { Button } from '@/components/ui/button' +import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card' +import { Input } from '@/components/ui/input' +import { Label } from '@/components/ui/label' +import { Textarea } from '@/components/ui/textarea' +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' +import { Checkbox } from '@/components/ui/checkbox' +import { Switch } from '@/components/ui/switch' +import { Badge } from '@/components/ui/badge' +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' +import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog' +import { Separator } from '@/components/ui/separator' +import { Progress } from '@/components/ui/progress' +import { Slider } from '@/components/ui/slider' +import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar' +import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion' +import { toast } from 'sonner' +import * as PhosphorIcons from '@phosphor-icons/react' interface ReactPreviewProps { code: string @@ -56,6 +74,48 @@ export function ReactPreview({ code, language, functionName, inputParameters }: (function() { const React = arguments[0]; const { useState, useEffect, useRef, useMemo, useCallback, useReducer, useContext } = React; + const Button = arguments[1]; + const Card = arguments[2]; + const CardContent = arguments[3]; + const CardDescription = arguments[4]; + const CardFooter = arguments[5]; + const CardHeader = arguments[6]; + const CardTitle = arguments[7]; + const Input = arguments[8]; + const Label = arguments[9]; + const Textarea = arguments[10]; + const Select = arguments[11]; + const SelectContent = arguments[12]; + const SelectItem = arguments[13]; + const SelectTrigger = arguments[14]; + const SelectValue = arguments[15]; + const Checkbox = arguments[16]; + const Switch = arguments[17]; + const Badge = arguments[18]; + const Tabs = arguments[19]; + const TabsContent = arguments[20]; + const TabsList = arguments[21]; + const TabsTrigger = arguments[22]; + const Dialog = arguments[23]; + const DialogContent = arguments[24]; + const DialogDescription = arguments[25]; + const DialogFooter = arguments[26]; + const DialogHeader = arguments[27]; + const DialogTitle = arguments[28]; + const DialogTrigger = arguments[29]; + const Separator = arguments[30]; + const Progress = arguments[31]; + const Slider = arguments[32]; + const Avatar = arguments[33]; + const AvatarFallback = arguments[34]; + const AvatarImage = arguments[35]; + const Accordion = arguments[36]; + const AccordionContent = arguments[37]; + const AccordionItem = arguments[38]; + const AccordionTrigger = arguments[39]; + const toast = arguments[40]; + const PhosphorIcons = arguments[41]; + const { Plus, Minus, ArrowCounterClockwise, PaperPlaneRight, Trash, User, Gear, Bell, MagnifyingGlass } = PhosphorIcons; ${transformedCode} @@ -66,7 +126,50 @@ export function ReactPreview({ code, language, functionName, inputParameters }: ` const componentFactory = eval(wrappedCode) - const CreatedComponent = componentFactory(React) + const CreatedComponent = componentFactory( + React, + Button, + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, + Input, + Label, + Textarea, + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, + Checkbox, + Switch, + Badge, + Tabs, + TabsContent, + TabsList, + TabsTrigger, + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, + Separator, + Progress, + Slider, + Avatar, + AvatarFallback, + AvatarImage, + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, + toast, + PhosphorIcons + ) if (typeof CreatedComponent === 'function') { setComponent(() => CreatedComponent)