# harlock v0.6.0 - Table of Contents

> A pure-Elixir TUI framework for Unix terminals. TEA-style model / update /
view loop on top of OTP, with first-class focus traversal, layout
constraints, ANSI cell-diff rendering, and a thin termios NIF for direct
/dev/tty control.

## Pages

- [Harlock](readme.md)
- [Harlock Roadmap](roadmap.md)
- [Changelog](changelog.md)
- [LICENSE](license.md)
- [Termios NIF](termios_nif.md)

## Modules

- [Harlock.Element](Harlock.Element.md): A node in the view tree returned by an app's `view/1`. Plain struct, no
macros — built via the constructor functions in `Harlock.Elements`
(`text/2`, `vbox/1`, `box/1`, etc.).
- [Harlock.Layout](Harlock.Layout.md): Ratatui-style constraint layout solver.
- [Harlock.Layout.Rect](Harlock.Layout.Rect.md): A rectangle in cell coordinates, returned by `Harlock.Layout.split/3`.
- [Harlock.Menu](Harlock.Menu.md): Key-event helper for the `Harlock.Elements.menu/1` widget.
- [Harlock.Render.Buffer](Harlock.Render.Buffer.md): A 2D grid of cells of fixed dimensions, returned by `Harlock.Test.cells/1`.
- [Harlock.Render.Cell](Harlock.Render.Cell.md): A single terminal cell.
- [Harlock.Select](Harlock.Select.md): Key-event helper for the `Harlock.Elements.select/1` dropdown.
- [Harlock.Sub.Logger](Harlock.Sub.Logger.md): `:logger` handler behind `Harlock.Sub.logger/1`, plus the helper for turning a
delivered entry into text.
- [Harlock.Terminal.Termios](Harlock.Terminal.Termios.md): POSIX termios access for `/dev/tty` via a small NIF.
- [Harlock.Tree](Harlock.Tree.md): Projection and key-event helpers for the `Harlock.Elements.tree/1` widget.
- [Harlock.UndoStack](Harlock.UndoStack.md): Bounded undo/redo history for a `(value, cursor)` pair, held by the app.

- Apps
  - [Harlock](Harlock.md): Harlock — a pure-Elixir TUI framework for Unix terminals.
  - [Harlock.App](Harlock.App.md): Behaviour for Harlock applications.
  - [Harlock.Cmd](Harlock.Cmd.md): Side-effect descriptors returned from `init/1` and `update/2`.
  - [Harlock.Element.Column](Harlock.Element.Column.md): Column spec for `Harlock.Elements.table/1`, built via
`Harlock.Elements.column/1`
  - [Harlock.Elements](Harlock.Elements.md): View-tree constructors. Auto-imported into apps via `use Harlock.App`,
so most apps use `text(...)`, `vbox(...)`, `box(...)` etc. directly
without qualification.
  - [Harlock.Focus](Harlock.Focus.md): Read access to focus state during `view/1` and `update/2` callbacks.
  - [Harlock.Sub](Harlock.Sub.md): Subscriptions — long-running sources of events that the runtime starts and
stops as the model changes.
  - [Harlock.TextArea](Harlock.TextArea.md): Pure helpers for editing a multi-line `(value, cursor)` pair.
  - [Harlock.TextBuffer](Harlock.TextBuffer.md): Pure helpers for editing a `(value, cursor)` pair.
  - [Harlock.Theme](Harlock.Theme.md): Visual theme tokens used by the renderer.

- Widgets
  - [Harlock.Tabs](Harlock.Tabs.md): Key-event helper for the `Harlock.Elements.tabs/1` widget.
  - [Harlock.Viewport](Harlock.Viewport.md): Helpers for the `viewport` element.

- Instrumentation
  - [Harlock.Telemetry](Harlock.Telemetry.md): Telemetry events emitted by the Harlock runtime.

- Testing
  - [Harlock.Test](Harlock.Test.md): Test harness for Harlock apps.

- Rendering
  - [Harlock.Render.Style](Harlock.Render.Style.md): Visual attributes for a rendered cell.
  - [Harlock.Width](Harlock.Width.md): Display-column width of strings and graphemes for terminal rendering.

