README.md

# gtabler

[![Package Version](https://img.shields.io/hexpm/v/gtabler)](https://hex.pm/packages/gtabler)
[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/gtabler/)

```sh
gleam add gtabler
```

```gleam
import gleam/io
import gtabler

pub fn main() {
  let config =
    gtabler.TableConfig(
      separator: " | ",
      border_char: "-",
      header_color: fn(text) { text },
      cell_color: fn(text) { text },
    )

  let headers = ["Name", "Age", "Country"]
  let rows = [
    ["Alice", "30", "USA"],
    ["Bob", "25", "UK"],
    ["Carlos", "35", "Guatemala"],
  ]

  gtabler.print_table(config, headers, rows)
  |> io.print
}

```

```shell
$ gleam run
Name   | Age | Country
------ | --- | ---------
Alice  | 30  | USA
Bob    | 25  | UK
Carlos | 35  | Guatemala
```

### Customization

```gleam
import gleam/io
import gtabler
import gtabler/color
import gtabler/style

pub fn main() {
  let headers = ["Name", "Age", "Country"]
  let rows = [
    ["Alice", "30", "USA"],
    ["Bob", "25", "UK"],
    ["Carlos", "35", "Guatemala"],
  ]

  io.println("=== Default Table ===")
  let default_table = gtabler.print_table(default_config(), headers, rows)
  io.println(default_table)

  io.println("=== Colored Headers ===")
  let colored_header_config =
    gtabler.TableConfig(
      separator: " | ",
      border_char: "-",
      header_color: fn(text) { color.blue(text) },
      cell_color: fn(text) { text },
    )
  let colored_header_table =
    gtabler.print_table(colored_header_config, headers, rows)
  io.println(colored_header_table)

  io.println("=== Bold Headers and Underlined Rows ===")
  let styled_table_config =
    gtabler.TableConfig(
      separator: " | ",
      border_char: "=",
      header_color: fn(text) { style.bold(text) },
      cell_color: fn(text) { style.underline(text) },
    )
  let styled_table = gtabler.print_table(styled_table_config, headers, rows)
  io.println(styled_table)

  io.println("=== Complex Table with Red Headers and Green Cells ===")
  let complex_table_config =
    gtabler.TableConfig(
      separator: " || ",
      border_char: "=",
      header_color: fn(text) { color.red(style.bold(text)) },
      cell_color: fn(text) { color.green(text) },
    )
  let complex_table = gtabler.print_table(complex_table_config, headers, rows)
  io.println(complex_table)
}

fn default_config() -> gtabler.TableConfig {
  gtabler.TableConfig(
    separator: " | ",
    border_char: "-",
    header_color: fn(text) { text },
    cell_color: fn(text) { text },
  )
}
```

```shell
$ gleam run
=== Default Table ===
Name   | Age | Country
------ | --- | ---------
Alice  | 30  | USA
Bob    | 25  | UK
Carlos | 35  | Guatemala
=== Colored Headers ===
Name   | Age | Country    // Blue headers
------ | --- | ---------
Alice  | 30  | USA
Bob    | 25  | UK
Carlos | 35  | Guatemala
=== Bold Headers and Underlined Rows ===
Name   | Age | Country    // Bold headers
====== | === | =========
Alice  | 30  | USA        // Underlined rows
Bob    | 25  | UK         
Carlos | 35  | Guatemala  
=== Complex Table with Red Headers and Green Cells ===
Name   || Age || Country    // Red bold headers and custom column separator
====== || === || =========
Alice  || 30  || USA        // Green cells
Bob    || 25  || UK         
Carlos || 35  || Guatemala  

```



Further documentation can be found at <https://hexdocs.pm/gtabler>.

## Development

```sh
gleam run   # Run the project
gleam test  # Run the tests
```