---
name: component-preview-usage
description: Instructions and guidelines for using the component-preview and component-preview-server components within the Sona-UI repository. Includes details on registry fetching.
---
# Component Preview in Sona-UI
This skill covers the usage of the Component Preview ecosystem in the `sona-ui` repository. The preview system handles displaying live React components alongside their raw source code in an interactive tabbed interface.
## Core Components
The system relies on three primary files:
1. `ComponentPreview` (`src/components/common/component-preview.tsx`): The client-side UI wrapper providing the Tabs (Preview / Code) and invoking `CodeBlock` under the hood. It takes raw `component` and `code` nodes.
2. `ComponentPreviewServer` (`src/components/common/component-preview-server.tsx`): A server component wrapper that automatically resolves a component and its source code from a global registry map.
3. `ComponentWrapper` (`src/components/common/component-wrapper.tsx`): The visual layout shell that adds the standard background, padding, and centered layout to the actual rendered component.
## Usage Guidelines
### 1. Manual Usage (ComponentPreview)
If you already have the component node and its raw string code, you can use `ComponentPreview` directly. This is generalized and can be used on any path or any arbitrary block of UI.
```tsx
import ComponentPreview from "@/components/common/component-preview";
import MyButton from "./my-button";
const codeString = `
export default function MyButton() {
return
}
`;
export default function Page() {
return (
}
code={codeString}
/>
)
}
```
### 2. Registry Usage (ComponentPreviewServer)
To build scalable documentation (like a UI library docs site), rely on `ComponentPreviewServer`. This abstracts away importing explicit components and parsing raw strings by reading from a central registry.
```tsx
import { ComponentPreviewServer } from "@/components/common/component-preview-server";
// Auto fetches the "default" example from the "button" category
// in the exampleRegistry
```
## How Registry Fetching Works
The `ComponentPreviewServer` component integrates tightly with the `@/registry/index` file (specifically `exampleRegistry`).
When you pass `component="button"` and `name="default"`:
1. It queries `exampleRegistry["button"]` to get an array of button examples.
2. It `.find()`s the specific example where `e.name === "default"`.
3. If found, it passes the example's lazy-loaded/imported functional component `` and its literal string `example.code` down to `ComponentPreview`.
4. If it fails, it gracefully handles the error by returning an inline message: `Example default not found in registry for component button.`
## Reference Files
If you need to bootstrap these preview block wrapper components into another standalone project, full source code for the components is provided in the `reference/` block of this skill.
- [component-preview.tsx](file:///Users/dinilthilakarathne/repos/sona-ui/.agent/skills/component-preview/reference/component-preview.md)
- [component-preview-server.tsx](file:///Users/dinilthilakarathne/repos/sona-ui/.agent/skills/component-preview/reference/component-preview-server.md)
- [component-wrapper.tsx](file:///Users/dinilthilakarathne/repos/sona-ui/.agent/skills/component-preview/reference/component-wrapper.md)