AgentSkillsCN

component

按照 Darkroom 标准创建 React 组件。适用于以下场景: - 用户提到“创建组件”、“新建组件”、“添加组件”; - 用户希望构建 UI 元素、小部件,或是可复用的模块; - 用户提及诸如“Button”、“Header”、“Card”等组件名称。

SKILL.md
--- frontmatter
name: component
description: |
  Create React components following Darkroom standards. Use when:
  - User says "create component", "new component", "add component"
  - User wants to build a UI element, widget, or reusable piece
  - User mentions a component name like "Button", "Header", "Card"
argument-hint: "[ComponentName]"

Create Darkroom Component

Create a React component following Darkroom conventions.

Structure

code
components/<name>/
├── index.tsx           # Component implementation
└── <name>.module.css   # Component styles

Template

index.tsx

tsx
// 'use client' - Only add if component needs:
// - useState, useEffect, or other hooks
// - Event handlers (onClick, onChange, etc.)
// - Browser APIs (window, document, etc.)

import s from './<name>.module.css'

interface <Name>Props {
  children?: React.ReactNode
  className?: string
}

export function <Name>({ children, className }: <Name>Props) {
  return (
    <div className={`${s.<name>} ${className ?? ''}`}>
      {children}
    </div>
  )
}

<name>.module.css

css
.<name> {
  /* Component styles */
}

Conventions

  1. Server Component by default - Only add 'use client' if needed
  2. CSS Module as s - Always import as s for consistency
  3. Props interface - Define explicitly, include className for composition
  4. Named export - Use export function, not export default
  5. Image wrapper - Use import { Image } from '@/components/image'
  6. Link wrapper - Use import { Link } from '@/components/link'

Arguments

  • $ARGUMENTS - Component name (e.g., "Button", "Header")
  • --client flag - Force client component

Example

code
User: "create a Button component"
→ Creates components/button/index.tsx and button.module.css