Class Name Resolvers
Class name resolvers compute dynamic class names from runtime context.
Use class name resolvers when static className strings are not enough.
Schema declaration
schemas/users/users.schema.ts
TS
export const usersSchema = {
version: "1.0.0",
resource: "users",
theme: {
classNameResolver: "theme.resolveClassName",
classNameWhen: [
{
slot: "tableRow",
when: { key: "status", operator: "equals", value: "suspended" },
className: "bg-red-50 text-red-950"
}
]
},
registry: {
classNameResolvers: ["theme.resolveClassName"]
}
} as const;Runtime registry
lib/vibeflui/registry.ts
TS
import { createRegistry } from "@vibeflui/core";
export const registry = createRegistry({
classNameResolvers: {
"theme.resolveClassName": ({ row, column }) => {
if (column?.key === "status" && row?.status === "suspended") {
return "font-medium text-red-700";
}
return "";
}
}
});Static class names first
Prefer static class names when possible.
schemas/users/user-table.schema.ts
TS
export const usersSchema = {
version: "1.0.0",
resource: "users",
table: {
columns: [
{ key: "email", label: "Email", cellClassName: "font-mono text-xs" }
]
}
} as const;Use a resolver only when the class depends on runtime data.
Class name conditions
Use classNameWhen for simple data-driven styles.
schemas/users/user-theme.ts
TS
theme: {
classNameWhen: [
{
slot: "tableRow",
when: { key: "status", operator: "equals", value: "pending" },
className: "bg-orange-50 text-orange-950"
}
]
}