# Visualize v0.2.25 - Table of Contents

> Server-side SVG and canvas visualization for Phoenix LiveView, in the shape of D3.

## Pages

- [Visualize](readme.md)

- Guides
  - [Getting started](getting_started.md)
  - [LiveView](liveview.md)
  - [Designing charts](designing_charts.md)
  - [Cheatsheet](cheatsheet.md)

- Reference
  - [Visualize Usage Rules](usage-rules.md)
  - [Changelog](changelog.md)

- Specification
  - [Specification index](specification.md)
  - [Prior Art](00-prior-art.md)
  - [Goals and Scope](01-goals-and-scope.md)
  - [Architecture](02-architecture.md)
  - [Scales](03-scales.md)
  - [Shapes and Curves](04-shapes-and-curves.md)
  - [Axes and Formatting](05-axes-and-formatting.md)
  - [Layouts](06-layouts.md)
  - [Geography and Geometry](07-geo.md)
  - [Utilities](08-utilities.md)
  - [Rendering Backends](09-rendering-backends.md)
  - [LiveView Integration](10-liveview-integration.md)
  - [Public API](11-public-api.md)
  - [Testing and Conformance](12-testing-and-conformance.md)
  - [Decisions](13-decisions.md)
  - [Declarative chart layer](14-declarative-chart.md)

- Conformance
  - [API_SURFACE.md](api_surface.md)

## Modules

- [Visualize.Audit](Visualize.Audit.md): Cross-references what `spec/` declares against what `lib/` defines, and renders the
result as `API_SURFACE.md` through `Surfex.Golden`.
- [Visualize.Audit.CodeScan](Visualize.Audit.CodeScan.md): Every public function `lib/` defines, read from source without compiling it.
- [Visualize.Audit.Headings](Visualize.Audit.Headings.md): The heading discipline `spec/README.md` §5 asks for, checked mechanically: one `#` title,
a `**Status:**` line on line 3, and decimal numbering that is gap-free at every level
(`## 1.`, `### 1.1`, `#### 1.1.1`). A lost or duplicated heading breaks the citations
every other document and the golden's `Section` column rely on, and nobody notices by eye.

