# `Drafter.CharacterSet`
[🔗](https://github.com/jaman/drafter/blob/main/lib/drafter/character_set.ex#L1)

Named character lookup for TUI rendering.

Provides a single authoritative source for every Unicode/ASCII character
used across Drafter widgets. Characters are grouped by purpose and keyed
by skin name so that calling code can switch between graphical and
wireframe rendering without embedding strings directly.

## Usage

    import Drafter.CharacterSet

    # Current-skin lookup (respects SkinManager)
    fill(:full)          # "█" in :graphical / :wireframe
    sparkline_levels()   # ["▁".."█"] in :graphical, ["1".."8"] in :ascii

    # Explicit skin override
    fill(:full, :wireframe)
    box(:h_line, :wireframe)

## Built-in skins

| Skin | Description |
|------|-------------|
| `:graphical` | Unicode block + braille characters (default) |
| `:wireframe` | Unicode box-drawing, block fill, minimal decoration |
| `:ascii` | 7-bit ASCII only — maximum compatibility |

# `arrow`

```elixir
@spec arrow(atom()) :: String.t()
```

Look up an arrow character for the current skin.

# `arrow`

```elixir
@spec arrow(atom(), atom()) :: String.t()
```

Look up an arrow character for the given skin.

# `box`

```elixir
@spec box(atom()) :: String.t()
```

Look up a box-drawing character for the current skin.

# `box`

```elixir
@spec box(atom(), atom()) :: String.t()
```

Look up a box-drawing character for the given skin.

# `fill`

```elixir
@spec fill(atom()) :: String.t()
```

Look up a fill character for the current skin.

# `fill`

```elixir
@spec fill(atom(), atom()) :: String.t()
```

Look up a fill character for the given skin.

# `group`

```elixir
@spec group(atom()) :: map()
```

Returns all characters for a group in the current skin.

# `group`

```elixir
@spec group(atom(), atom()) :: map()
```

Returns all characters for a group in the given skin.

# `indicator`

```elixir
@spec indicator(atom()) :: String.t()
```

Look up an indicator character for the current skin.

# `indicator`

```elixir
@spec indicator(atom(), atom()) :: String.t()
```

Look up an indicator character for the given skin.

# `preferred_theme`

```elixir
@spec preferred_theme() :: String.t()
```

Returns the preferred theme name for the current skin.

# `preferred_theme`

```elixir
@spec preferred_theme(atom()) :: String.t()
```

Returns the preferred theme name for the given skin atom.

# `scroll`

```elixir
@spec scroll(atom()) :: String.t()
```

Look up a scrollbar character for the current skin.

# `scroll`

```elixir
@spec scroll(atom(), atom()) :: String.t()
```

Look up a scrollbar character for the given skin.

# `skins`

```elixir
@spec skins() :: [atom()]
```

Returns the list of registered skin names.

# `sparkline_levels_h`

```elixir
@spec sparkline_levels_h() :: [String.t()]
```

Returns the horizontal sparkline level list for the current skin.

# `sparkline_levels_h`

```elixir
@spec sparkline_levels_h(atom()) :: [String.t()]
```

Returns the horizontal sparkline level list for the given skin.

# `sparkline_levels_v`

```elixir
@spec sparkline_levels_v() :: [String.t()]
```

Returns the vertical sparkline level list for the current skin.

# `sparkline_levels_v`

```elixir
@spec sparkline_levels_v(atom()) :: [String.t()]
```

Returns the vertical sparkline level list for the given skin.

# `spinner`

```elixir
@spec spinner(atom()) :: [String.t()]
```

Returns the spinner frame list for a given style and current skin.

# `spinner`

```elixir
@spec spinner(atom(), atom()) :: [String.t()]
```

Returns the spinner frame list for a given style and skin.

# `style`

```elixir
@spec style() :: map()
```

Returns the full style preferences map for the current skin.

# `style`

```elixir
@spec style(atom()) :: term()
```

Returns a single style preference key for the current skin.

---

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