mirror of
https://github.com/vercel-labs/json-render.git
synced 2026-10-20 06:19:57 +08:00
* ai sdk * chat * move more to lib * fixes * refactor * fixes * streamdown * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes * data-spec * fixes * sortable * github * tools * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes * tables * fixes * fixes * rename to chat * fixes docs * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fix lint * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes * fixes
49 lines
1.1 KiB
TypeScript
49 lines
1.1 KiB
TypeScript
"use client";
|
|
|
|
import { type ReactNode } from "react";
|
|
import {
|
|
Renderer,
|
|
type ComponentRenderer,
|
|
type Spec,
|
|
StateProvider,
|
|
VisibilityProvider,
|
|
ActionProvider,
|
|
} from "@json-render/react";
|
|
|
|
import { registry, Fallback } from "./registry";
|
|
|
|
// =============================================================================
|
|
// ExplorerRenderer
|
|
// =============================================================================
|
|
|
|
interface ExplorerRendererProps {
|
|
spec: Spec | null;
|
|
loading?: boolean;
|
|
}
|
|
|
|
const fallback: ComponentRenderer = ({ element }) => (
|
|
<Fallback type={element.type} />
|
|
);
|
|
|
|
export function ExplorerRenderer({
|
|
spec,
|
|
loading,
|
|
}: ExplorerRendererProps): ReactNode {
|
|
if (!spec) return null;
|
|
|
|
return (
|
|
<StateProvider initialState={spec.state ?? {}}>
|
|
<VisibilityProvider>
|
|
<ActionProvider>
|
|
<Renderer
|
|
spec={spec}
|
|
registry={registry}
|
|
fallback={fallback}
|
|
loading={loading}
|
|
/>
|
|
</ActionProvider>
|
|
</VisibilityProvider>
|
|
</StateProvider>
|
|
);
|
|
}
|