# Hakushi v0.4.0 - Table of Contents

> Canvas for Phoenix: nodes of your own HEEx on an endless sheet, joined by edges, with every change checked on the server and live collaboration.

## Pages

- [Hakushi](readme.md)
- [Changelog](changelog.md)
- [Contributing to Hakushi](contributing.md)
- [Security](security.md)

- Guides
  - [Quickstart](quickstart.md)
  - [Nodes](nodes.md)
  - [Edges](edges.md)
  - [Groups](groups.md)
  - [Kits](kits.md)
  - [In a page](embedding.md)
  - [Layout and export](layout.md)
  - [Changes](changes.md)
  - [Collaboration](collaboration.md)
  - [Upgrading](upgrading.md)
  - [Navigation](navigation.md)
  - [Testing](testing.md)
  - [Theming](theming.md)

- Reference
  - [Accessibility](accessibility.md)
  - [Features](features.md)
  - [Known limits](limits.md)

## Modules

- [Hakushi.Issho](Hakushi.Issho.md): A shared canvas on [Issho](https://hex.pm/packages/issho): the canvas's
graph is a document of an Issho room, the canvas's LiveView is one of
the room's sessions, and Issho is the room's people and their cursors.
- [Hakushi.Issho.Place](Hakushi.Issho.Place.md): A place on a Hakushi canvas, in the canvas's own terms (never screen
pixels, as each person has their own pan and zoom): where a person's
pointer is, where an agent goes (`Issho.Motion`), what an app keeps of
them. Its format is part of Hakushi's public API, and only grows.

- Canvas
  - [Hakushi](Hakushi.md): Hakushi (白紙, "a blank sheet of paper") is a canvas for Phoenix: an
endless sheet that people pan and zoom, with nodes of your own HEEx on
it, joined by edges.
  - [Hakushi.Canvas](Hakushi.Canvas.md): The LiveComponent behind `Hakushi.Components.canvas/1`.
  - [Hakushi.Components](Hakushi.Components.md): Function components for the canvas.
  - [Hakushi.Live](Hakushi.Live.md): The `on_mount` hook of a LiveView with a shared canvas (`issho`), and the
app's own changes to a canvas.
  - [Hakushi.Messages](Hakushi.Messages.md): The words of the canvas: the labels of its controls, the reasons it
gives when it refuses a change, and the announcements for screen
readers.

- Kits
  - [Hakushi.Icons](Hakushi.Icons.md): The icons of the kits and of the embed frame: Lucide icons
(https://lucide.dev, ISC licence), drawn with strokes of `currentColor`,
as Kotoba's toolbar draws its own.
  - [Hakushi.Images](Hakushi.Images.md): The images of a canvas (`Hakushi.Kits.Images`), checked on the server
before they become nodes, and kept in the app's store with
[Storehouse](https://hexdocs.pm/storehouse).
  - [Hakushi.Ink](Hakushi.Ink.md): The geometry of a stroke of ink (`Hakushi.Kits.Ink`): its outline, as
the `d` of an SVG path, whose width follows the pen's pressure.
  - [Hakushi.Kit](Hakushi.Kit.md): A kit: the things of one kind of canvas, which the canvas draws, makes
and edits by itself. A canvas with `kits` needs no `:node` slots and no
`new_node` for them
  - [Hakushi.Kits.Flow](Hakushi.Kits.Flow.md): The kit of a flow: a trigger that starts it, steps, and conditions with
two ways out, joined by edges in the order they run.
  - [Hakushi.Kits.Images](Hakushi.Kits.Images.md): The kit of images on the paper: for a moodboard, a screenshot to mark
up, references beside a plan.
  - [Hakushi.Kits.Ink](Hakushi.Kits.Ink.md): The kit of ink: drawing on the paper with a pen, over anything on the
canvas (annotate, sketch, circle a node, write by hand), with a
highlighter, an eraser of whole strokes, and a lasso that selects
strokes and nodes alike.
  - [Hakushi.Kits.Notes](Hakushi.Kits.Notes.md): The kit of sticky notes: notes of a few colours, which people write in
place, resize by their corners and join with arrows.
  - [Hakushi.Kits.Schema](Hakushi.Kits.Schema.md): The kit of a database schema: tables, with columns that have a name, a
type and a key (primary or foreign), and foreign keys drawn from a
column to a column of the same type.
  - [Hakushi.Kits.Shapes](Hakushi.Kits.Shapes.md): The kit of plain shapes: rectangles, ellipses, diamonds, triangles, text
and lines, for diagrams, wireframes and whiteboards with no `:node` slot
of the app's.
  - [Hakushi.Mermaid](Hakushi.Mermaid.md): Helpers for kits that write their canvas as a Mermaid diagram in
Markdown, and read it back (`c:Hakushi.Kit.to_markdown/1`,
`c:Hakushi.Kit.from_markdown/1`).

- Graph
  - [Hakushi.Change](Hakushi.Change.md): A change to a canvas: what a person did, or what the app does.
  - [Hakushi.Edge](Hakushi.Edge.md): An edge of a canvas: a line from a handle of one node to a handle of
another.
  - [Hakushi.Graph](Hakushi.Graph.md): The nodes and edges of a canvas.
  - [Hakushi.Node](Hakushi.Node.md): A node of a canvas: a box at a place, drawn by the `:node` slot of its
`type`.
  - [Hakushi.Paper](Hakushi.Paper.md): The paper of a canvas: its pattern (`background`) and the size of its
squares (`grid`), which nodes snap to.
  - [Hakushi.Rules](Hakushi.Rules.md): The rules of the edges of a canvas, the same in the browser and on the
server.

- Storage
  - [Hakushi.Graph.Type](Hakushi.Graph.Type.md): An Ecto type for a whole canvas in one column: a `:map` (`jsonb` on
PostgreSQL, JSON text on SQLite and MySQL).

- Testing
  - [Hakushi.Test](Hakushi.Test.md): Helpers for `Phoenix.LiveViewTest`, to read and change the canvases of
a LiveView with no browser.

## Mix Tasks

- [mix hakushi.build](Mix.Tasks.Hakushi.Build.md): Builds the Hakushi canvas into `priv/static`.
- [mix hakushi.install](Mix.Tasks.Hakushi.Install.md): Sets up Hakushi in a Phoenix application.
- [mix hakushi.release_check](Mix.Tasks.Hakushi.ReleaseCheck.md): Checks the built files before a release of Hakushi.

