# enzocapitani/cpl architecture

> Architecture diagram of the GitHub repository enzocapitani/cpl, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/enzocapitani/cpl
- Repository: https://github.com/enzocapitani/cpl

## Overview

CPL is a small Java library for building terminal applications. Its user-facing capabilities cover capturing typed input, displaying formatted menus and headers, writing animated or colored text, and terminal utilities such as clearing the screen and pausing execution. The diagram separates those API areas from the menu-formatting helpers and the shared output utility. Relationships shown are limited to calls visible in the excerpts or the README; no uninspected subsystem connections are inferred.

Main entry points: [`src/cpl/style/Write.java`](https://github.com/enzocapitani/cpl/blob/main/src/cpl/style/Write.java) (Animated Writer), [`src/cpl/menu/Menu.java`](https://github.com/enzocapitani/cpl/blob/main/src/cpl/menu/Menu.java) (Menu Display), [`src/cpl/menu/Header.java`](https://github.com/enzocapitani/cpl/blob/main/src/cpl/menu/Header.java) (Header Display), [`src/cpl/menu/Divider.java`](https://github.com/enzocapitani/cpl/blob/main/src/cpl/menu/Divider.java) (Divider Generator)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_input["Input"]
  node_input_api["Typed Input<br/>[Input.java]"]
end

subgraph group_menus["Menus and Headers"]
  node_menu_api["Menu Display<br/>[Menu.java]"]
  node_header_api["Header Display<br/>[Header.java]"]
end

subgraph group_format["Menu Formatting"]
  node_divider["Divider Generator<br/>[Divider.java]"]
  node_title["Title Formatter<br/>[Title.java]"]
end

subgraph group_style["Styled Output"]
  node_write["Animated Writer<br/>[Write.java]"]
  node_colors["ANSI Colors<br/>[WriteColor.java]"]
end

subgraph group_terminal["Terminal Utilities"]
  node_terminal["Terminal Helpers<br/>[Terminal.java]"]
end

node_user(("Library user"))

node_user -->|"reads input"| node_input_api
node_user -->|"requests menu"| node_menu_api
node_user -->|"requests header"| node_header_api
node_user -->|"requests writing"| node_write
node_user -->|"requests utility"| node_terminal
node_menu_api -->|"generates divider"| node_divider
node_menu_api -->|"formats title"| node_title
node_menu_api -->|"writes animated menu"| node_write
node_header_api -->|"generates divider"| node_divider
node_header_api -->|"formats title"| node_title
node_header_api -->|"writes animated header"| node_write
node_write -->|"pauses between characters"| node_terminal
node_write -->|"applies color codes"| node_colors

click node_input_api "https://github.com/enzocapitani/cpl/blob/main/src/cpl/input/Input.java"
click node_menu_api "https://github.com/enzocapitani/cpl/blob/main/src/cpl/menu/Menu.java"
click node_header_api "https://github.com/enzocapitani/cpl/blob/main/src/cpl/menu/Header.java"
click node_divider "https://github.com/enzocapitani/cpl/blob/main/src/cpl/menu/Divider.java"
click node_title "https://github.com/enzocapitani/cpl/blob/main/src/cpl/menu/Title.java"
click node_write "https://github.com/enzocapitani/cpl/blob/main/src/cpl/style/Write.java"
click node_colors "https://github.com/enzocapitani/cpl/blob/main/src/cpl/style/WriteColor.java"
click node_terminal "https://github.com/enzocapitani/cpl/blob/main/src/cpl/util/Terminal.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_input_api,node_user toneBlue
class node_menu_api,node_header_api toneAmber
class node_divider,node_title toneMint
class node_write,node_colors toneRose
class node_terminal toneIndigo
```

## Components

### Input

- [Typed Input](https://github.com/enzocapitani/cpl/blob/main/src/cpl/input/Input.java): `src/cpl/input/Input.java`

### Menus and Headers

- [Menu Display](https://github.com/enzocapitani/cpl/blob/main/src/cpl/menu/Menu.java): `src/cpl/menu/Menu.java`
- [Header Display](https://github.com/enzocapitani/cpl/blob/main/src/cpl/menu/Header.java): `src/cpl/menu/Header.java`

### Menu Formatting

- [Divider Generator](https://github.com/enzocapitani/cpl/blob/main/src/cpl/menu/Divider.java): `src/cpl/menu/Divider.java`
- [Title Formatter](https://github.com/enzocapitani/cpl/blob/main/src/cpl/menu/Title.java): `src/cpl/menu/Title.java`

### Styled Output

- [Animated Writer](https://github.com/enzocapitani/cpl/blob/main/src/cpl/style/Write.java): `src/cpl/style/Write.java`
- [ANSI Colors](https://github.com/enzocapitani/cpl/blob/main/src/cpl/style/WriteColor.java): `src/cpl/style/WriteColor.java`

### Terminal Utilities

- [Terminal Helpers](https://github.com/enzocapitani/cpl/blob/main/src/cpl/util/Terminal.java): `src/cpl/util/Terminal.java`

### Other components

- **Library user**

## Connections

- Library user → Typed Input: reads input (evidence: `src/cpl/input/Input.java`)
- Library user → Menu Display: requests menu (evidence: `src/cpl/menu/Menu.java`)
- Library user → Header Display: requests header (evidence: `src/cpl/menu/Header.java`)
- Library user → Animated Writer: requests writing (evidence: `src/cpl/style/Write.java`)
- Library user → Terminal Helpers: requests utility (evidence: `src/cpl/util/Terminal.java`)
- Menu Display → Divider Generator: generates divider (evidence: `src/cpl/menu/Menu.java`)
- Menu Display → Title Formatter: formats title (evidence: `src/cpl/menu/Menu.java`)
- Menu Display → Animated Writer: writes animated menu (evidence: `src/cpl/menu/Menu.java`)
- Header Display → Divider Generator: generates divider (evidence: `src/cpl/menu/Header.java`)
- Header Display → Title Formatter: formats title (evidence: `src/cpl/menu/Header.java`)
- Header Display → Animated Writer: writes animated header (evidence: `src/cpl/menu/Header.java`)
- Animated Writer → Terminal Helpers: pauses between characters (evidence: `src/cpl/style/Write.java`)
- Animated Writer → ANSI Colors: applies color codes (evidence: `src/cpl/style/Write.java`)
