# `StatifierBlocks.Describe.Node`
[🔗](https://github.com/riddler/statifier_blocks/blob/v0.44.1/lib/statifier_blocks/describe/node.ex#L1)

One block in a `StatifierBlocks.Describe` outline (ADR-0016 decision 1).

| Field | What it holds |
|---|---|
| `id` | the block's id |
| `type` | the block's type name, as the document stores it |
| `parent` | the id of the block whose slot holds this one; `nil` for the root |
| `depth` | `StatifierBlocks.ViewModel.outline/1`'s depth; the root is `0` |
| `kind` | `outline/1`'s kind: `:step`, `:arm`, `:rail` or `:tray` |
| `sentence` | `StatifierBlocks.ViewModel.sentence/1` of the block's view-model node |
| `outcomes` | the outcome names `StatifierBlocks.BlockType.outcomes/2` declares for the block's config, in declaration order |
| `summary` | the block's summary chips, kept apart from `sentence` and never joined into it |
| `fan_label` | `StatifierBlocks.ViewModel.fan_label/1`: `"one of"`, `"all of"` or `nil` |
| `noun` | what an edge line calls this block where it names it as a container: its title where it has one, else a short noun for its type (`"the steps"`, `"the group"`); `nil` for a block with no slots or one the palette cannot resolve |

A block whose type the palette cannot resolve is its placeholder: its
type name as its sentence, no chips, and the one `"done"` outcome a type
declaring no `outcomes/1` has, and no `noun`.

# `t`

```elixir
@type t() :: %StatifierBlocks.Describe.Node{
  depth: non_neg_integer(),
  fan_label: String.t() | nil,
  id: StatifierBlocks.Block.id(),
  kind: StatifierBlocks.ViewModel.kind(),
  noun: String.t() | nil,
  outcomes: [String.t()],
  parent: StatifierBlocks.Block.id() | nil,
  sentence: String.t(),
  summary: [String.t()],
  type: StatifierBlocks.Block.type_name()
}
```

---

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