Alaja (Alaja v2.0.0)

Copy Markdown View Source

Public facade for the Alaja terminal rendering framework.

Provides a simplified API for the most common operations: printing styled messages (print_success, print_error, print_warning, print_info), creating buffers and cells, converting colour formats, and rendering tables.

For advanced usage see the sub-modules directly: Alaja.Printer, Alaja.Components, and Alaja.Buffer.

Summary

Functions

Creates an empty cell (space, no colour, no effects).

Creates a new buffer with the given dimensions.

Prints a table to stdout.

Prints an error message (icon: ✗).

Prints an informational message (icon: ℹ).

Writes an iodata payload to stdout without any transformation.

Writes an iodata payload to a specific device (default :stdio).

Prints a success message (icon: ✓).

Prints a warning message (icon: ⚠).

Converts an RGB tuple to uppercase hex string.

Unified entry point for running an Alaja-based CLI.

Functions

empty()

@spec empty() :: Alaja.Cell.t()

Creates an empty cell (space, no colour, no effects).

Returns a %Cell{} struct filled with defaults.

new_buffer(width, height)

@spec new_buffer(non_neg_integer(), non_neg_integer()) :: Alaja.Buffer.t()

Creates a new buffer with the given dimensions.

Returns a %Buffer{} with width * height empty cells stored in a flat tuple for O(1) access.

print(opts)

@spec print(keyword() | list()) :: :ok

Prints a table to stdout.

Delegates to Alaja.Components.Table.print/2. Accepts a keyword list or a list of lists where the first row is treated as headers.

rgb_to_hex(arg)

@spec rgb_to_hex({byte(), byte(), byte()}) :: String.t()

Converts an RGB tuple to uppercase hex string.

Examples

iex> Alaja.rgb_to_hex({255, 180, 0})
"#FFB400"

run(argv, cli_module \\ Alaja.CLI)

@spec run([String.t()], module()) :: any()

Unified entry point for running an Alaja-based CLI.

The default cli_module is Alaja.CLI (the self-hosted demo CLI shipped with the framework). Pass any module built with use Alaja.CLI.Definition, otp_app: :my_app, halt_on_error: true to run your own (escript-style aborts the BEAM on error). Set halt_on_error: false if you want main/1 to return {:error, reason} instead.

Both escript entry points and library callers should go through this function rather than calling cli_module.main/1 directly so the public facade has a single documented entry point.

Examples

# Library caller
Alaja.run(System.argv())

# Custom CLI
Alaja.run(System.argv(), MyApp.CLI)

# escript main_module
defmodule MyApp.CLIEntry do
  def main(argv), do: Alaja.run(argv, MyApp.CLI)
end