# `Ascii.Pieces.Heartbeat`
[🔗](https://github.com/houllette/ascii_art/blob/main/lib/ascii/pieces/heartbeat.ex#L1)

An ecg trace sweeping over its last pass, with a bpm readout.

An ECG monitor. A PQRST trace sweeps left to right over a dotted grid and
its last pass, erasing a few columns ahead, beside a rate readout.

## Options

Give them to `Ascii.new/2` as `options:`, and new ones while it plays
with `Ascii.put_options/2` (or a Phoenix player's `options`): the
monitor starts afresh at the new rate.

  * `bpm` - the heart rate, beats a minute, 30 to 199: the trace's pace,
    and the readout in large digits. Default 72.

The frame is always 72 by 15.

## Colours

It has no parts to colour one by one: in one ink, or a gradient, with
`:ink` and `:gradient` (see `Ascii.Ink`). A green ink makes the
monitor's own.

## Keys and clicks

It takes none: it shows a rate, and `Ascii.handle_event/2` ignores
every event. A Phoenix player given `interactive` and `notify` still tells
your LiveView where it was clicked.

## Screen readers

`Ascii.describe/1` reads the rate, as the readout shows it: "heartbeat:
72 bpm".

## Example

```elixir
monitor = Ascii.new!("heartbeat", options: %{bpm: 90}, ink: "#3fb950")

Ascii.describe(monitor)
#=> "heartbeat: 90 bpm"

{frame, _monitor} = Ascii.frame(monitor, 1.0)
{frame.cols, frame.rows, frame.palette}
#=> {72, 15, ["#3fb950"]}
```

```heex
<Ascii.Phoenix.live_player id="pulse" piece="heartbeat" options={%{bpm: @bpm}} ink="#3fb950" />
```

Ported from `src/pieces/heartbeat.ts` in bas3line/ascii (MIT).

---

*Consult [api-reference.md](api-reference.md) for complete listing*
