create-component
Create CVA + DaisyUI components following Iridium patterns. Use when asked to create UI components, buttons, inputs, cards, modals, alerts, or any reusable UI element.
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
Create Component
When to Use
- Creating new UI components (buttons, inputs, cards, modals)
- Building form elements with labels and error states
- User asks to "add a component" or "create a component"
Critical Rules
1. Always Import from CVA Config
// CORRECT
import type { VariantProps } from 'cva';
import { cva, cx } from '~/cva.config';
// WRONG
import { cva } from 'cva'; // Wrong package
import { cn } from '~/lib/utils'; // Wrong utility
2. className Last in cx()
className={cx(buttonVariants({ size, status }), className)} // className always last
Quick Start
import type { VariantProps } from 'cva';
import { cva, cx } from '~/cva.config';
export const buttonVariants = cva({
base: 'btn',
variants: {
status: {
primary: 'btn-primary',
secondary: 'btn-secondary',
},
size: {
sm: 'btn-sm',
md: 'btn-md',
lg: 'btn-lg',
},
},
defaultVariants: {
status: 'primary',
size: 'md',
},
});
interface ButtonProps
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
VariantProps<typeof buttonVariants> {
loading?: boolean;
}
export function Button({ status, size, className, children, ...props }: ButtonProps) {
return (
<button className={cx(buttonVariants({ status, size }), className)} {...props}>
{children}
</button>
);
}
Component Directories
| Category | Directory | Examples |
|---|---|---|
| Actions | app/components/actions/ |
Button |
| Data Display | app/components/data-display/ |
Card, Badge |
| Data Input | app/components/data-input/ |
TextInput, Select |
| Feedback | app/components/feedback/ |
Alert, Modal |
| Layout | app/components/layout/ |
Container |
Checklist
- Create in appropriate category directory
- Define CVA variants with
base,variants,defaultVariants - Extend native HTML attributes in props interface
- Put
classNamelast incx()call - Add JSDoc with usage example
Templates
Full Reference
See .github/instructions/component-patterns.instructions.md and .github/instructions/cva.instructions.md for:
- Form component patterns
- Boolean variants
- Compound variants
- DaisyUI class reference
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-01-20
- Index updated
- 2026-01-26
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!