
ui-component-design
by FAeN399
SKILL.md
name: ui-component-design description: Create reusable, modular UI components with HTML, CSS, and JavaScript. Build component libraries with consistent styling, variants, states, and documentation. Focuses on component architecture, reusability, and maintainability.
UI Component Design
Build reusable, modular UI components for scalable web applications. Create component libraries with consistent patterns, variants, and comprehensive documentation.
Overview
This skill creates production-ready UI components:
- Reusable component architecture
- Component variants and states
- Props/configuration patterns
- Consistent naming conventions
- Accessibility built-in
- Documentation and examples
- Common UI patterns (buttons, cards, modals, inputs, etc.)
Usage
Trigger this skill with queries like:
- "Create a reusable button component"
- "Build a card component with variants"
- "Design an input component with validation states"
- "Create a modal component library"
- "Build a navigation component system"
- "Design a data table component"
Component Architecture
Base Component Structure
<!-- component.html -->
<div class="c-component c-component--variant" data-component="example">
<div class="c-component__header">
<h3 class="c-component__title">Title</h3>
</div>
<div class="c-component__body">
Content
</div>
<div class="c-component__footer">
Footer
</div>
</div>
Component CSS (BEM Methodology)
/* component.css */
.c-component {
/* Base styles */
display: block;
padding: 1rem;
border: 1px solid var(--border-color);
border-radius: var(--border-radius);
}
/* Variants */
.c-component--primary {
background: var(--primary-color);
color: white;
}
.c-component--secondary {
background: var(--secondary-color);
}
/* Elements */
.c-component__header {
margin-bottom: 0.5rem;
}
.c-component__title {
font-size: 1.25rem;
font-weight: 600;
}
/* States */
.c-component[data-state="loading"] {
opacity: 0.6;
pointer-events: none;
}
.c-component[data-state="error"] {
border-color: var(--error-color);
}
Component JavaScript
// component.js
class Component {
constructor(element, options = {}) {
this.element = element;
this.options = {
variant: 'default',
disabled: false,
...options
};
this.init();
}
init() {
this.applyOptions();
this.attachEvents();
}
applyOptions() {
if (this.options.variant) {
this.element.classList.add(`c-component--${this.options.variant}`);
}
if (this.options.disabled) {
this.disable();
}
}
attachEvents() {
// Component-specific event handlers
}
disable() {
this.element.setAttribute('disabled', '');
this.element.setAttribute('aria-disabled', 'true');
}
enable() {
this.element.removeAttribute('disabled');
this.element.setAttribute('aria-disabled', 'false');
}
destroy() {
// Cleanup
}
}
// Factory function
function createComponent(selector, options) {
const elements = document.querySelectorAll(selector);
return Array.from(elements).map(el => new Component(el, options));
}
Core Component Library
Button Component
<button class="c-btn c-btn--primary c-btn--lg" type="button">
<span class="c-btn__icon">→</span>
<span class="c-btn__text">Click me</span>
</button>
Variants: primary, secondary, outline, ghost, danger Sizes: sm, md, lg, xl States: default, hover, active, disabled, loading
Card Component
<div class="c-card c-card--elevated">
<img class="c-card__image" src="image.jpg" alt="Description">
<div class="c-card__content">
<h3 class="c-card__title">Card Title</h3>
<p class="c-card__description">Description text</p>
</div>
<div class="c-card__actions">
<button class="c-btn c-btn--primary">Action</button>
</div>
</div>
Variants: flat, elevated, outlined Layouts: vertical, horizontal, media-left, media-right
Input Component
<div class="c-input" data-state="default">
<label class="c-input__label" for="email">Email</label>
<div class="c-input__wrapper">
<input
class="c-input__field"
type="email"
id="email"
placeholder="you@example.com"
aria-describedby="email-help">
<span class="c-input__icon">@</span>
</div>
<span class="c-input__help" id="email-help">Enter your email address</span>
<span class="c-input__error" role="alert">Invalid email format</span>
</div>
States: default, focus, success, error, disabled Types: text, email, password, number, textarea, select
Modal Component
<div class="c-modal" role="dialog" aria-modal="true" aria-labelledby="modal-title">
<div class="c-modal__overlay" data-dismiss="modal"></div>
<div class="c-modal__container">
<div class="c-modal__header">
<h2 class="c-modal__title" id="modal-title">Modal Title</h2>
<button class="c-modal__close" aria-label="Close modal">×</button>
</div>
<div class="c-modal__body">
Modal content
</div>
<div class="c-modal__footer">
<button class="c-btn c-btn--secondary">Cancel</button>
<button class="c-btn c-btn--primary">Confirm</button>
</div>
</div>
</div>
Variants: small, medium, large, fullscreen Features: backdrop click, escape key, focus trap, scroll lock
Navigation Component
<nav class="c-nav c-nav--horizontal" role="navigation">
<a class="c-nav__item c-nav__item--active" href="#" aria-current="page">Home</a>
<a class="c-nav__item" href="#">About</a>
<div class="c-nav__item c-nav__item--dropdown">
<button class="c-nav__toggle" aria-expanded="false">Services</button>
<div class="c-nav__submenu">
<a class="c-nav__subitem" href="#">Service 1</a>
<a class="c-nav__subitem" href="#">Service 2</a>
</div>
</div>
</nav>
Layouts: horizontal, vertical, sidebar Features: dropdowns, mobile toggle, active states
Component Documentation Template
# Component Name
## Description
Brief description of what the component does.
## Usage
\`\`\`html
<!-- Basic example -->
\`\`\`
## Props/Options
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| variant | string | 'default' | Visual variant |
| size | string | 'md' | Size option |
| disabled | boolean | false | Disable state |
## Variants
- default
- primary
- secondary
## States
- default
- hover
- active
- disabled
- loading
## Accessibility
- ARIA attributes used
- Keyboard navigation support
- Screen reader considerations
## Examples
[Multiple usage examples]
## Browser Support
Modern browsers (Chrome 90+, Firefox 88+, Safari 14+)
Bundled Resources
Scripts
scripts/component_generator.py - Generates component boilerplate
- Creates HTML, CSS, and JS files
- Applies naming conventions
- Generates documentation template
Usage:
python scripts/component_generator.py ButtonGroup
scripts/component_validator.py - Validates component structure
- Checks BEM naming conventions
- Validates accessibility attributes
- Ensures documentation exists
References
references/bem_methodology.md - BEM naming convention guide and best practices
references/component_patterns.md - Common UI component patterns and implementations
references/accessibility_components.md - Building accessible components with ARIA
references/css_architecture.md - CSS organization strategies for component libraries
Best Practices
Naming Conventions
- Use BEM methodology:
.c-component__element--modifier - Prefix components with
c-for clarity - Use semantic, descriptive names
- Keep names consistent across HTML, CSS, JS
Component Structure
- Single responsibility principle
- Composable and reusable
- Configuration over modification
- Consistent API across components
Styling
- Use CSS custom properties for theming
- Avoid global styles within components
- Scope styles to component
- Support variants and states
JavaScript
- Progressive enhancement
- Event delegation where appropriate
- Clean up on destroy
- Consistent initialization API
Accessibility
- Include ARIA attributes
- Keyboard navigation support
- Focus management
- Screen reader announcements
Documentation
- Document all props/options
- Provide usage examples
- List variants and states
- Note browser support
Component Checklist
- HTML structure follows BEM
- CSS scoped to component
- JavaScript initialization works
- All variants implemented
- All states styled
- Accessibility attributes added
- Keyboard navigation works
- Responsive design applied
- Documentation created
- Examples provided
- Browser testing complete
When to Use This Skill
Use ui-component-design when:
- Building component libraries
- Creating reusable UI patterns
- Need consistent design implementation
- Scaling web applications
- Team collaboration requires shared components
Choose other skills for:
- Single-page designs (use html-static-design)
- Layout-focused work (use css-layout-builder)
- Adding interactions (use javascript-interactive-design)
- Complete design systems (use design-system-builder)
Component Library Structure
components/
├── buttons/
│ ├── button.html
│ ├── button.css
│ ├── button.js
│ └── button.md
├── cards/
│ ├── card.html
│ ├── card.css
│ ├── card.js
│ └── card.md
├── forms/
│ ├── input.html
│ ├── input.css
│ ├── input.js
│ └── input.md
└── index.html (component showcase)
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon