Skip to content

Latest commit

 

History

History
105 lines (75 loc) · 3.5 KB

README.md

File metadata and controls

105 lines (75 loc) · 3.5 KB

Bubble-table

Latest Release GoDoc Coverage Status

A table component for the Bubble Tea framework.

Table with all features

View sample source code

Features

For a code reference, please see the full feature example.

Displays a table with a header, rows, footer, and borders.

Border shape is customizable with a basic thick square default.

Row text can be individually styled.

Can be focused to highlight a row and navigate with up/down (and j/k). These keys can be customized with a KeyMap.

Can make rows selectable, and fetch the current selections.

Defining table data

Each Column is associated with a unique string key. Each Row contains a RowData object which is simply a map of strings to interface{}. When the table is rendered, each Row is checked for each Column key. If the key exists in the Row's RowData, it is rendered with fmt.Sprintf("%v"). If it does not exist, nothing is rendered.

Extra data in the RowData object is ignored. This can be helpful to simply dump data into RowData and create columns that select what is interesting to view, or to generate different columns based on view options on the fly.

A basic example is given below. For more detailed examples, see the examples directory.

// This makes it easier/safer to match against values, but isn't necessary
const (
  // This value isn't visible anywhere, so a simple lowercase is fine
  columnKeyID = "id"

  // It's just a string, so it can be whatever, really!  They only must be unique
  columnKeyName = "何?!"
)

columns := []table.Column{
  table.NewColumn(columnKeyID, "ID", 5),
  table.NewColumn(columnKeyName, "Name", 10),
}

rows := []table.Row{
  // This row contains both an ID and a name
  table.NewRow(table.RowData{
    columnKeyID:          "abc",
    columnKeyName:        "Hello",
  }),

  table.NewRow(table.RowData{
    columnKeyID:          "123",
    columnKeyName:        "Oh no",
    // This field exists in the row data but won't be visible
    "somethingelse": "Super bold!",
  }),

  table.NewRow(table.RowData{
    columnKeyID:          "def",
    // This row is missing the Name column, so it will simply be blank
  }),
}

Demos

Code examples are located in the examples directory. Run commands are added to the Makefile for convenience but they should be as simple as go run ./examples/features/main.go, etc.

To run the examples, clone this repo and run:

# Run the full feature demo
make

# Run dimensions example to see multiple sizes of simple tables in action
make dimensions

# Or run any of them directly
go run ./examples/features/main.go

Contributing

Contributions welcome, but since this is being actively developed for use in Khan please check first by opening an issue or commenting on an existing one!