- [Visualize.Audit.SpecScan](Visualize.Audit.SpecScan.md): Every function the specification declares: each `` `Module.function/arity` `` in the first
cell of a table row under `spec/*.md`, with the numbered section it sits in.
- [Visualize.Data.FFT](Visualize.Data.FFT.md): The fast Fourier transform of a real or complex sequence (spec/08 §9, #375): a radix-2
Cooley–Tukey decimation in time over lists, `O(N log N)`, pure Elixir.
- [Visualize.Signals](Visualize.Signals.md): Generated sources (spec/08 §8): a chart under design has feeds that move without a host
supplying any.
- [Visualize.Specs.ForceSimulation](Visualize.Specs.ForceSimulation.md): The timer discipline of `Visualize.Layout.Force.Simulation` (spec/06 §9.4), as a model.
- [Visualize.Theme](Visualize.Theme.md): The colours, font and sizes a chart draws with (spec/08 §7).

- Facade
  - [Visualize](Visualize.md): Server-side SVG visualization library for Elixir.

- Declarative chart
  - [Visualize.Chart](Visualize.Chart.md): A chart as a design map (spec/14).
  - [Visualize.Chart.Applied](Visualize.Chart.Applied.md): A design applied to its data (spec/14 §7.3, §14.10).
  - [Visualize.Chart.Build](Visualize.Chart.Build.md): The builder for the declarative layer (spec/14 §16, D-78).
  - [Visualize.Chart.Builder](Visualize.Chart.Builder.md): An embeddable editor of typed fragments (spec/14 §18, §19).
  - [Visualize.Chart.Builder.Axes](Visualize.Chart.Builder.Axes.md): Axes ticked where their scale is (spec/14 §18.16, #373): the *axes* section of a mark's
page and of a scale's — one row per position scale, a box per side the scale can stand
on, a grid box, and a link to each axis's own page.
  - [Visualize.Chart.Builder.Bundle](Visualize.Chart.Builder.Bundle.md): A collection of entries that can cross from one store into another (spec/14 §19.7).
  - [Visualize.Chart.Builder.Document](Visualize.Chart.Builder.Document.md): The builder's import and export: the design's JSON form, in and out (spec/14 §18.12).
  - [Visualize.Chart.Builder.Editor](Visualize.Chart.Builder.Editor.md): The builder's fragment editor, generated from the schema (spec/14 §18.5-§18.7).
  - [Visualize.Chart.Builder.Fills](Visualize.Chart.Builder.Fills.md): A fill as a fill style (spec/14 §18.6): none, solid, a linear or a radial gradient.
  - [Visualize.Chart.Builder.Fonts](Visualize.Chart.Builder.Fonts.md): The font picker (spec/14 §19.10): family, size, face and anchor of the node being
edited, together, the way a drawing tool keeps them beside the canvas.
  - [Visualize.Chart.Builder.Glyphs](Visualize.Chart.Builder.Glyphs.md): The pictures a drawn enum is chosen by (spec/14 §18.6).
  - [Visualize.Chart.Builder.Inspector](Visualize.Chart.Builder.Inspector.md): The builder's inspector: `Visualize.Chart.explain/1` rendered (spec/14 §18.9).
  - [Visualize.Chart.Builder.Layers](Visualize.Chart.Builder.Layers.md): The builder's stack panel: the layers in precedence order (spec/14 §18.8).
  - [Visualize.Chart.Builder.Library](Visualize.Chart.Builder.Library.md): The builder's library: the store's fragments as a tree (spec/14 §18.16).
  - [Visualize.Chart.Builder.Masks](Visualize.Chart.Builder.Masks.md): The context panel over a layer — its key and its free variables (spec/14 §19.5,
§19.10) — and the rows of its mask, which the layer's row lists (§18.8, #316).
  - [Visualize.Chart.Builder.Page](Visualize.Chart.Builder.Page.md): A root tab as one page of sections (spec/14 §18.15, #249).
  - [Visualize.Chart.Builder.Palette](Visualize.Chart.Builder.Palette.md): The builder's style palette: the styles the stack declares, and how one is made
(spec/14 §18.14).
  - [Visualize.Chart.Builder.Params](Visualize.Chart.Builder.Params.md): The builder's parameters form: `Visualize.Chart.free_vars/1` rendered (spec/14 §18.11).
  - [Visualize.Chart.Builder.Picker](Visualize.Chart.Builder.Picker.md): The context panel as the picker for the selected field (spec/14 §19.10).
  - [Visualize.Chart.Builder.Place](Visualize.Chart.Builder.Place.md): Where a drop on the graph lands, and what a component means there (spec/14 §18.16).
  - [Visualize.Chart.Builder.Preview](Visualize.Chart.Builder.Preview.md): The builder's preview pane: the stacked design drawn, or its faults (spec/14 §18.4).
  - [Visualize.Chart.Builder.Scales](Visualize.Chart.Builder.Scales.md): The scales a design's bound channels need and the frame lacks (spec/14 §18.16, #370).
  - [Visualize.Chart.Builder.Sources](Visualize.Chart.Builder.Sources.md): The data page (spec/14 §19.10, #372): what the *sources* root shows — one row per source
of the composed design, its name, its columns with their types, and its generator while
designing (a `Visualize.Signals` signal under the source's name) or the host's rows.
  - [Visualize.Chart.Builder.Stack](Visualize.Chart.Builder.Stack.md): The builder's stack as a list of use sites, and the pure operations over it
(spec/14 §19.3, §19.6, §19.9).
  - [Visualize.Chart.Builder.Steps](Visualize.Chart.Builder.Steps.md): What a new chart still needs (spec/14 §18.4, #374): data, a mark, axes — the builder's
steps, never the validator's faults, so none blocks Save or Deploy nor badges a root.
`steps/1` reads the design; the preview draws them beneath the chart, each a button
that does or opens the step.
  - [Visualize.Chart.Builder.Store](Visualize.Chart.Builder.Store.md): The library of saved fragments a host may give `Visualize.Chart.Builder` (spec/14 §19.7).
  - [Visualize.Chart.Builder.StyleStack](Visualize.Chart.Builder.StyleStack.md): The stack of styles at one site (spec/14 §18.18).
  - [Visualize.Chart.Builder.Styles](Visualize.Chart.Builder.Styles.md): The builder's stylesheet, and the element that carries it (spec/14 §18.13).
  - [Visualize.Chart.Builder.Variables](Visualize.Chart.Builder.Variables.md): The variable panel (spec/14 §19.10): the composition's variables as chips, and what a
person does with them.
  - [Visualize.Chart.Compiled](Visualize.Chart.Compiled.md): A design compiled for rendering per tick (spec/14 §12, D-66).
  - [Visualize.Chart.Composite](Visualize.Chart.Composite.md): A fragment whose content is a list of use sites, and how it becomes a design
(spec/14 §19.6, D-103).
  - [Visualize.Chart.Fragment](Visualize.Chart.Fragment.md): What a fragment is about, and the ids it refers to (spec/14 §19.2, §19.8).
  - [Visualize.Chart.Frame](Visualize.Chart.Frame.md): The realised frame of a chart: its scales, built once, and the static furniture —
grid, axes, legend and labels — rendered from them (spec/14 §4, D-60).
  - [Visualize.Chart.Mark](Visualize.Chart.Mark.md): The marks of a design drawn through the frame's scales (spec/14 §5, D-61).
  - [Visualize.Chart.Mark.Bend](Visualize.Chart.Mark.Bend.md): The polar transform (spec/14 §5.2, #391): a mark laid out in `(angle, r)` — every `x` an
angle in radians clockwise from 12 o'clock, every `y` a radius from the centre — bent
around the arc.
  - [Visualize.Chart.Migration](Visualize.Chart.Migration.md): Schema versions and the migrations between them (spec/14 §9).
  - [Visualize.Chart.Presets](Visualize.Chart.Presets.md): The ten LiveView components as stored designs (spec/14 §15, D-64).
  - [Visualize.Chart.Refs](Visualize.Chart.Refs.md): Reference resolution as one rule (spec/14 §19.6, D-103): every library id at a
reference site of a flat design is resolved through a store, so that what leaves
`Visualize.Chart.flatten/2` carries no ids and what the frame draws needs no store.
  - [Visualize.Chart.Schema](Visualize.Chart.Schema.md): The design schema as data (spec/14 §14.2).
  - [Visualize.Chart.Style](Visualize.Chart.Style.md): Style resolution for the declarative layer (spec/14 §3.4, D-63): one style node, two
outputs by the mode of the render target.
  - [Visualize.Chart.Text](Visualize.Chart.Text.md): A text as one string with interpolation (spec/14 §7.1): `"Uptime for #{var(:host)}"`.
  - [Visualize.Chart.Transform](Visualize.Chart.Transform.md): The data pipeline of a mark (spec/14 §5.4, D-62): filtering, binning, stacking,
aggregation, the layouts of `Visualize.Layout` and the geo algorithms as `%{op: …}`
steps over rows.
  - [Visualize.Chart.Use](Visualize.Chart.Use.md): A fragment used at a position (spec/14 §19.3, D-101).
  - [Visualize.Chart.Validator](Visualize.Chart.Validator.md): Validates a design map against the schema (spec/14 §10).
  - [Visualize.Chart.Var](Visualize.Chart.Var.md): A variable in a design (spec/14 §7.1).

- Scales
  - [Visualize.Scale](Visualize.Scale.md): Scale functions that map from a data domain to a visual range.
  - [Visualize.Scale.Band](Visualize.Scale.Band.md): A discrete scale that divides the range into uniform bands.
  - [Visualize.Scale.Behaviour](Visualize.Scale.Behaviour.md): The protocol every scale module implements (spec/03 §1.3).
  - [Visualize.Scale.Color](Visualize.Scale.Color.md): Color scales for encoding data with colors.
  - [Visualize.Scale.Linear](Visualize.Scale.Linear.md): A continuous linear scale that maps a numeric domain to a numeric range.
  - [Visualize.Scale.Log](Visualize.Scale.Log.md): A logarithmic scale for data with exponential distributions.
  - [Visualize.Scale.Ordinal](Visualize.Scale.Ordinal.md): A discrete scale that maps categorical values to a discrete range.
  - [Visualize.Scale.Power](Visualize.Scale.Power.md): Power scale for non-linear transformations.
  - [Visualize.Scale.Quantile](Visualize.Scale.Quantile.md): Quantile scale for mapping sorted data to discrete buckets.
  - [Visualize.Scale.Quantize](Visualize.Scale.Quantize.md): Quantize scale for mapping continuous values to discrete buckets.
  - [Visualize.Scale.Radial](Visualize.Scale.Radial.md): An angle scale: a cyclic domain — bearing, hour of day, day of year — to radians
(spec/03 §14, D-30).
  - [Visualize.Scale.Symlog](Visualize.Scale.Symlog.md): Symmetric log scale for data spanning orders of magnitude including zero.
  - [Visualize.Scale.Threshold](Visualize.Scale.Threshold.md): Threshold scale for mapping continuous values to discrete outputs.
  - [Visualize.Scale.Time](Visualize.Scale.Time.md): A scale for temporal data (DateTime, Date, NaiveDateTime).

- Shapes
  - [Visualize.Shape](Visualize.Shape.md): Shape generators for creating SVG paths from data.
  - [Visualize.Shape.Arc](Visualize.Shape.Arc.md): Arc generator for creating circular or annular sectors.
  - [Visualize.Shape.Area](Visualize.Shape.Area.md): Area generator for creating filled areas between two lines.
  - [Visualize.Shape.Band](Visualize.Shape.Band.md): Band generator: a state timeline of one rectangle per datum (spec/04 §11, D-26).
  - [Visualize.Shape.Curve](Visualize.Shape.Curve.md): Curve interpolators for line and area generators.
  - [Visualize.Shape.Line](Visualize.Shape.Line.md): Line generator for creating SVG paths from data points.
  - [Visualize.Shape.LineNx](Visualize.Shape.LineNx.md): Nx-accelerated line generator for high-performance path generation.
  - [Visualize.Shape.Needle](Visualize.Shape.Needle.md): Needle generator: one filled pointer per datum from the hub to its angle, as long as
its length — a gauge's indicator, a compass needle (spec/04 §16, #392).
  - [Visualize.Shape.PercentileBand](Visualize.Shape.PercentileBand.md): Percentile-band generator: a median line with an inner and an outer band around it
(spec/04 §14, D-28).
  - [Visualize.Shape.Pie](Visualize.Shape.Pie.md): Pie layout generator that computes angles for pie and donut charts.
  - [Visualize.Shape.Rose](Visualize.Shape.Rose.md): Rose generator: one `Visualize.Shape.Arc` sector per datum, centred on its angle and
as long as its value (spec/04 §15, D-31).
  - [Visualize.Shape.Rule](Visualize.Shape.Rule.md): Rule generator: a vertical line at a domain x value, with an optional label
(spec/04 §12, D-27).
  - [Visualize.Shape.Stack](Visualize.Shape.Stack.md): Stack generator for creating stacked bar and area charts.
  - [Visualize.Shape.Symbol](Visualize.Shape.Symbol.md): Symbol generator for categorical point marks.
  - [Visualize.Shape.XBand](Visualize.Shape.XBand.md): X-band generator: a shaded region between two domain x values, with an optional label
(spec/04 §13, D-27).

- Axes and formatting
  - [Visualize.Axis](Visualize.Axis.md): Axis generator for creating reference marks and labels.
  - [Visualize.Format](Visualize.Format.md): Number and time formatting utilities for chart labels.

- Layouts
  - [Visualize.Layout.Chord](Visualize.Layout.Chord.md): Chord diagram layout for visualizing relationships between groups.
  - [Visualize.Layout.Cluster](Visualize.Layout.Cluster.md): Cluster layout algorithm for dendrogram visualizations.
  - [Visualize.Layout.Force](Visualize.Layout.Force.md): Force-directed graph layout.
  - [Visualize.Layout.Force.Forces](Visualize.Layout.Force.Forces.md): Force functions for the force simulation.
  - [Visualize.Layout.Force.Simulation](Visualize.Layout.Force.Simulation.md): Force-directed graph layout simulation using velocity Verlet integration.
  - [Visualize.Layout.Hexbin](Visualize.Layout.Hexbin.md): Hexagonal binning of points in the plane (spec/06 §9, #348): d3-hexbin's lattice of
flat-topped hexagons, the columns `2 r sin(π/3)` apart and the rows `1.5 r`, every odd
row offset by half a column. The lattice is in the coordinates of the points, so a chart
bins pixels.
  - [Visualize.Layout.Hierarchy](Visualize.Layout.Hierarchy.md): Hierarchical data structure for tree-based visualizations.
  - [Visualize.Layout.Pack](Visualize.Layout.Pack.md): Circle packing layout for hierarchical data.
  - [Visualize.Layout.Partition](Visualize.Layout.Partition.md): Partition layout for adjacency diagrams.
  - [Visualize.Layout.Sankey](Visualize.Layout.Sankey.md): Sankey diagram layout for visualizing flow between nodes.
  - [Visualize.Layout.Tree](Visualize.Layout.Tree.md): Tree layout algorithm for hierarchical node-link diagrams.
  - [Visualize.Layout.Treemap](Visualize.Layout.Treemap.md): Treemap layout for hierarchical data as nested rectangles.

- Geo
  - [Visualize.Contour](Visualize.Contour.md): Contour generation using the marching squares algorithm.
  - [Visualize.Contour.Density](Visualize.Contour.Density.md): Kernel density estimation for contour generation from point data.
  - [Visualize.Geo.Circle](Visualize.Geo.Circle.md): A circle on the sphere as a GeoJSON `Polygon`: d3-geo's `geoCircle` (spec/07 §2.5, D-131).
  - [Visualize.Geo.Delaunay](Visualize.Geo.Delaunay.md): Delaunay triangulation for a set of points.
  - [Visualize.Geo.Path](Visualize.Geo.Path.md): Renders GeoJSON geometries as SVG path strings.
  - [Visualize.Geo.Projection](Visualize.Geo.Projection.md): Geographic projections for mapping spherical coordinates to a plane.
  - [Visualize.Geo.Projection.Azimuthal](Visualize.Geo.Projection.Azimuthal.md): Azimuthal projections: orthographic, stereographic, gnomonic, Lambert azimuthal equal-area and azimuthal equidistant.
  - [Visualize.Geo.Projection.Compromise](Visualize.Geo.Projection.Compromise.md): Compromise and polyconic world projections: Natural Earth, Equal Earth, Robinson, Winkel tripel, Aitoff and Van der Grinten.
  - [Visualize.Geo.Projection.Conic](Visualize.Geo.Projection.Conic.md): Conic and pseudoconic projections: Albers, Lambert conformal conic, conic equal-area, conic equidistant, American polyconic and Bonne.
  - [Visualize.Geo.Projection.Cylindrical](Visualize.Geo.Projection.Cylindrical.md): Cylindrical projections: Mercator, transverse Mercator, equirectangular, Lambert cylindrical equal-area, Miller and Gall-Peters.
  - [Visualize.Geo.Projection.Pseudocylindrical](Visualize.Geo.Projection.Pseudocylindrical.md): Pseudocylindrical projections: Mollweide, sinusoidal, Eckert I-VI, Hammer, Kavrayskiy VII, Wagner IV and VI, Fahey, Collignon and loximuthal.
  - [Visualize.Geo.Tiles](Visualize.Geo.Tiles.md): The arithmetic of a Web-Mercator basemap (spec/07 §8, #475): the zoom level whose
256-pixel tiles match a Mercator projection, the tiles covering a plot, where each
goes in plot pixels, and its URL.
  - [Visualize.Geo.Voronoi](Visualize.Geo.Voronoi.md): Voronoi diagram for spatial partitioning.
  - [Visualize.Polygon](Visualize.Polygon.md): Utilities for working with polygons.

- Utilities
  - [Visualize.Color](Visualize.Color.md): Color manipulation utilities for parsing, converting, and manipulating colors.
  - [Visualize.Data](Visualize.Data.md): Data transformation and statistical utilities.
  - [Visualize.Data.Table](Visualize.Data.Table.md): Tabular data as the row list the generators consume.
  - [Visualize.Ease](Visualize.Ease.md): Easing functions for smooth animations and transitions.
  - [Visualize.Interpolate](Visualize.Interpolate.md): Interpolation functions for smooth transitions between values.
  - [Visualize.Random](Visualize.Random.md): Random number generators for various probability distributions.

- IR and rendering
  - [Visualize.Backend](Visualize.Backend.md): Behaviour defining the interface for rendering backends.
  - [Visualize.Backend.Canvas](Visualize.Backend.Canvas.md): Canvas 2D API rendering backend.
  - [Visualize.Backend.Canvas.Arc](Visualize.Backend.Canvas.Arc.md): Converts an SVG arc command to a Canvas `ellipse` call.
  - [Visualize.Backend.CanvasBinary](Visualize.Backend.CanvasBinary.md): Binary encoding for Canvas 2D rendering commands.
  - [Visualize.Backend.CanvasBinary.Decoder](Visualize.Backend.CanvasBinary.Decoder.md): A decoder for the canvas binary format of spec/09 §4 and §5, written against the record
layouts the specification states — not against the encoder — so that
`decode(encode(x))` is a genuine round trip (D-36).
  - [Visualize.Backend.CanvasBinary.Opcodes](Visualize.Backend.CanvasBinary.Opcodes.md): Command bytes of the canvas binary format, shared by every encoder module.
  - [Visualize.Backend.CanvasBinary.PathEncoder](Visualize.Backend.CanvasBinary.PathEncoder.md): Encodes the path records of the canvas binary format — the point list (`path`,
`path32`) and the full command stream (`path_cubic`, `path_cubic32`) in either
coordinate width, and the f32 cubic run (`cubic_run`) (spec/09 §4.3, §4.5) — and the
number coercion the SVG and IR encoders share.

  - [Visualize.Backend.CanvasBinary.SVG](Visualize.Backend.CanvasBinary.SVG.md): Encodes `Visualize.SVG.Element` trees into the canvas binary format: element geometry,
presentation attributes, `transform` strings and `d` path strings.

  - [Visualize.Backend.CanvasIncremental](Visualize.Backend.CanvasIncremental.md): Incremental rendering support for canvas binary format.
  - [Visualize.Backend.Hybrid](Visualize.Backend.Hybrid.md): Hybrid SVG/Canvas backend for optimized rendering.
  - [Visualize.Backend.SVG](Visualize.Backend.SVG.md): SVG rendering backend.
  - [Visualize.Benchmark](Visualize.Benchmark.md): Performance benchmarking utilities for comparing rendering backends.
  - [Visualize.IR.Element](Visualize.IR.Element.md): Backend-agnostic element representation for building scene graphs.
  - [Visualize.IR.Path](Visualize.IR.Path.md): Backend-agnostic path command representation.
  - [Visualize.IR.Transform](Visualize.IR.Transform.md): Backend-agnostic transformation representation.
  - [Visualize.Incremental](Visualize.Incremental.md): High-level API for incremental canvas rendering with scroll optimization.
  - [Visualize.Render](Visualize.Render.md): Main entry point for rendering visualizations.

- SVG elements
  - [Visualize.SVG](Visualize.SVG.md): Main SVG module providing a fluent API for building SVG documents.
  - [Visualize.SVG.Element](Visualize.SVG.Element.md): Represents an SVG element as an Elixir data structure.
  - [Visualize.SVG.Path](Visualize.SVG.Path.md): SVG path command builder.
  - [Visualize.SVG.Renderer](Visualize.SVG.Renderer.md): Renders SVG elements to strings or iolists.

- LiveView
  - [Visualize.Components](Visualize.Components.md): Phoenix LiveView function components for the common chart types (spec/10 §2).
  - [Visualize.Components.Tree](Visualize.Components.Tree.md): Phoenix LiveView function components for hierarchies (spec/10 §3): a node-link tree,
a treemap and a sunburst.
  - [Visualize.Hooks](Visualize.Hooks.md): Phoenix LiveView JavaScript hooks for interactive visualizations.
  - [Visualize.Hooks.Brush](Visualize.Hooks.Brush.md): Phoenix LiveView hook for brush selection interactions.
  - [Visualize.Hooks.Builder](Visualize.Hooks.Builder.md): Phoenix LiveView hook for the chart builder's two browser gestures (spec/10 §16).
  - [Visualize.Hooks.Canvas](Visualize.Hooks.Canvas.md): Phoenix LiveView hook that replays Canvas 2D commands on a `<canvas>`.
  - [Visualize.Hooks.CanvasBinary](Visualize.Hooks.CanvasBinary.md): Phoenix LiveView hook that replays the canvas binary format on a `<canvas>`.
  - [Visualize.Hooks.CanvasIncremental](Visualize.Hooks.CanvasIncremental.md): Phoenix LiveView hook for scroll-and-copy incremental canvas rendering.
  - [Visualize.Hooks.Crosshair](Visualize.Hooks.Crosshair.md): Phoenix LiveView hook that snaps a rule and per-series markers to the nearest x of
the data (spec/10 §13).
  - [Visualize.Hooks.Legend](Visualize.Hooks.Legend.md): Phoenix LiveView hook that hides and shows a series from its legend entry (spec/10 §14).
  - [Visualize.Hooks.Resize](Visualize.Hooks.Resize.md): Phoenix LiveView hook that reports a container's size to the LiveView (spec/10 §10).
  - [Visualize.Hooks.Sync](Visualize.Hooks.Sync.md): The bus a sync group's tooltips and crosshairs share hover over, and its brushes the brushed
window (spec/10 §4.3, §6.4, D-116, D-117).
  - [Visualize.Hooks.Tooltip](Visualize.Hooks.Tooltip.md): Phoenix LiveView hook that shows a datum's fields under the pointer (spec/10 §12).
  - [Visualize.Hooks.Zoom](Visualize.Hooks.Zoom.md): Phoenix LiveView hook for zoom and pan interactions.

## Mix Tasks

- [mix vis.headings](Mix.Tasks.Vis.Headings.md): Fails when any document under `spec/` breaks the heading discipline: more or fewer than one
`#` title, no `**Status:**` line on line 3, an unnumbered heading, a number that does not
match its level, or a gap or duplicate in the decimal numbering.
- [mix vis.surface](Mix.Tasks.Vis.Surface.md): Cross-references every function `spec/` declares against every public function `lib/`
defines, and renders the result to `API_SURFACE.md`.

