Registry Components
Components are custom React components available to schema-driven UI.
Use components for custom filters, custom field components, or reusable UI blocks that are not simply value renderers.
Schema usage
schemas/users/users.schema.ts
TS
export const usersSchema = {
version: "1.0.0",
resource: "users",
table: {
filters: [
{
key: "status",
label: "Status",
type: "custom",
component: "users.statusFilter"
}
],
columns: ["name", "email", "status"]
},
form: {
fields: [
{
name: "notes",
label: "Notes",
type: "textarea",
component: "users.notesField"
}
]
},
registry: {
components: ["users.statusFilter", "users.notesField"]
}
} as const;Runtime registry
components/vibeflui/fields/UserNotesField.tsx
TSX
import type { FluiKitRuntimeComponentProps } from "@vibeflui/core";
export function UserNotesField({ value, onChange }: FluiKitRuntimeComponentProps) {
return (
<textarea
value={String(value ?? "")}
onChange={(event) => onChange?.(event.target.value)}
/>
);
}components/vibeflui/filters/UserStatusFilter.tsx
TSX
import type { FluiKitRuntimeComponentProps } from "@vibeflui/core";
export function UserStatusFilter({ value, onChange }: FluiKitRuntimeComponentProps) {
return (
<select value={String(value ?? "")} onChange={(event) => onChange?.(event.target.value)}>
<option value="">All statuses</option>
<option value="active">Active</option>
<option value="suspended">Suspended</option>
</select>
);
}lib/vibeflui/registry.tsx
TSX
import { createRegistry } from "@vibeflui/core";
import { UserNotesField } from "@/components/vibeflui/fields/UserNotesField";
import { UserStatusFilter } from "@/components/vibeflui/filters/UserStatusFilter";
export const registry = createRegistry({
components: {
"users.notesField": UserNotesField,
"users.statusFilter": UserStatusFilter
}
});Component props
Components receive runtime component props:
schemafielddetailFieldcolumnactionrowvaluevaluesoptionsmodeonChangechildrenclassName
For TypeScript, use FluiKitRuntimeComponentProps from @vibeflui/core.
Component vs field adapter
Use components for general custom UI.
Use fieldAdapters when the component is specifically a form field implementation.