---
name: layerchart
description: Expert guide for LayerChart, a Svelte component library for building diverse data visualizations (Cartesian, radial, hierarchical, geo, graph) with unopinionated building blocks, motion primitives, and advanced interactions.
keywords: [visualization, charts, svelte, layerchart, data-visualization]
disable-model-invocation: false
user-invocable: true
---
# LayerChart Skill
LayerChart is a comprehensive Svelte visualization framework built on Layer Cake, providing composable components for creating responsive, interactive charts across multiple visualization types.
## Core Architecture
LayerChart operates on a component-based, data-driven philosophy. The library provides three primary categories of components:
**Data-Driven Components** render visual marks directly from data (Area, Bars, Spline, Pie, Sunburst, Treemap, Sankey, etc.). These components automatically handle scale transformations through LayerCake's context.
**Motion-Enabled SVG Primitives** (Rect, Circle, Arc, Group, Line, Path) provide low-level drawing utilities with built-in Svelte transition support for animated data updates.
**Utility Components** handle legends, tooltips, pan/zoom interactions, annotations, and layout operations (hierarchy, geo projections).
## Visualization Types
- **Cartesian**: Bar, Area, Stack, Scatter, Histogram, ClevelandDotPlot, BarStack, BarGroup
- **Radial**: Pie, Arc, Sunburst, Threshold
- **Hierarchical**: Pack, Tree, Treemap, Partition
- **Graph**: Sankey, Link, Graph utilities
- **Geographic**: Choropleth, Spike Map, Bubble Map, GeoTile, GeoPath, StateMap, AnimatedGlobe, Globe projections (Mercator, Azimuthal, Equal Earth, etc.)
## Key Patterns
### Data Preparation
Use LayerChart's data transformation utilities before passing to visualizations:
- `stack()` - converts wide-format data into stacked series with baseline/top values
- `bin()` - groups data into histogram bins with x0/x1 bounds
- `groupLonger()` - pivots wide-format to long-format (one row per value)
- `flatten()` - flattens nested arrays one level, with optional accessor
- `calcExtents()` - calculates min/max across multiple fields, skipping nulls
### Component Composition
All LayerChart visualizations sit within a LayerCake wrapper that establishes scales and context. Child components access scales via Svelte's context API.
```svelte
```
### Interaction Patterns
- **Tooltips**: Position over data with snap-to-data options
- **Pan/Zoom**: Built-in context utilities for interactive navigation
- **Highlighting**: Hover states trigger visual emphasis (opacity, stroke changes)
- **Selection**: Use reactive variables and event handlers for interactive filtering
### Responsive Design
LayerChart automatically handles responsive layouts via `padding` configuration and container dimensions. Components reactively update when data or scales change.
## Common Implementation Tasks
**Bar Charts**: Use `Bars` component with `x` as categorical field. Stack with `BarStack` or group with `BarGroup` for multi-series.
**Time Series**: Configure `xScale={scaleTime()}` with temporal data. Use `AxisX` with `tickFormat` for readable date labels.
**Geographic Visualizations**: Select appropriate projection (Mercator for web maps, Azimuthal for polar), use `GeoPath` for boundaries, `Choropleth` for value mapping.
**High-Volume Data**: Render marks via Canvas instead of SVG for 5000+ points. Layer SVG axes/legends with Canvas for hybrid rendering.
**Stacked/Grouped Series**: Use `stack()` utility to transform data, then render via `AreaStack`/`BarStack` components.
## Performance Considerations
- Canvas rendering for 5000+ points (~60fps on modern hardware)
- SVG for interactive elements and animations (<500 points recommended)
- Hybrid approach: Canvas for marks + SVG for axes/legends
- Scale calculations are reactive—only update scales when data/domain changes
- Memoize expensive data transforms outside component lifecycle
## Styling and Customization
All primitive components support standard SVG/Canvas attributes (stroke, fill, opacity, strokeWidth). Use Svelte's reactive statements for conditional styling based on interaction state or data values.
Gradient fills, patterns, and clipping available via `ClipPath`, `RectClipPath`, `CircleClipPath` components with SVG ``.
## Integration Notes
- Works seamlessly with D3 scales (linear, time, ordinal, log, threshold)
- Supports multiple render contexts in same chart (SVG + Canvas + HTML)
- Fully accessible with ARIA attributes on SVG elements
- SSR-compatible for server-side rendering in SvelteKit
- Zero external dependencies beyond Svelte and d3-array utilities