# `MingaEditor.SemanticWindow.VisualRow`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga_editor/semantic_window/visual_row.ex#L1)

A single visual row in the semantic window.

Represents one display row as the GUI should render it. The BEAM has
already resolved word wrap, folding, virtual text splicing, and conceal
ranges. The `text` field contains the final composed UTF-8 string.

## Row Types

- `:normal` — a regular buffer line (or the visible portion after wrapping)
- `:fold_start` — a fold summary line (text includes the fold indicator)
- `:virtual_line` — an injected virtual line from decorations (no buffer content)
- `:block` — a block decoration row rendered by a callback
- `:wrap_continuation` — a continuation row from word wrapping

# `row_type`

```elixir
@type row_type() ::
  :normal | :fold_start | :virtual_line | :block | :wrap_continuation
```

# `t`

```elixir
@type t() :: %MingaEditor.SemanticWindow.VisualRow{
  buf_line: non_neg_integer(),
  content_hash: non_neg_integer(),
  row_type: row_type(),
  spans: [MingaEditor.SemanticWindow.Span.t()],
  text: String.t()
}
```

# `compute_hash`

```elixir
@spec compute_hash(String.t(), [MingaEditor.SemanticWindow.Span.t()]) ::
  non_neg_integer()
```

Computes a content hash for cache invalidation.

---

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