# Svelte 5 Component Patterns
## 📦 Component Structure Template
Every Svelte component should follow this structure:
```svelte
```
---
## 🎨 Pattern 1: Presentational Components
Pure UI components with no business logic.
```svelte
{#if header}
{:else if title}
{/if}
{@render children()}
{#if footer}
{/if}
```
---
## 🔧 Pattern 2: Container Components
Components that manage state and pass it down.
```svelte
{#each filteredTodos as todo (todo.id)}
toggleTodo(todo.id)}
ondelete={() => deleteTodo(todo.id)}
/>
{/each}
```
---
## 🔄 Pattern 3: Controlled Components
Components where parent controls the value.
```svelte
{#if open}
{#each options as option (option.value)}
-
{/each}
{/if}
```
---
## 🎭 Pattern 4: Compound Components
Related components that work together.
```svelte
{@render children()}
{@render children()}
{#if isActive}
{@render children()}
{/if}
```
---
## 🔀 Pattern 5: Render Props with Snippets
Pass rendering control to parent.
```svelte
{#if items.length === 0}
{#if renderEmpty}
{@render renderEmpty()}
{:else}
No items
{/if}
{:else}
{#each items as item, index (index)}
-
{@render renderItem(item, index)}
{/each}
{/if}
```
---
## 🎛️ Pattern 6: Form Components
Accessible, validated form inputs.
```svelte
```
---
## 🚦 Pattern 7: Loading States
Handle async data gracefully.
```svelte
{#await promise}
{#if loading}
{@render loading()}
{:else}
Loading...
{/if}
{:then data}
{@render children(data)}
{:catch err}
{#if error}
{@render error(err)}
{:else}
Error: {err.message}
{/if}
{/await}
```
---
## ♿ Pattern 8: Accessible Modal
Focus trap and keyboard handling.
```svelte
{#if open}
{/if}
```