# Sheetshow v0.1.0 - Table of Contents

> Google Sheets from Elixir, as values, with a small database on a tab and the same code over .xlsx files.

## Pages

- [README](readme.md)
- [Changelog](changelog.md)
- [LICENSE](license.md)

- Guides
  - [Quick Start: Google Sheets](quick-start-google.md)
  - [Quick Start: An .xlsx File](quick-start-xlsx.md)
  - [Setting Up Google](google-setup.md)
  - [Cookbook](cookbook.md)
  - [Google Sheets Instead of Postgres](instead-of-postgres.md)

- Reference
  - [What Sheetshow Can Promise](guarantees.md)
  - [Cheatsheet](cheatsheet.md)
  - [Using Sheetshow](usage-rules.md)

## Modules

- Start here
  - [Sheetshow](Sheetshow.md): Google Sheets from Elixir, as values.

- Cells and layout
  - [Sheetshow.A1](Sheetshow.A1.md): A1 notation: the `'Q1 costs'!B4:C9` strings Google Sheets speaks.
  - [Sheetshow.Cell](Sheetshow.Cell.md): A cell: where it is, what it holds, how it looks.
  - [Sheetshow.Coord](Sheetshow.Coord.md): Where a cell is: a 0-indexed `row` and `col`, and optionally the `sheet`
(tab) it belongs to.
  - [Sheetshow.Range](Sheetshow.Range.md): A rectangle of cells on one sheet: `Costs!A2:C10`, a whole column, a whole
sheet.
  - [Sheetshow.Style](Sheetshow.Style.md): How a cell looks: a plain map with atom keys, so styles compose with
`Map.merge/2` and read well when inspected.
  - [Sheetshow.Value](Sheetshow.Value.md): What a cell can hold.

- Plans
  - [Sheetshow.Op](Sheetshow.Op.md): What a backend is asked to do.
  - [Sheetshow.Op.AddSheet](Sheetshow.Op.AddSheet.md): Adds a tab. Adding one that already exists is an error, here and at Google,
so a plan says what it expects to find.
  - [Sheetshow.Op.AppendRows](Sheetshow.Op.AppendRows.md): Adds rows below the last row with data on the sheet.
  - [Sheetshow.Op.DeleteRows](Sheetshow.Op.DeleteRows.md): Removes rows; everything below moves up.
  - [Sheetshow.Op.DeleteSheet](Sheetshow.Op.DeleteSheet.md): Removes a tab, and everything on it.
  - [Sheetshow.Op.PutCells](Sheetshow.Op.PutCells.md): Writes a run of cells: one sheet, one row, consecutive columns, no gaps.
  - [Sheetshow.Op.SetDimensions](Sheetshow.Op.SetDimensions.md): Sets the width of columns or the height of rows, in pixels.

- A database on a tab
  - [Sheetshow.Log](Sheetshow.Log.md): An append-only tab, and the first of the two ways to keep data on a sheet.
  - [Sheetshow.Log.Event](Sheetshow.Log.Event.md): One row of a log: an id, what it says, and whether it says the row is gone.
  - [Sheetshow.Schema](Sheetshow.Schema.md): What a row means: a keyword list of `{name, type}`, and the casting either
way across it.
  - [Sheetshow.Table](Sheetshow.Table.md): A tab of mutable rows, and the second of the two ways to keep data on a sheet.
  - [Sheetshow.Table.Change](Sheetshow.Table.Change.md): One thing to do to a table: a value, made by `Sheetshow.Table.insert/2`,
`Sheetshow.Table.update/2`, `Sheetshow.Table.delete/2` or
`Sheetshow.Table.restore/1`.
  - [Sheetshow.Table.Row](Sheetshow.Table.Row.md): One row of a table: an id, what it says, and where on the tab it sits.
  - [Sheetshow.Table.Snapshot](Sheetshow.Table.Snapshot.md): A table as it was when you read it: the rows, and where each of them sat.
  - [Sheetshow.ULID](Sheetshow.ULID.md): Identifiers that sort by the time they were made.

- Backends
  - [Sheetshow.Backend](Sheetshow.Backend.md): What a backend has to do, and what it can promise.
  - [Sheetshow.Client](Sheetshow.Client.md): How to reach one Google spreadsheet: which one, with which credentials.
  - [Sheetshow.Google](Sheetshow.Google.md): Ops as Google Sheets API requests: the body of one `spreadsheets.batchUpdate`.
  - [Sheetshow.Memory](Sheetshow.Memory.md): A spreadsheet in a map: the backend that needs no network.
  - [Sheetshow.Store](Sheetshow.Store.md): Where a spreadsheet file lives, and how to read and write it.
  - [Sheetshow.Store.Local](Sheetshow.Store.Local.md): A spreadsheet file on the machine this is running on.
  - [Sheetshow.Store.WebDAV](Sheetshow.Store.WebDAV.md): A spreadsheet file on a WebDAV server: Nextcloud, ownCloud, or anything else
that speaks it.
  - [Sheetshow.Workbook](Sheetshow.Workbook.md): Which spreadsheet, and which backend reaches it.
  - [Sheetshow.Xlsx](Sheetshow.Xlsx.md): An `.xlsx` workbook, as cells.

- Credentials
  - [Sheetshow.OAuth](Sheetshow.OAuth.md): Sending somebody to a Google consent screen, and turning what comes back into
a `Sheetshow.UserAccount` you can keep.
  - [Sheetshow.ServiceAccount](Sheetshow.ServiceAccount.md): A Google service account, as a value: what the key file holds, and the signed
assertion that trades it for a `Sheetshow.Token`.
  - [Sheetshow.Token](Sheetshow.Token.md): An access token and the moment it stops working.
  - [Sheetshow.UserAccount](Sheetshow.UserAccount.md): A person's own Google account, as a value: the app you registered, and the
refresh token they gave it.

- Errors
  - [Sheetshow.CellError](Sheetshow.CellError.md): What a formula worked out to, when it did not work out.
  - [Sheetshow.Error](Sheetshow.Error.md): The error behind every `{:error, _}` Sheetshow returns and every `!` variant
raises.

