Komponenten
Datei-Struktur
Section titled “Datei-Struktur”/src/components/├── button/│ ├── Button.astro│ └── index.ts├── card/│ ├── Card.astro│ ├── CardHeader.astro│ └── index.tsAstro-Komponente
Section titled “Astro-Komponente”---interface Props { variant?: 'primary' | 'secondary'; size?: 'sm' | 'md' | 'lg'; disabled?: boolean;}
const { variant = 'primary', size = 'md', disabled = false } = Astro.props;---
<button class:list={['button', `button-${variant}`, `button-${size}`]} disabled={disabled}> <slot /></button>Naming:
- camelCase
- Boolean mit Verb:
isLoading,hasError - Events mit
on:onClick,onChange
Struktur:
interface Props { // Content children: React.ReactNode;
// Appearance variant?: "primary" | "secondary"; size?: "sm" | "md" | "lg";
// State isDisabled?: boolean; isLoading?: boolean;
// Events onClick?: (event: MouseEvent) => void;}.button { /* Base styles */ display: inline-flex; padding: var(--spacing-3) var(--spacing-4); border-radius: var(--border-radius-md);
/* Variant */ &-primary { background: var(--color-primary); color: white; }
/* Size */ &-lg { padding: var(--spacing-4) var(--spacing-6); }}Best Practices
Section titled “Best Practices”- TypeScript – Strikte Typisierung
- Design Tokens – Keine Hardcoded-Werte
- Accessibility – ARIA-Attribute wo nötig
- Composition – Komponenten kombinierbar
Komponenten sind implementiert – nutzt sie konsistent.