
component-documenter
by deve1993
SKILL.md
name: component-documenter description: Write professional documentation including README files, Storybook stories, API docs, usage examples, and migration guides for component libraries allowed-tools:
- Read
- Write
- Edit
- Bash
- Glob
- Grep
- Task
Component Documenter
Expert skill for creating comprehensive, user-friendly documentation for component libraries. Specializes in README files, Storybook stories, API documentation, usage guides, and migration documentation.
Core Capabilities
1. README Documentation
- Professional project overview
- Installation instructions
- Quick start guides
- Feature highlights
- Usage examples
- Configuration options
- Contributing guidelines
- Troubleshooting sections
2. Storybook Integration
- Story creation for all components
- Controls/Args documentation
- Multiple story variants
- Interactive examples
- MDX documentation pages
- Accessibility addon integration
- Visual regression testing setup
3. API Documentation
- Props interface documentation
- Type definitions
- Method signatures
- Event handlers
- Return types
- Default values
- Required vs optional props
4. Usage Guides
- Getting started tutorials
- Common use cases
- Best practices
- Code examples
- Do's and Don'ts
- Accessibility guidelines
- Performance tips
5. Migration Guides
- Version upgrade guides
- Breaking changes documentation
- Migration steps
- Codemod scripts
- Before/after examples
- Deprecation notices
6. Component Examples
- Basic usage examples
- Advanced patterns
- Edge case handling
- Integration examples
- Real-world scenarios
- Interactive demos
Workflow
Phase 1: Documentation Planning
-
Understand Audience
- Developers using the library
- Contributors to the project
- Designers implementing specs
- Stakeholders reviewing features
-
Identify Content Needs
- What needs documentation?
- What's missing in current docs?
- Common questions/issues
- User pain points
-
Choose Documentation Types
- README for project overview
- Storybook for component demos
- JSDoc for inline code docs
- Markdown files for guides
- TypeScript for type docs
Phase 2: Writing Documentation
-
Create README
- Clear project description
- Installation steps
- Quick start example
- Links to detailed docs
-
Write Storybook Stories
- Default story for each component
- Variant stories (sizes, colors, states)
- Interactive controls
- Accessibility checks
-
Document API
- Props with types
- Usage examples
- Edge cases
- Return values
-
Create Usage Guides
- Step-by-step tutorials
- Common patterns
- Integration examples
- Best practices
Phase 3: Maintenance
-
Keep Updated
- Update with code changes
- Add new examples
- Document breaking changes
- Fix outdated content
-
Gather Feedback
- User questions
- GitHub issues
- Support requests
- Usage analytics
-
Continuous Improvement
- Add missing examples
- Clarify confusing sections
- Improve searchability
- Update screenshots
README Templates
Library README
# @myorg/ui-library
Modern React component library with TypeScript, Tailwind CSS, and full accessibility support.
[](https://www.npmjs.com/package/@myorg/ui-library)
[](https://opensource.org/licenses/MIT)
## Features
- 🎨 **50+ Components** - Buttons, inputs, modals, and more
- 🎯 **TypeScript First** - Full type safety out of the box
- ♿ **Accessible** - WCAG AA compliant, keyboard navigation
- 🌗 **Dark Mode** - Built-in theming system
- 📦 **Tree-shakeable** - Import only what you need
- 🎭 **Customizable** - Tailwind CSS and CSS variables
- 📱 **Responsive** - Mobile-first design
## Installation
```bash
npm install @myorg/ui-library
Quick Start
import { Button, Input } from '@myorg/ui-library'
import '@myorg/ui-library/styles.css'
function App() {
return (
<div>
<Button variant="primary">Click me</Button>
<Input placeholder="Enter text..." />
</div>
)
}
Documentation
Components
Form Components
- Button - Buttons in various styles
- Input - Text inputs with validation
- Select - Dropdown selection
- Checkbox - Checkbox input
Layout Components
Feedback Components
Usage
Basic Example
import { Button } from '@myorg/ui-library'
function MyComponent() {
return (
<Button
variant="primary"
size="lg"
onClick={() => console.log('Clicked!')}
>
Click me
</Button>
)
}
With TypeScript
import { Button, type ButtonProps } from '@myorg/ui-library'
interface MyButtonProps extends ButtonProps {
customProp?: string
}
function MyButton({ customProp, ...props }: MyButtonProps) {
return <Button {...props} />
}
Theming
import { ThemeProvider } from '@myorg/ui-library'
function App() {
return (
<ThemeProvider theme="dark">
<YourApp />
</ThemeProvider>
)
}
Configuration
Tailwind CSS
Add to your tailwind.config.js:
module.exports = {
content: [
'./node_modules/@myorg/ui-library/dist/**/*.{js,ts,jsx,tsx}',
],
presets: [
require('@myorg/ui-library/tailwind-preset')
],
}
CSS Variables
Customize colors in your CSS:
:root {
--color-primary: 59 130 246;
--color-secondary: 139 92 246;
--radius: 0.5rem;
}
Browser Support
- Chrome (last 2 versions)
- Firefox (last 2 versions)
- Safari (last 2 versions)
- Edge (last 2 versions)
Contributing
We welcome contributions! Please see CONTRIBUTING.md.
License
MIT © Your Organization
Credits
Built with:
### Component README
```markdown
# Button
Versatile button component with multiple variants, sizes, and states.
## Import
```tsx
import { Button } from '@myorg/ui-library'
Usage
<Button variant="primary" size="md">
Click me
</Button>
Props
| Prop | Type | Default | Description |
|---|---|---|---|
variant | 'primary' | 'secondary' | 'outline' | 'ghost' | 'primary' | Visual style variant |
size | 'sm' | 'md' | 'lg' | 'md' | Button size |
disabled | boolean | false | Disables button |
loading | boolean | false | Shows loading state |
onClick | (e: MouseEvent) => void | - | Click handler |
children | ReactNode | - | Button content |
Examples
Variants
<Button variant="primary">Primary</Button>
<Button variant="secondary">Secondary</Button>
<Button variant="outline">Outline</Button>
<Button variant="ghost">Ghost</Button>
Sizes
<Button size="sm">Small</Button>
<Button size="md">Medium</Button>
<Button size="lg">Large</Button>
States
<Button disabled>Disabled</Button>
<Button loading>Loading</Button>
With Icons
<Button>
<Icon name="plus" />
Add Item
</Button>
Accessibility
- Uses semantic
<button>element - Keyboard accessible (Enter, Space)
- Focus visible indicator
- Disabled state prevents interaction
- ARIA attributes when needed
Best Practices
✅ Do:
- Use semantic variants (primary for main action)
- Provide clear button text
- Use loading state for async actions
- Add icons for clarity when helpful
❌ Don't:
- Use too many primary buttons on one page
- Make buttons too small (min 44x44px)
- Use only icons without labels for important actions
- Nest interactive elements inside buttons
## Storybook Stories
### Basic Component Story
```typescript
// Button.stories.tsx
import type { Meta, StoryObj } from '@storybook/react'
import { Button } from './Button'
const meta: Meta<typeof Button> = {
title: 'Components/Button',
component: Button,
tags: ['autodocs'],
argTypes: {
variant: {
control: 'select',
options: ['primary', 'secondary', 'outline', 'ghost'],
description: 'Visual style variant',
},
size: {
control: 'select',
options: ['sm', 'md', 'lg'],
},
disabled: {
control: 'boolean',
},
onClick: { action: 'clicked' },
},
}
export default meta
type Story = StoryObj<typeof Button>
export const Primary: Story = {
args: {
variant: 'primary',
children: 'Click me',
},
}
export const Secondary: Story = {
args: {
variant: 'secondary',
children: 'Secondary Button',
},
}
export const Sizes: Story = {
render: () => (
<div style={{ display: 'flex', gap: '1rem', alignItems: 'center' }}>
<Button size="sm">Small</Button>
<Button size="md">Medium</Button>
<Button size="lg">Large</Button>
</div>
),
}
export const WithIcon: Story = {
args: {
children: (
<>
<PlusIcon />
Add Item
</>
),
},
}
export const Loading: Story = {
args: {
loading: true,
children: 'Loading...',
},
}
export const Disabled: Story = {
args: {
disabled: true,
children: 'Disabled',
},
}
MDX Documentation Story
{/* Button.mdx */}
import { Meta, Story, Canvas, Controls } from '@storybook/blocks'
import * as ButtonStories from './Button.stories'
<Meta of={ButtonStories} />
# Button
Versatile button component for user interactions.
## Overview
The Button component provides a consistent way to trigger actions throughout your application. It supports multiple variants, sizes, and states.
<Canvas of={ButtonStories.Primary} />
## Props
<Controls />
## Variants
Buttons come in four visual styles to indicate different levels of emphasis.
### Primary
Use for the main call-to-action on a page.
<Canvas of={ButtonStories.Primary} />
### Secondary
Use for secondary actions that complement the primary action.
<Canvas of={ButtonStories.Secondary} />
### Outline
Use for tertiary actions or to reduce visual weight.
<Canvas of={ButtonStories.Outline} />
### Ghost
Use for the least visual weight, often in toolbars or menus.
<Canvas of={ButtonStories.Ghost} />
## Sizes
Three sizes are available to fit different contexts.
<Canvas of={ButtonStories.Sizes} />
## States
### Loading
Shows a spinner when an async action is in progress.
<Canvas of={ButtonStories.Loading} />
### Disabled
Prevents interaction when an action is not available.
<Canvas of={ButtonStories.Disabled} />
## With Icons
Icons can be added to provide visual clarity.
<Canvas of={ButtonStories.WithIcon} />
## Accessibility
- Keyboard accessible with Enter and Space keys
- Focus indicator visible
- Disabled state properly communicated to screen readers
- Loading state announced to screen readers
## Best Practices
### ✅ Do
- Use primary buttons for main actions
- Keep button text concise (2-4 words)
- Use loading state for async actions
- Ensure minimum touch target size (44x44px)
### ❌ Don't
- Use too many primary buttons
- Use ambiguous labels like "Click here"
- Nest interactive elements
- Make buttons too small
## Examples
### Form Submission
```tsx
function Form() {
const [loading, setLoading] = useState(false)
const handleSubmit = async () => {
setLoading(true)
await submitForm()
setLoading(false)
}
return (
<Button
variant="primary"
loading={loading}
onClick={handleSubmit}
>
Submit
</Button>
)
}
Button Group
<div className="flex gap-2">
<Button variant="primary">Save</Button>
<Button variant="outline">Cancel</Button>
</div>
### Storybook Configuration
```typescript
// .storybook/main.ts
import type { StorybookConfig } from '@storybook/react-vite'
const config: StorybookConfig = {
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
addons: [
'@storybook/addon-links',
'@storybook/addon-essentials',
'@storybook/addon-interactions',
'@storybook/addon-a11y', // Accessibility addon
],
framework: {
name: '@storybook/react-vite',
options: {},
},
docs: {
autodocs: 'tag',
},
}
export default config
API Documentation
JSDoc Comments
/**
* Button component for user interactions.
*
* @example
* ```tsx
* <Button variant="primary" onClick={() => alert('Clicked!')}>
* Click me
* </Button>
* ```
*/
export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
/**
* Visual style variant
* @default 'primary'
*/
variant?: 'primary' | 'secondary' | 'outline' | 'ghost'
/**
* Button size
* @default 'md'
*/
size?: 'sm' | 'md' | 'lg'
/**
* Disables the button and prevents interaction
* @default false
*/
disabled?: boolean
/**
* Shows loading spinner and disables interaction
* @default false
*/
loading?: boolean
/**
* Button content
*/
children: ReactNode
/**
* Click event handler
*/
onClick?: (event: MouseEvent<HTMLButtonElement>) => void
}
TypeDoc Generation
// typedoc.json
{
"entryPoints": ["src/index.ts"],
"out": "docs/api",
"plugin": ["typedoc-plugin-markdown"],
"excludePrivate": true,
"excludeProtected": true,
"excludeExternals": true,
"readme": "README.md",
"categorizeByGroup": true,
"categoryOrder": [
"Components",
"Hooks",
"Utilities",
"Types"
]
}
Migration Guides
Version Upgrade Guide
# Migration Guide: v1.x to v2.0
## Breaking Changes
### 1. Button Component
#### Removed `color` prop
The `color` prop has been replaced with `variant` for clearer semantics.
**Before (v1.x):**
```tsx
<Button color="blue">Click me</Button>
After (v2.0):
<Button variant="primary">Click me</Button>
Renamed isLoading to loading
For consistency across components.
Before:
<Button isLoading>Submit</Button>
After:
<Button loading>Submit</Button>
2. Input Component
Changed validation prop structure
Validation props are now grouped in a single validation object.
Before:
<Input required error="Required field" />
After:
<Input validation={{ required: true, error: "Required field" }} />
New Features
ThemeProvider
v2.0 introduces a new theming system with light/dark mode support.
import { ThemeProvider } from '@myorg/ui-library'
function App() {
return (
<ThemeProvider>
<YourApp />
</ThemeProvider>
)
}
Compound Components
Many components now support compound component patterns.
<Select>
<Select.Trigger>Choose option</Select.Trigger>
<Select.Content>
<Select.Item value="1">Option 1</Select.Item>
<Select.Item value="2">Option 2</Select.Item>
</Select.Content>
</Select>
Deprecations
Alert Component
The type prop is deprecated in favor of variant.
// Deprecated (still works but will warn)
<Alert type="error">Error message</Alert>
// Recommended
<Alert variant="error">Error message</Alert>
Automated Migration
We provide a codemod to automate most changes:
npx @myorg/ui-library-codemod v1-to-v2 src/
Step-by-Step Migration
-
Update package version
npm install @myorg/ui-library@2.0.0 -
Run codemod
npx @myorg/ui-library-codemod v1-to-v2 src/ -
Review changes
- Check git diff
- Test your application
- Fix any remaining issues
-
Update imports (if needed)
// Some components moved import { Toast } from '@myorg/ui-library/feedback' -
Test thoroughly
- Run your test suite
- Manual QA testing
- Check for console warnings
Need Help?
## Documentation Best Practices
### Writing Style
1. **Clear and Concise**: Use simple language
2. **Examples First**: Show code before explaining
3. **Progressive Disclosure**: Basic → Advanced
4. **Consistent Formatting**: Use same patterns
5. **Scannable**: Use headings, lists, tables
### Content Structure
1. **Start with Why**: Explain purpose
2. **Quick Start**: Get users running fast
3. **Common Use Cases**: Cover 80% of usage
4. **API Reference**: Complete prop documentation
5. **Troubleshooting**: Address common issues
### Code Examples
1. **Complete**: Copy-paste ready
2. **Realistic**: Real-world scenarios
3. **Commented**: Explain non-obvious parts
4. **TypeScript**: Show type usage
5. **Tested**: Ensure examples work
### Accessibility
1. **Document a11y Features**: Keyboard, screen readers
2. **Provide Guidelines**: How to use accessibly
3. **Include ARIA**: Document ARIA usage
4. **Test Instructions**: How to verify a11y
### Maintenance
1. **Keep Updated**: Update with code changes
2. **Version Docs**: Document per version
3. **Deprecation Warnings**: Clear migration paths
4. **Changelog**: Track all changes
5. **Feedback Loop**: Improve based on questions
## Tools & Resources
### Documentation Tools
- **Storybook**: Component development and docs
- **TypeDoc**: Generate API docs from TypeScript
- **Docusaurus**: Documentation website builder
- **VitePress**: Fast static site generator
- **Markdoc**: Markdown-based documentation
### Storybook Addons
- **@storybook/addon-a11y**: Accessibility testing
- **@storybook/addon-essentials**: Core addons
- **@storybook/addon-interactions**: Test interactions
- **@storybook/addon-links**: Link stories
- **storybook-dark-mode**: Dark mode toggle
### Writing Tools
- **Grammarly**: Grammar checking
- **Hemingway**: Readability improvement
- **Vale**: Prose linting
- **markdownlint**: Markdown linting
## When to Use This Skill
Activate this skill when you need to:
- Write or update README files
- Create Storybook stories
- Generate API documentation
- Write usage guides
- Create migration guides
- Document component props
- Write tutorials
- Create examples
- Set up documentation site
- Improve existing docs
- Write contributing guidelines
## Output Format
When creating documentation, provide:
1. **Complete Documentation**: README, stories, guides
2. **Code Examples**: Working, tested examples
3. **Screenshots**: Visual aids where helpful
4. **Links**: Cross-references to related docs
5. **Metadata**: Version, last updated, authors
6. **Next Steps**: What to read next
Always prioritize clarity, completeness, and accessibility in documentation.
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon