# `MingaEditor.RenderModel.Window.GuideIndex`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga_editor/render_model/window/guide_index.ex#L1)

Persistent index of nonblank resident rows and their raw indent levels.

Lazy suffix shifts make structural edits logarithmic. Blank-row guide continuity is represented as compressed ranges resolved from the next nonblank row, so edits never walk a long blank suffix.

# `t`

```elixir
@type t() :: %MingaEditor.RenderModel.Window.GuideIndex{
  root: tree_node(),
  row_count: non_neg_integer()
}
```

# `tree_node`

```elixir
@type tree_node() ::
  MingaEditor.RenderModel.Window.LazyRowTree.t(
    non_neg_integer(),
    non_neg_integer()
  )
```

# `affected_bounds`

```elixir
@spec affected_bounds(t(), non_neg_integer(), non_neg_integer()) ::
  {non_neg_integer(), non_neg_integer()}
```

Returns the smallest final half-open range whose blank continuity can change at a splice.

# `all_runs`

```elixir
@spec all_runs(t()) :: [Minga.RenderModel.Window.ResidentSemantics.GuideRun.t()]
```

# `build`

```elixir
@spec build([MingaEditor.RenderModel.Window.VisualRow.t()], pos_integer()) :: t()
```

# `max_level`

```elixir
@spec max_level(t()) :: non_neg_integer()
```

# `runs`

```elixir
@spec runs(t(), non_neg_integer(), non_neg_integer()) :: [
  Minga.RenderModel.Window.ResidentSemantics.GuideRun.t()
]
```

Returns compressed resolved guide levels for a half-open row range.

# `splice`

```elixir
@spec splice(
  t(),
  non_neg_integer(),
  non_neg_integer(),
  [MingaEditor.RenderModel.Window.VisualRow.t()],
  pos_integer()
) :: t()
```

Applies one immutable-base row splice and returns the updated index.

# `work`

```elixir
@spec work(t(), non_neg_integer(), non_neg_integer()) :: non_neg_integer()
```

---

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