# `Incant.Naming`
[🔗](https://github.com/elixir-vibe/incant/blob/v0.1.1/lib/incant/naming.ex#L1)

Configurable naming for inferred Incant labels and titles.

Explicit DSL labels and titles always take precedence. The vocabulary only
applies when Incant must infer display text from an identifier.

# `config`

```elixir
@type config() :: keyword() | map()
```

# `style`

```elixir
@type style() :: :sentence | :title
```

# `for_admin`

```elixir
@spec for_admin(term()) :: config()
```

Returns the naming options declared by an admin metadata value.

# `label`

```elixir
@spec label(term(), config()) :: String.t()
```

Returns a sentence-style inferred label.

# `resolve_contract`

```elixir
@spec resolve_contract(Incant.Admin.Contract.t(), config()) ::
  Incant.Admin.Contract.t()
```

Resolves inferred labels throughout a portable admin contract.

# `term_label`

```elixir
@spec term_label(term(), config()) :: String.t() | nil
```

Returns the display text for a value when the naming vocabulary defines an
explicit term for it, or `nil` when it does not. Unlike `label/2`, this does
not invent a title-cased form for unknown values, so it is safe for
humanizing data cells without mangling identifiers and model names.

# `title`

```elixir
@spec title(term(), config()) :: String.t()
```

Returns a title-style inferred title.

---

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