JSX Renderer
simple-ai/jsx-rendererFreeComponent
A component that renders JSX strings with access to tailwind, shadcn components and lucide icons.
Live preview
live · rendered by the registry
Rendered by simple-ai on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://simple-ai.dev/r/jsx-renderer.jsonSource
1import { cva } from "class-variance-authority";2import type { ComponentProps } from "react";3import * as React from "react";4import { ErrorBoundary } from "react-error-boundary";5import JsxParser from "react-jsx-parser";6import { cn } from "@/lib/utils";7import { completeJsxTag } from "@/registry/lib/jsx-utils";89const jsxRendererVariants = cva("", {10 variants: {11 state: {12 disabled: "opacity-50 cursor-not-allowed pointer-events-none",13 "read-only": "pointer-events-none",14 streaming:15 "opacity-65 cursor-not-allowed pointer-events-none animate-pulse",16 interactive: "",17 error: "border-2 border-destructive",18 },19 },20 defaultVariants: {21 state: "interactive",22 },23});2425type JsxRendererProps = ComponentProps<typeof JsxParser> & {26 fixIncompleteJsx?: boolean;27 jsx: string;28 state?: "disabled" | "read-only" | "interactive" | "streaming" | "error";29 fallback?: React.ComponentType;30 onError?: (error: Error, errorInfo: React.ErrorInfo) => void;31};3233function JsxRendererInner({34 className,35 jsx,36 fixIncompleteJsx = true,37 state,38 ...props39}: Omit<JsxRendererProps, "fallback" | "onError">) {40 const processedJsx = React.useMemo(() => {41 return fixIncompleteJsx ? completeJsxTag(jsx) : jsx;42 }, [jsx, fixIncompleteJsx]);4344 return (45 <JsxParser46 className={cn(jsxRendererVariants({ state }), className)}47 jsx={processedJsx}48 {...props}49 />50 );51}5253export function ErrorFallback() {54 return (55 <div className="flex items-center justify-center h-32 bg-destructive/10 border border-destructive/20 rounded-md text-destructive text-sm font-medium">56 Error rendering57 </div>58 );59}6061interface JsxRendererErrorBoundaryProps {62 children: React.ReactNode;63 fallback?: React.ComponentType;64 onError?: (error: Error, errorInfo: React.ErrorInfo) => void;65}6667function JsxRendererErrorBoundary({68 children,69 fallback = ErrorFallback,70 onError,71}: JsxRendererErrorBoundaryProps) {72 const Fallback = fallback;73 return (74 <ErrorBoundary fallback={<Fallback />} onError={onError}>75 {children}76 </ErrorBoundary>77 );78}7980export const JsxRenderer = React.memo(function JsxRenderer(81 props: JsxRendererProps,82) {83 const { fallback, onError, ...innerProps } = props;84 return (85 <JsxRendererErrorBoundary fallback={fallback} onError={onError}>86 <JsxRendererInner {...innerProps} />87 </JsxRendererErrorBoundary>88 );89});
What it pulls in
npm packages
Other registry items
Files it writes
More from simple-ai
All 77 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| base-handlebase-handle | simple-ai | Components | Free | 1 dep | |
| base-nodebase-node | simple-ai | Components | Free | no deps | |
| Chat Inputchat-input | simple-ai | Components | Free | 7 deps | |
| Chat Messagechat-message | simple-ai | Components | Free | no deps | |
| Chat Message Areachat-message-area | simple-ai | Components | Free | 1 dep | |
| Chat Suggestionschat-suggestions | simple-ai | Components | Free | no deps | |
| Editable Handleeditable-handle | simple-ai | Components | Free | 1 dep | |
| Generate Text Nodegenerate-text-node | simple-ai | Components | Free | 1 dep |
