231 lines
6.0 KiB
Markdown
231 lines
6.0 KiB
Markdown
|
|
# 🎨 KomposeIcon Component Showcase
|
|||
|
|
|
|||
|
|
The **KomposeIcon** is a stunning, fully animated icon component converted from Vue to React for the Pivoine Docs Hub.
|
|||
|
|
|
|||
|
|
## 🌟 Visual Features
|
|||
|
|
|
|||
|
|
### Design Elements
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────┐
|
|||
|
|
│ ╔═══╗ ● │
|
|||
|
|
│ ║ │
|
|||
|
|
│ ║ │
|
|||
|
|
│ ║ K │
|
|||
|
|
│ ║ ╱ ╲ │
|
|||
|
|
│ ║ ╱ ╲ │
|
|||
|
|
│ ║ │
|
|||
|
|
│ ╚═══╝ │
|
|||
|
|
└─────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Components:**
|
|||
|
|
1. **Letter "K"**: Stylized with glowing emerald green gradients
|
|||
|
|
2. **Background**: Dark gradient with carbon fiber pattern
|
|||
|
|
3. **Status Indicator**: Pulsing green dot in bottom-right corner
|
|||
|
|
4. **Tech Corners**: Animated corner decorations
|
|||
|
|
5. **Glow Effects**: SVG filters for depth and dimension
|
|||
|
|
|
|||
|
|
## 🎭 Interactive States
|
|||
|
|
|
|||
|
|
### Default State
|
|||
|
|
- Subtle pulsing status dot
|
|||
|
|
- Soft green glow on the "K" letter
|
|||
|
|
- Professional drop shadow
|
|||
|
|
|
|||
|
|
### Hover State (when `interactive={true}`)
|
|||
|
|
- Icon scales up (1.05x) and lifts
|
|||
|
|
- Enhanced shadow and glow effects
|
|||
|
|
- Lines redraw with sliding animation
|
|||
|
|
- Status dot expands and pulses faster
|
|||
|
|
- Corner decorations animate in
|
|||
|
|
- Overall glow intensifies
|
|||
|
|
|
|||
|
|
### Click/Tap State
|
|||
|
|
- 3D flip rotation (360° on Y-axis)
|
|||
|
|
- Intense glow burst
|
|||
|
|
- Ripple effect emanates from center
|
|||
|
|
- Bounce animation
|
|||
|
|
- Duration: ~600ms
|
|||
|
|
|
|||
|
|
## 📱 Usage Examples
|
|||
|
|
|
|||
|
|
### Basic Usage (Default)
|
|||
|
|
```tsx
|
|||
|
|
import { KomposeIcon } from '@/components/icons'
|
|||
|
|
|
|||
|
|
<KomposeIcon />
|
|||
|
|
```
|
|||
|
|
Result: 192px interactive icon with all animations
|
|||
|
|
|
|||
|
|
### Small, Non-Interactive
|
|||
|
|
```tsx
|
|||
|
|
<KomposeIcon size="64px" interactive={false} />
|
|||
|
|
```
|
|||
|
|
Result: Smaller icon without hover/click effects (used in cards)
|
|||
|
|
|
|||
|
|
### Medium with Custom Class
|
|||
|
|
```tsx
|
|||
|
|
<KomposeIcon
|
|||
|
|
size="128px"
|
|||
|
|
className="my-custom-wrapper"
|
|||
|
|
/>
|
|||
|
|
```
|
|||
|
|
Result: Medium-sized icon with additional styling
|
|||
|
|
|
|||
|
|
### Large Hero Icon
|
|||
|
|
```tsx
|
|||
|
|
<KomposeIcon size="256px" />
|
|||
|
|
```
|
|||
|
|
Result: Large hero icon with full interactivity
|
|||
|
|
|
|||
|
|
## 🎨 Color Palette
|
|||
|
|
|
|||
|
|
```css
|
|||
|
|
Primary Green: #00DC82 /* Emerald green */
|
|||
|
|
Secondary Green: #00a86b /* Darker green */
|
|||
|
|
Background Dark: #1a1d2e /* Dark blue-gray */
|
|||
|
|
Background Deep: #0a0e27 /* Deeper blue-black */
|
|||
|
|
Pattern Dark: #060815 /* Very dark for carbon pattern */
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## ⚙️ Technical Details
|
|||
|
|
|
|||
|
|
### Animation Performance
|
|||
|
|
- **GPU Accelerated**: All animations use CSS transforms
|
|||
|
|
- **60 FPS**: Smooth performance on modern devices
|
|||
|
|
- **Optimized**: Minimal JavaScript, mostly CSS
|
|||
|
|
|
|||
|
|
### Browser Support
|
|||
|
|
✅ Chrome/Edge 90+
|
|||
|
|
✅ Firefox 88+
|
|||
|
|
✅ Safari 14+
|
|||
|
|
✅ Mobile browsers (iOS Safari, Chrome Mobile)
|
|||
|
|
|
|||
|
|
### Accessibility
|
|||
|
|
- ✅ Respects `prefers-reduced-motion`
|
|||
|
|
- ✅ Touch-optimized for mobile
|
|||
|
|
- ✅ Keyboard accessible (focusable when interactive)
|
|||
|
|
- ✅ Proper cursor states
|
|||
|
|
|
|||
|
|
### File Size
|
|||
|
|
- **Component**: ~8KB (uncompressed)
|
|||
|
|
- **Rendered**: Inline SVG, no external assets
|
|||
|
|
- **Runtime**: Minimal, ~2KB after gzip
|
|||
|
|
|
|||
|
|
## 🔄 Conversion from Vue
|
|||
|
|
|
|||
|
|
This component was expertly converted from Vue 3 to React:
|
|||
|
|
|
|||
|
|
| Vue Pattern | React Equivalent |
|
|||
|
|
|-------------|------------------|
|
|||
|
|
| `ref()` | `useState()` |
|
|||
|
|
| `@click` | `onClick` |
|
|||
|
|
| `@mouseenter` | `onMouseEnter` |
|
|||
|
|
| `:class="{}"` | `className={template}` |
|
|||
|
|
| `v-if` | `{condition && <JSX>}` |
|
|||
|
|
| `<style scoped>` | `<style jsx>` |
|
|||
|
|
|
|||
|
|
All functionality preserved, animations identical!
|
|||
|
|
|
|||
|
|
## 🎯 Integration in Landing Page
|
|||
|
|
|
|||
|
|
The icon is integrated into the landing page like this:
|
|||
|
|
|
|||
|
|
```tsx
|
|||
|
|
// In app/page.tsx
|
|||
|
|
{project.name === 'Kompose' ? (
|
|||
|
|
<div className="relative">
|
|||
|
|
<KomposeIcon size="64px" interactive={false} />
|
|||
|
|
</div>
|
|||
|
|
) : (
|
|||
|
|
<div className="p-3 rounded-xl bg-gradient-to-br">
|
|||
|
|
<BookOpen className="w-6 h-6 text-white" />
|
|||
|
|
</div>
|
|||
|
|
)}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Why `interactive={false}` in cards?**
|
|||
|
|
- Cards already have hover effects
|
|||
|
|
- Prevents animation conflicts
|
|||
|
|
- Maintains visual consistency
|
|||
|
|
- Still looks great as static icon
|
|||
|
|
|
|||
|
|
## 🚀 Performance Tips
|
|||
|
|
|
|||
|
|
1. **Use appropriate sizes**: Don't render at 256px if displaying at 64px
|
|||
|
|
2. **Disable interactivity when nested**: Prevent animation conflicts
|
|||
|
|
3. **Consider reduced motion**: Animations automatically disabled for accessibility
|
|||
|
|
4. **Lazy load if many icons**: Use dynamic imports for multiple custom icons
|
|||
|
|
|
|||
|
|
## 🎨 Customization Ideas
|
|||
|
|
|
|||
|
|
Want to customize? Here are some ideas:
|
|||
|
|
|
|||
|
|
### Change Colors
|
|||
|
|
Edit the gradient stops in the component:
|
|||
|
|
```tsx
|
|||
|
|
<stop offset="0%" style={{ stopColor: '#YOUR_COLOR' }} />
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Add More Effects
|
|||
|
|
Add new SVG filters or animations in the `<style jsx>` block
|
|||
|
|
|
|||
|
|
### Different Hover Behavior
|
|||
|
|
Modify the hover animations in the CSS keyframes
|
|||
|
|
|
|||
|
|
### Custom Sizes
|
|||
|
|
The component accepts any CSS size value:
|
|||
|
|
```tsx
|
|||
|
|
<KomposeIcon size="10rem" />
|
|||
|
|
<KomposeIcon size="20vh" />
|
|||
|
|
<KomposeIcon size="calc(100% - 40px)" />
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📸 Screenshots
|
|||
|
|
|
|||
|
|
**Default State:**
|
|||
|
|
- Clean, professional appearance
|
|||
|
|
- Subtle glow and shadow
|
|||
|
|
- Pulsing status indicator
|
|||
|
|
|
|||
|
|
**Hover State:**
|
|||
|
|
- Enhanced glow
|
|||
|
|
- Animated lines
|
|||
|
|
- Lifted appearance
|
|||
|
|
|
|||
|
|
**Click State:**
|
|||
|
|
- 3D rotation
|
|||
|
|
- Ripple effect
|
|||
|
|
- Flash animation
|
|||
|
|
|
|||
|
|
## 🔗 Related Files
|
|||
|
|
|
|||
|
|
- **Component**: `components/icons/KomposeIcon.tsx`
|
|||
|
|
- **Integration**: `app/page.tsx`
|
|||
|
|
- **Documentation**: `components/README.md`
|
|||
|
|
- **Original Vue**: `app/components/icons/KomposeIcon.vue`
|
|||
|
|
|
|||
|
|
## 💡 Pro Tips
|
|||
|
|
|
|||
|
|
1. Use `interactive={false}` in cards and grids
|
|||
|
|
2. Keep size between 48px - 256px for best results
|
|||
|
|
3. The icon works great on dark backgrounds
|
|||
|
|
4. Status dot indicates "active/online" state
|
|||
|
|
5. Pairs beautifully with emerald green accents
|
|||
|
|
|
|||
|
|
## 🎉 Result
|
|||
|
|
|
|||
|
|
A beautiful, performant, and highly polished icon that:
|
|||
|
|
- ✨ Catches the eye immediately
|
|||
|
|
- 🎯 Feels premium and modern
|
|||
|
|
- ⚡ Performs flawlessly
|
|||
|
|
- 📱 Works on all devices
|
|||
|
|
- ♿ Is fully accessible
|
|||
|
|
|
|||
|
|
Perfect for showcasing the Kompose documentation project! 🌸
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**Created with care by Claude for Valknar** | [pivoine.art](http://pivoine.art)
|