cat / 012
clone

a spreadsheet for the terminal: lotus 1-2-3 looks, google sheets keys and formulas, one go binary

Merge branch 'main' into worktree-agent-a5841c474df51dec1

Dami committed 5dd6d4c
commit
5dd6d4c1d92c4f46a6852792283869b745bcade3
parent
93bb1be179facbfac6c7167a185fba35f5259148
parent
436d6709f1b9c978a112c830a359fee4e4be3c9d
author
Dami <dami.etoile@gmail.com>
102 files changed, +1037 -360
MMakefile2+-
Mcmd/012/main.go2+-
Mcmd/012/pipe.go78++++++++++++++------
Mcmd/012/pipe_test.go32++++++++-
Mdemos/charts.tape4+-
Mdocs/contributing/site.md18+++++
Mdocs/contributing/testing.md12++-
Mdocs/files/README.md4+-
Mdocs/media/arrays.gifbin
Mdocs/media/charts.gifbin
Mdocs/media/find-replace.gifbin
Mdocs/media/freeze-sort-filter.gifbin
Mdocs/media/menus-palette.gifbin
Mdocs/media/nu-recipe.gifbin
Mdocs/media/pipeline.gifbin
Mdocs/media/pivot.gifbin
Mdocs/media/selection-stats.pngbin
Mdocs/media/vim.gifbin
Mdocs/nushell/README.md2+-
Mdocs/nushell/notebooks.md5+-
Mdocs/nushell/pipelines.md35++++++++-
Mdocs/reference/keys.md6+-
Mdocs/sheets/charts.md21+++--
Me2e/numodule_test.go15++++
Me2e/pipe_test.go39++++++++++
Me2e/screenlist_test.go2+-
Me2e/testdata/screens/chart-area-light.html8+-
Me2e/testdata/screens/chart-area.html8+-
Me2e/testdata/screens/chart-axes-light.html8+-
Me2e/testdata/screens/chart-axes-narrow.html8+-
Me2e/testdata/screens/chart-axes.html8+-
Me2e/testdata/screens/chart-bar-percent.html8+-
Me2e/testdata/screens/chart-bar.html16++--
Me2e/testdata/screens/chart-editor-light.html8+-
Me2e/testdata/screens/chart-editor.html8+-
Me2e/testdata/screens/chart-light.html8+-
Me2e/testdata/screens/chart-line-light.html8+-
Me2e/testdata/screens/chart-line.html8+-
Me2e/testdata/screens/chart-narrow.html8+-
Me2e/testdata/screens/chart-selected.html8+-
Me2e/testdata/screens/chart-stacked-light.html8+-
Me2e/testdata/screens/chart-stacked.html8+-
Me2e/testdata/screens/chart-wide.html8+-
Me2e/testdata/screens/chart.html8+-
Me2e/testdata/screens/error-goto.html2+-
Me2e/testdata/screens/pipe-quit-light.html10+-
Me2e/testdata/screens/pipe-quit.html10+-
Me2e/testdata/screens/pipe-status-light.html10+-
Me2e/testdata/screens/pipe-status.html10+-
Minternal/chart/bar.go4+-
Minternal/chart/chart_test.go33+++++++++
Minternal/chart/column.go10++-
Minternal/chart/sixel.go44++++-------
Minternal/chart/sixel_test.go15++--
Minternal/chart/stack.go6+-
Minternal/chart/testdata/area-negative.txt12++--
Minternal/chart/testdata/area-stacked.txt10+-
Minternal/chart/testdata/area.txt8+-
Minternal/chart/testdata/axis-log.txt12++--
Minternal/chart/testdata/axis-min-max.txt10+-
Minternal/chart/testdata/axis-min.txt8+-
Minternal/chart/testdata/bar-log.txt8+-
Minternal/chart/testdata/bar-percent.txt8+-
Minternal/chart/testdata/bar-single.txt8+-
Minternal/chart/testdata/bar-stacked.txt8+-
Minternal/chart/testdata/bar.txt14++--
Minternal/chart/testdata/column-narrow.txt8+-
Minternal/chart/testdata/column-negative.txt10+-
Minternal/chart/testdata/column-percent.txt6+-
Minternal/chart/testdata/column-single.txt12++--
Minternal/chart/testdata/column-stacked-negative.txt14++--
Minternal/chart/testdata/column-stacked.txt10+-
Minternal/chart/testdata/column.txt8+-
Minternal/chart/testdata/legend-none.txt8+-
Minternal/chart/testdata/legend-right.txt8+-
Minternal/chart/testdata/line-single.txt16++--
Minternal/chart/testdata/line.txt6+-
Minternal/chart/testdata/no-gridlines.txt12++--
Minternal/fileio/fileio.go3+
Minternal/fileio/formats.go8++-
Minternal/fileio/stream.go1+
Ainternal/fileio/widths_test.go72+++++++++++++++++++
Minternal/nushell/module/012.nu26+++++--
Minternal/sheet/load.go11+++
Minternal/ui/charts.go21++---
Minternal/ui/dialog.go6+-
Minternal/ui/filter.go19++++-
Ainternal/ui/goto_test.go88+++++++++++++++++++++++
Minternal/ui/graphics.go3+-
Minternal/ui/menubar.go2+-
Minternal/ui/names_test.go2+-
Minternal/ui/pipe.go52+++++++++++--
Minternal/ui/pipe_test.go67++++++++++++++++-
Minternal/ui/selection.go29++++++-
Minternal/ui/sixel.go16++--
Minternal/ui/sixel_test.go6+-
Mscripts/doccheck/main.go5+-
Ascripts/doccheck/redirects.go116++++++++++++++++++++++++++++++
Mwebsite/docusaurus.config.ts8++
Mwebsite/package-lock.json25++++++
Mwebsite/package.json1+
Awebsite/redirects.json3+
M Makefile +1 -1
M cmd/012/main.go +1 -1
M cmd/012/pipe.go +54 -24
@@ -20,11 +20,16 @@ import (
2020 2121 // pipeMode is what the command line asked of standard input and output.2222 type pipeMode struct {23- stdin bool // 012 -, or --pipe without a file: read a table from standard input24- pipe bool // --pipe: write the result to standard output on quitting25- to fileio.Kind // --to: the format to write, or 0 for the input's23+ stdin bool // 012 -, or --pipe without a file: read a table from standard input24+ pipe bool // --pipe: write the result to standard output on quitting25+ to fileio.Kind // --to: the format to write, or 0 for the input's26+ send ui.Send // --send: what quitting sends, or ask27+ sendAs string // --send's value, or "" without it2628 }2729 30+// sends are --send's values.31+var sends = map[string]ui.Send{"ask": ui.SendAsk, "selection": ui.SendSelection, "sheet": ui.SendSheet}32+2833 // on reports whether the UI must run on the terminal rather than on2934 // standard input and output.3035 func (p pipeMode) on() bool { return p.stdin || p.pipe }
@@ -33,43 +38,67 @@ func (p pipeMode) on() bool { return p.stdin || p.pipe }
3338 // status 1 so the pipeline can tell.3439 var errNotSent = errors.New("quit without sending anything to the pipeline")3540 36-// parsePipe takes -, --pipe and --to from args, returning the rest.41+// parsePipe takes -, --pipe, --to and --send from args, returning the42+// rest.3743 func parsePipe(args []string) (pipeMode, []string, error) {3844 var p pipeMode3945 var rest []string4046 for i := 0; i < len(args); i++ {4147 name, value, hasValue := strings.Cut(args[i], "=")42- switch {43- case args[i] == "-":44- p.stdin = true45- case args[i] == "--pipe":46- p.pipe = true47- case name == "--to":48- if !hasValue {49- if i+1 == len(args) {50- return p, nil, errors.New("--to needs a format: nuon, json, csv or tsv")51- }52- i++53- value = args[i]48+ if name != "--to" && name != "--send" {49+ switch args[i] {50+ case "-":51+ p.stdin = true52+ case "--pipe":53+ p.pipe = true54+ default:55+ rest = append(rest, args[i])5456 }55- k, ok := fileio.KindNamed(value)56- if !ok || !k.IsText() {57- return p, nil, fmt.Errorf("--to %s: 012 writes nuon, json, csv or tsv", value)57+ continue58+ }59+ if !hasValue {60+ if i+1 == len(args) {61+ return p, nil, fmt.Errorf("%s needs a value: %s", name, pipeValues[name])5862 }59- p.to = k60- default:61- rest = append(rest, args[i])63+ i++64+ value = args[i]65+ }66+ if err := p.set(name, value); err != nil {67+ return p, nil, err6268 }6369 }6470 return p, rest, nil6571 }6672 67-// check reports what doesn't go together: --to without --pipe, a file68-// and -, or nothing to read.73+// pipeValues are what --to and --send take, for their errors.74+var pipeValues = map[string]string{"--to": "nuon, json, csv or tsv", "--send": "ask, selection or sheet"}75+76+// set takes --to's or --send's value.77+func (p *pipeMode) set(name, value string) error {78+ if name == "--send" {79+ s, ok := sends[value]80+ if !ok {81+ return fmt.Errorf("--send %s: 012 sends %s", value, pipeValues[name])82+ }83+ p.send, p.sendAs = s, value84+ return nil85+ }86+ k, ok := fileio.KindNamed(value)87+ if !ok || !k.IsText() {88+ return fmt.Errorf("--to %s: 012 writes %s", value, pipeValues[name])89+ }90+ p.to = k91+ return nil92+}93+94+// check reports what doesn't go together: --to or --send without95+// --pipe, a file and -, or nothing to read.6996 func (p *pipeMode) check(files []string, stdinTTY bool) error {7097 switch {7198 case p.to != 0 && !p.pipe:7299 return errors.New("--to goes with --pipe")100+ case p.sendAs != "" && !p.pipe:101+ return errors.New("--send goes with --pipe: 012 --pipe --send " + p.sendAs)73102 case p.stdin && len(files) > 0:74103 return errors.New("012 - reads standard input; name a file or -, not both")75104 case p.pipe && len(files) == 0:
@@ -103,6 +132,7 @@ func setPipe(m *ui.Model, p pipeMode, stdin io.Reader) {
103132 }104133 if p.pipe {105134 m.SetPipe(p.to)135+ m.SetSend(p.send)106136 }107137 }108138
M cmd/012/pipe_test.go +31 -1
@@ -15,6 +15,7 @@ import (
1515 1616 var (1717 ctrlQ = tea.KeyPressMsg{Code: 'q', Mod: tea.ModCtrl}18+ down = tea.KeyPressMsg{Code: tea.KeyDown, Mod: tea.ModShift}1819 enter = tea.KeyPressMsg{Code: tea.KeyEnter}1920 keyD = tea.KeyPressMsg{Code: 'd', Text: "d"}2021 )
@@ -129,6 +130,31 @@ func TestPipeTo(t *testing.T) {
129130 }130131 }131132 133+// TestPipeSend: with --send, Ctrl+Q sends without asking: the134+// selection, or the sheet whatever is selected.135+func TestPipeSend(t *testing.T) {136+ for _, tc := range []struct {137+ args []string138+ want string139+ }{140+ {[]string{"--pipe", "--send", "selection", "--to", "csv"}, "name\nCLAUDE.md\n"},141+ {[]string{"--pipe", "--send=sheet", "--to", "csv"}, "name,size\nCLAUDE.md,1.6 kB\ngo.mod,1.5 kB\n"},142+ } {143+ e, out, _ := pipeEnv(t, lsNUON, down, ctrlQ)144+ if err := run(tc.args, e); err != nil {145+ t.Fatal(err)146+ }147+ if out.String() != tc.want {148+ t.Errorf("%q: stdout %q, want %q", tc.args, out, tc.want)149+ }150+ }151+ // Only one cell selected: --send selection sends the sheet.152+ e, out, _ := pipeEnv(t, lsNUON, ctrlQ)153+ if err := run([]string{"--pipe", "--send", "selection", "--to", "tsv"}, e); err != nil || out.String() != "name\tsize\nCLAUDE.md\t1.6 kB\ngo.mod\t1.5 kB\n" {154+ t.Errorf("one cell: %v, stdout %q", err, out)155+ }156+}157+132158 func TestPipeQuitWithoutSending(t *testing.T) {133159 e, out, _ := pipeEnv(t, lsNUON, ctrlQ, keyD)134160 if err := run([]string{"--pipe"}, e); !errors.Is(err, errNotSent) {
@@ -175,8 +201,12 @@ func TestPipeArguments(t *testing.T) {
175201 {[]string{"--pipe"}, true, "nothing piped in"},176202 {[]string{"--to", "csv"}, false, "--to goes with --pipe"},177203 {[]string{"--pipe", "--to", "xlsx"}, false, "012 writes nuon, json, csv or tsv"},178- {[]string{"--pipe", "--to"}, false, "--to needs a format"},204+ {[]string{"--pipe", "--to"}, false, "--to needs a value: nuon, json, csv or tsv"},179205 {[]string{"-", "a.csv"}, false, "not both"},206+ {[]string{"-", "--send", "sheet"}, false, "--send goes with --pipe: 012 --pipe --send sheet"},207+ {[]string{"--send=ask", "a.csv"}, false, "--send goes with --pipe"},208+ {[]string{"--pipe", "--send", "all"}, false, "--send all: 012 sends ask, selection or sheet"},209+ {[]string{"--pipe", "--send"}, false, "--send needs a value: ask, selection or sheet"},180210 } {181211 e, _, _ := pipeEnv(t, lsNUON)182212 e.isTTY = tc.tty
M demos/charts.tape +2 -2
M docs/contributing/site.md +18 -0
M docs/contributing/testing.md +8 -4
@@ -101,8 +101,10 @@ so Alt+letter reaches the app. VHS has no mouse commands, so the tapes
101101 use the keyboard, and they reach commands through the palette (Ctrl+K)102102 rather than counting menu items, so a new menu item doesn't break them.103103 Tapes that change settings set them for the run (`O12_KEYMAP=vim`)104-rather than writing the config file the other tapes share, and charts105-are drawn as text (`O12_CHART_IMAGES=false`), since VHS records text.104+rather than writing the config file the other tapes share. VHS's ttyd105+has sixel on, so 012 draws charts as sixel images, but VHS records only106+xterm.js's text layer: the recordings show the text chart each image107+covers ([Charts](../sheets/charts.md)).106108 The nushell tapes need `nu`: `demos/lib/nu.tape` starts a session107109 without your config files, with a fixed prompt and 012 on the PATH, and108110 their data is in `demos/data`, so each recording comes out the same.
@@ -134,8 +136,10 @@ and a line in the folder's README. `make site` builds them into the
134136 history (see [CLAUDE.md](../../CLAUDE.md)), and `scripts/doccheck`, which135137 checks the tree above, that relative links and anchors resolve, that136138 every `docs/...md` path Go code names exists, that every file in137-`docs/media` is shown by a doc and made by a tape, and that every tape138-records something a doc shows. Unit tests check what the docs say about139+`docs/media` is shown by a doc and made by a tape, that every tape140+records something a doc shows, and that a page the site has published141+isn't gone without a redirect ([The docs site](site.md#old-addresses-keep-working)).142+Unit tests check what the docs say about139143 the code: menu paths lead to menu items, command ids and keys exist and140144 every bound key is in [Keys and mouse](../reference/keys.md)141145 (`internal/ui/docs_test.go`), settings and variables are options
M docs/files/README.md +3 -1
M docs/media/arrays.gif +0 -0

Binary file.

M docs/media/charts.gif +0 -0

Binary file.

M docs/media/find-replace.gif +0 -0

Binary file.

M docs/media/freeze-sort-filter.gif +0 -0

Binary file.

M docs/media/menus-palette.gif +0 -0

Binary file.

M docs/media/nu-recipe.gif +0 -0

Binary file.

M docs/media/pipeline.gif +0 -0

Binary file.

M docs/media/pivot.gif +0 -0

Binary file.

M docs/media/selection-stats.png +0 -0

Binary file.

M docs/media/vim.gif +0 -0

Binary file.

M docs/nushell/README.md +1 -1
M docs/nushell/notebooks.md +4 -1
M docs/nushell/pipelines.md +30 -5
@@ -43,7 +43,7 @@ sequenceDiagram
4343 | Command | Reads | Writes |4444 |---|---|---|4545 | `012 -` | A table from standard input, into a new sheet | Nothing; the table stays in 012 until you save or download it |46-| `012 --pipe` | A table from standard input, or a file named after it | The sheet or the selection, to standard output, when you quit |46+| `012 --pipe` | A table from standard input, or a file named after it | The sheet or the selection, to standard output, when you quit (asking which, unless `--send` says) |4747 | `sheet`, `sheet view` | As `012 --pipe` and `012 -`, from nushell values | A nushell table, or nothing |4848 4949 ## Reading a table: `012 -`
@@ -77,8 +77,26 @@ standard output:
7777 one is made, or else the sheet; S sends the whole sheet instead; D7878 quits without sending; Esc goes back to the sheet.7979 - File > Quit and send selection and File > Quit and send sheet send80- without asking. They're in the menus and the palette only with81- `--pipe`.80+ without asking, and File > Quit without sending (or `:q!`) sends81+ nothing. They're in the menus and the palette only with `--pipe`.82+83+`--send` makes Quit send without asking, for a pipeline that always84+wants the same thing back:85+86+| `--send` | Quit sends |87+|---|---|88+| `ask` (the default) | What you choose at the question above |89+| `selection` | The selection; with only the active cell selected, the sheet, as Enter at the question does |90+| `sheet` | The sheet, whatever is selected |91+92+```nu93+open orders.csv | to nuon | ^012 --pipe --send sheet | from nuon | save -f orders.nuon94+```95+96+The status line still names what Ctrl+Q will send, and File > Quit97+without sending stays in the menu. The active cell on its own isn't a98+selection to send, as at the question: `--send selection` sends the99+sheet until a range is selected.82100 83101 The sheet is its used range from A1. A selection is sent as selected,84102 and its first row names the columns. Either way, rows a filter hides
@@ -109,7 +127,13 @@ sheet budget.xlsx | save -f budget.csv
109127 110128 `sheet` is `to nuon | ^012 --pipe --to nuon | from nuon`: it opens the111129 table piped in, or the file it names, and returns what you send back112-with its types. Text piped in, such as `open --raw data.csv`, goes to130+with its types. `sheet --send sheet` and `sheet --send selection` pass131+`--send` on, so quitting sends without asking:132+133+```nu134+ls | sheet --send sheet | where size > 1kb135+```136+ Text piped in, such as `open --raw data.csv`, goes to113137 012 as it is, to be read as `012 -` reads it. `sheet view` is114138 `to nuon | ^012 -`, and returns nothing. Quitting without sending makes115139 `sheet` fail with 012's reason:
@@ -121,7 +145,8 @@ try { ls | sheet | save -f picked.nuon } catch {|e| print $e.msg }
121145 122146 ## The exit status123147 124-Quitting without sending (D at the question) writes nothing and exits148+Quitting without sending (D at the question, File > Quit without149+sending, `:q!`) writes nothing and exits125150 with status 1, so the pipeline stops rather than carrying on with126151 nothing. Nushell treats that127152 as a failed external command and stops the pipeline with an error
M docs/reference/keys.md +3 -3
@@ -22,7 +22,7 @@ mouse and the vim keymap added.
2222 | PgUp, PgDn | A screen up, down |2323 | Alt+PgUp, Alt+PgDn | A screen left, right |2424 | Home, Ctrl+Home, Ctrl+End | Column A, cell A1, the last used cell |25-| Ctrl+G, F5 | Go to a cell, a range or a named range, on any sheet (`Sheet2!B3`) |25+| Ctrl+G, F5 | Go to a cell, a range, a named range or a region's table (`nu.r1`), on any sheet (`Sheet2!B3`) |2626 2727 ## Entering data2828
@@ -113,7 +113,7 @@ range, F2 renames or repoints it and Ctrl+D deletes it.
113113 114114 | Key | Action |115115 |---|---|116-| Ctrl+S, Ctrl+O, Ctrl+Q | Save, open (and import other formats), quit |116+| Ctrl+S, Ctrl+O, Ctrl+Q | Save, open (and import other formats), quit; with `012 --pipe`, quitting asks what to send, or sends what `--send` chose ([Pipelines](../nushell/pipelines.md#sending-it-on-012---pipe)) |117117 | F10, Alt+F, Alt+E, Alt+V, Alt+I, Alt+O, Alt+D, Alt+H | Open a menu; arrows move, Enter runs, Esc closes |118118 | Ctrl+K, Alt+/, Ctrl+Shift+P | Search the menus: find and run any command |119119 | Shift+F10, right-click | The cell, column or row menu |
@@ -245,7 +245,7 @@ The `:` line takes:
245245 | `:40` | Go to row 40 |246246 | `:w`, `:w name`, `:w out.csv` | Save, Save as, or Download as another format, as the File menu does |247247 | `:w!`, `:w! name`, `:wq!` | Save even if the file changed on disk since it was opened, and replace a file of the name given, without asking (as choosing Overwrite or Replace would) |248-| `:q`, `:q!` | Quit (asking about unsaved changes), quit discarding them |248+| `:q`, `:q!` | Quit (asking about unsaved changes), quit discarding them; with `012 --pipe`, `:q` quits as Ctrl+Q does and `:q!` quits without sending |249249 | `:wq`, `:x` | Save and quit; `:x` saves only if something changed |250250 | `:e name`, `:e!` | Open a sheet or import a file; refused with unsaved changes unless `:e!` |251251 | `:edit.fill_down`, `:fill down` | Any command, by its id or title |
M docs/sheets/charts.md +13 -8
@@ -47,11 +47,16 @@ kitty graphics protocol. Where it does (kitty, Ghostty, WezTerm) the plot is
4747 a real image, drawn in the terminal's own palette and placed with Unicode4848 placeholders, so redraws never erase it. Otherwise, where the terminal4949 lists sixel graphics among its device attributes (foot, xterm, mlterm,50-Windows Terminal), the plot is a sixel image in the terminal's palette,51-in as many colors as it has color registers. A sixel image is drawn over52-the finished screen, so it shows only where its whole plot area does: a53-chart scrolled partly out of the grid, or under another chart, a menu or54-a dialog, is text until it shows whole again, and the image is drawn55-again after scrolling, resizing or an edit to its data. Elsewhere, and56-inside tmux, the plot is drawn with block and braille characters. Axis57-labels, the legend and the frame are text either way.50+Windows Terminal, and terminals built on xterm.js with its image addon51+on, such as VS Code with `terminal.integrated.enableImages`), the plot is52+a sixel image in the terminal's palette, in as many colors as it has53+color registers. A sixel image is drawn over the finished screen, on top54+of the text chart, which it covers whole: a terminal that lists sixel but55+doesn't show the image, or a recording of the text alone (VHS records56+xterm.js's text layer, not its image layer), shows the text chart. The57+image shows only where its whole plot area does: a chart scrolled partly58+out of the grid, or under another chart, a menu or a dialog, is text59+until it shows whole again, and the image is drawn again after60+scrolling, resizing or an edit to its data. Elsewhere, and inside tmux,61+the plot is drawn with block and braille characters. Axis labels, the62+legend and the frame are text either way.
M e2e/numodule_test.go +15 -0
M e2e/pipe_test.go +39 -0
@@ -105,6 +105,45 @@ func TestPipeSendSelectionAsCSV(t *testing.T) {
105105 }106106 }107107 108+// TestPipeSendSelectionWithoutAsking: --send selection makes Ctrl+Q109+// send the selection at once.110+func TestPipeSendSelectionWithoutAsking(t *testing.T) {111+ s := startWith(t, options{piped: true, stdin: lsNUON}, "--pipe", "--send", "selection", "--to", "csv")112+ s.waitFor("Ctrl+Q send the sheet as CSV")113+ s.keys("<shift+down>", "<shift+right>")114+ s.waitFor("Ctrl+Q send A1:B2 as CSV")115+ s.keys("<ctrl+q>")116+ out, code := s.finish()117+ if code != 0 || out != "name,size\nCLAUDE.md,1.6 kB\n" {118+ t.Errorf("exit %d, stdout %q", code, out)119+ }120+}121+122+// TestPipeSendSheetWithoutAsking: --send sheet makes Ctrl+Q send the123+// whole sheet, whatever is selected; File > Quit without sending still124+// sends nothing.125+func TestPipeSendSheetWithoutAsking(t *testing.T) {126+ s := startWith(t, options{piped: true, stdin: "a,b\n1,2\n3,4\n"}, "--pipe", "--send", "sheet")127+ s.waitFor("Read 3 rows of CSV from standard input")128+ s.keys("<shift+down>")129+ s.waitFor("Ctrl+Q send the sheet as CSV")130+ s.keys("<ctrl+q>")131+ out, code := s.finish()132+ if code != 0 || out != "a,b\n1,2\n3,4\n" {133+ t.Errorf("exit %d, stdout %q", code, out)134+ }135+136+ s = startWith(t, options{piped: true, stdin: "a,b\n1,2\n"}, "--pipe", "--send", "sheet")137+ s.waitFor("Read 2 rows of CSV from standard input")138+ s.keys("<ctrl+k>", "without sending")139+ s.waitFor("Quit without sending")140+ s.keys("<enter>")141+ out, code = s.finish()142+ if code != 1 || out != "" {143+ t.Errorf("quit without sending: exit %d, stdout %q", code, out)144+ }145+}146+108147 // TestPipeQuitWithoutSending exits with status 1 and writes nothing.109148 func TestPipeQuitWithoutSending(t *testing.T) {110149 s := startWith(t, options{piped: true, stdin: "a,b\n1,2\n"}, "--pipe")
M e2e/screenlist_test.go +1 -1
M e2e/testdata/screens/chart-area-light.html +4 -4
@@ -5,16 +5,16 @@
55 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Month</span><span style="background:var(--vt-palette-6)"> </span> Rent Food <span style="color:var(--vt-palette-8)">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-8)">──────────────────────────────┐</span>66 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">2</span><span style="background:var(--vt-palette-7)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>77 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">3</span><span style="background:var(--vt-palette-7)"> </span> Feb $1,450 $640 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>8-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$1,500</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-4)">▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▇▇▇▇▇██████████████</span> <span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$1,500</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-4)">▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▃▃▃▃▃▄▄▄▄▄▄▄▄▄▄▄▄▄▄</span> <span style="color:var(--vt-palette-8)">│</span>99 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-4)">███████████████████████████████████</span> <span style="color:var(--vt-palette-8)">│</span>1010 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">6</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-4)">███████████████████████████████████</span> <span style="color:var(--vt-palette-8)">│</span>1111 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">7</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$1,000</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-4)">███████████████████████████████████</span> <span style="color:var(--vt-palette-8)">│</span>12-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-4)">████████████████████████████████</span><span style="color:var(--vt-palette-5);background:var(--vt-palette-4)">▁▁▂</span> <span style="color:var(--vt-palette-8)">│</span>13-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-5);background:var(--vt-palette-4)">▅▅▅▅▆▆▆▆▆▆▇▇▇▇▆▆▆▆▆▆▆▆▅▅▆▆▇▇▇</span><span style="color:var(--vt-palette-5)">██████</span> <span style="color:var(--vt-palette-8)">│</span>12+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-4)">███████████████████████████████████</span> <span style="color:var(--vt-palette-8)">│</span>13+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-5);background:var(--vt-palette-4)">▁▁▁▁▂▂▂▂▂▂▃▃▃▃▂▂▂▂▂▂▂▂▁▁▂▂▃▃▃▄▄▄▅▅▆</span> <span style="color:var(--vt-palette-8)">│</span>1414 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">10</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$500</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-5)">███████████████████████████████████</span> <span style="color:var(--vt-palette-8)">│</span>1515 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">11</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-5)">███████████████████████████████████</span> <span style="color:var(--vt-palette-8)">│</span>1616 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">12</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-5)">███████████████████████████████████</span> <span style="color:var(--vt-palette-8)">│</span>17-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">13</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$0</span> <span style="color:var(--vt-palette-8)">┼────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">│</span>17+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">13</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$0</span> <span style="color:var(--vt-palette-8)">┼</span><span style="color:var(--vt-palette-5)">▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀</span><span style="color:var(--vt-palette-8)">─</span> <span style="color:var(--vt-palette-8)">│</span>1818 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">14</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">Jan</span> <span style="color:var(--vt-palette-0)">Feb</span> <span style="color:var(--vt-palette-0)">Mar</span> <span style="color:var(--vt-palette-0)">Apr</span> <span style="color:var(--vt-palette-8)">│</span>1919 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">15</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">■</span> <span style="color:var(--vt-palette-0)">Rent</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-0)">Food</span> <span style="color:var(--vt-palette-8)">│</span>2020 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">16</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">└──────────────────────────────────────</span> <span style="color:var(--vt-palette-0)">A1:C5</span> <span style="color:var(--vt-palette-8)">─┘</span>
M e2e/testdata/screens/chart-area.html +4 -4
@@ -5,16 +5,16 @@
55 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Month</span><span style="background:var(--vt-palette-6)"> </span> Rent Food <span style="color:var(--vt-palette-8)">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-8)">──────────────────────────────┐</span>66 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>77 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Feb $1,450 $640 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>8-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$1,500</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-6)">▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▇▇▇▇▇██████████████</span> <span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$1,500</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-6)">▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▃▃▃▃▃▄▄▄▄▄▄▄▄▄▄▄▄▄▄</span> <span style="color:var(--vt-palette-8)">│</span>99 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">███████████████████████████████████</span> <span style="color:var(--vt-palette-8)">│</span>1010 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">███████████████████████████████████</span> <span style="color:var(--vt-palette-8)">│</span>1111 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">7</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$1,000</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-6)">███████████████████████████████████</span> <span style="color:var(--vt-palette-8)">│</span>12-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">████████████████████████████████</span><span style="color:var(--vt-palette-5);background:var(--vt-palette-6)">▁▁▂</span> <span style="color:var(--vt-palette-8)">│</span>13-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-5);background:var(--vt-palette-6)">▅▅▅▅▆▆▆▆▆▆▇▇▇▇▆▆▆▆▆▆▆▆▅▅▆▆▇▇▇</span><span style="color:var(--vt-palette-5)">██████</span> <span style="color:var(--vt-palette-8)">│</span>12+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">███████████████████████████████████</span> <span style="color:var(--vt-palette-8)">│</span>13+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-5);background:var(--vt-palette-6)">▁▁▁▁▂▂▂▂▂▂▃▃▃▃▂▂▂▂▂▂▂▂▁▁▂▂▃▃▃▄▄▄▅▅▆</span> <span style="color:var(--vt-palette-8)">│</span>1414 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$500</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-5)">███████████████████████████████████</span> <span style="color:var(--vt-palette-8)">│</span>1515 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-5)">███████████████████████████████████</span> <span style="color:var(--vt-palette-8)">│</span>1616 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-5)">███████████████████████████████████</span> <span style="color:var(--vt-palette-8)">│</span>17-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">│</span>17+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼</span><span style="color:var(--vt-palette-5)">▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀</span><span style="color:var(--vt-palette-8)">─</span> <span style="color:var(--vt-palette-8)">│</span>1818 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Jan</span> <span style="color:var(--vt-palette-8)">Feb</span> <span style="color:var(--vt-palette-8)">Mar</span> <span style="color:var(--vt-palette-8)">Apr</span> <span style="color:var(--vt-palette-8)">│</span>1919 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">■</span> <span style="color:var(--vt-palette-8)">Rent</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-8)">Food</span> <span style="color:var(--vt-palette-8)">│</span>2020 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">16</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">└──────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">A1:C5</span> <span style="color:var(--vt-palette-8)">─┘</span>
M e2e/testdata/screens/chart-axes-light.html +4 -4
@@ -3,19 +3,19 @@
33 <span style="color:var(--vt-palette-0)">Min</span> <span style="color:var(--vt-palette-0)">auto</span> <span style="color:var(--vt-palette-0)">Max</span> <span style="color:var(--vt-palette-0)">auto</span> <span style="color:var(--vt-palette-0)">Log</span> <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Gridlines</span><span style="background:var(--vt-palette-6)"> </span> <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Legend</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">right</span><span style="background:var(--vt-palette-6)"> </span>44 <span style="background:var(--vt-palette-7)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">A</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">B</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">C</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">D</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">E</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">F</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">G</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">H</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">I</span><span style="background:var(--vt-palette-7)"> </span>55 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Month</span><span style="background:var(--vt-palette-6)"> </span> Rent Food <span style="color:var(--vt-palette-6);font-weight:bold">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-6);font-weight:bold">──────────────────────────────┐</span>6-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">2</span><span style="background:var(--vt-palette-7)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">$1,500</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-4)">▅▅▅</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-4)">▅▅▅</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>6+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">2</span><span style="background:var(--vt-palette-7)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">$1,500</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-4)">▁▁▁</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-4)">▁▁▁</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-4)">▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-4)">▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>77 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">3</span><span style="background:var(--vt-palette-7)"> </span> Feb $1,450 $640 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>88 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">$1,250</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>99 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1010 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">6</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">$1,000</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1111 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">7</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>12-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">$750</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▁▁▁</span><span style="color:var(--vt-palette-8)">┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▅▅▅</span><span style="color:var(--vt-palette-8)">┈</span> <span style="color:var(--vt-palette-4)">■</span> <span style="color:var(--vt-palette-0)">Rent</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>13-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▆▆▆</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▇▇▇</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-0)">Food</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>12+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">$750</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▁▁▁</span><span style="color:var(--vt-palette-8)">┈</span> <span style="color:var(--vt-palette-4)">■</span> <span style="color:var(--vt-palette-0)">Rent</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>13+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▂▂▂</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▅▅▅</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▃▃▃</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-0)">Food</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1414 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">10</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">$500</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1515 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">11</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1616 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">12</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">$250</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1717 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">13</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>18-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">14</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">$0</span> <span style="color:var(--vt-palette-8)">┼─────────────────────────────</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>18+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">14</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">$0</span> <span style="color:var(--vt-palette-8)">┼</span><span style="color:var(--vt-palette-4)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">─</span><span style="color:var(--vt-palette-4)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">─</span><span style="color:var(--vt-palette-4)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">─</span><span style="color:var(--vt-palette-4)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1919 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">15</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">Jan</span> <span style="color:var(--vt-palette-0)">Feb</span> <span style="color:var(--vt-palette-0)">Mar</span> <span style="color:var(--vt-palette-0)">Apr</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>2020 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">16</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">└──────────────────────────────────────</span> <span style="color:var(--vt-palette-0)">A1:C5</span> <span style="color:var(--vt-palette-6);font-weight:bold">─◢</span>2121 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">17</span><span style="background:var(--vt-palette-7)"> </span>
M e2e/testdata/screens/chart-axes-narrow.html +4 -4
@@ -6,10 +6,10 @@
66 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">7</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-6);font-weight:bold">──────────────────────────────┐</span>77 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>88 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$2,000</span> <span style="color:var(--vt-palette-8)">┤┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>9-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">▇▇▇</span> <span style="color:var(--vt-palette-6)">▇▇▇</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>10-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$1,000</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▃▃▃</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>11-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>12-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼────────────────────────────────────</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>9+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">▃▃▃</span> <span style="color:var(--vt-palette-6)">▃▃▃</span> <span style="color:var(--vt-palette-6)">▄▄▄</span> <span style="color:var(--vt-palette-6)">▄▄▄</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>10+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$1,000</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>11+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▆▆▆</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▆▆▆</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▆▆▆</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▇▇▇</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>12+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">────</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1313 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">Jan</span> <span style="color:var(--vt-palette-8)">Feb</span> <span style="color:var(--vt-palette-8)">Mar</span> <span style="color:var(--vt-palette-8)">Apr</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1414 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-6)">■</span> <span style="color:var(--vt-palette-8)">Rent</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-8)">Food</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1515 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">16</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">└──────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">A1:C5</span> <span style="color:var(--vt-palette-6);font-weight:bold">─◢</span></pre>\ No newline at end of file
M e2e/testdata/screens/chart-axes.html +4 -4
@@ -3,19 +3,19 @@
33 <span style="color:var(--vt-palette-8)">Min</span> <span style="color:var(--vt-palette-8)">auto</span> <span style="color:var(--vt-palette-8)">Max</span> <span style="color:var(--vt-palette-8)">auto</span> <span style="color:var(--vt-palette-8)">Log</span> <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Gridlines</span><span style="background:var(--vt-palette-6)"> </span> <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Legend</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">right</span><span style="background:var(--vt-palette-6)"> </span>44 <span style="background:var(--vt-palette-8)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">A</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">B</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">C</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">D</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">E</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">F</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">G</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">H</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">I</span><span style="background:var(--vt-palette-8)"> </span>55 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Month</span><span style="background:var(--vt-palette-6)"> </span> Rent Food <span style="color:var(--vt-palette-6);font-weight:bold">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-6);font-weight:bold">──────────────────────────────┐</span>6-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$1,500</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-6)">▅▅▅</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-6)">▅▅▅</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>6+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$1,500</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-6)">▁▁▁</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-6)">▁▁▁</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-6)">▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-6)">▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>77 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Feb $1,450 $640 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>88 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$1,250</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>99 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1010 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$1,000</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1111 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">7</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>12-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$750</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▁▁▁</span><span style="color:var(--vt-palette-8)">┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▅▅▅</span><span style="color:var(--vt-palette-8)">┈</span> <span style="color:var(--vt-palette-6)">■</span> <span style="color:var(--vt-palette-8)">Rent</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>13-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▆▆▆</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▇▇▇</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-8)">Food</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>12+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$750</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▁▁▁</span><span style="color:var(--vt-palette-8)">┈</span> <span style="color:var(--vt-palette-6)">■</span> <span style="color:var(--vt-palette-8)">Rent</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>13+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▂▂▂</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▅▅▅</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▃▃▃</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-8)">Food</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1414 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$500</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1515 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1616 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$250</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1717 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>18-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼─────────────────────────────</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>18+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">─</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">─</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">─</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1919 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">Jan</span> <span style="color:var(--vt-palette-8)">Feb</span> <span style="color:var(--vt-palette-8)">Mar</span> <span style="color:var(--vt-palette-8)">Apr</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>2020 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">16</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">└──────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">A1:C5</span> <span style="color:var(--vt-palette-6);font-weight:bold">─◢</span>2121 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">17</span><span style="background:var(--vt-palette-8)"> </span>
M e2e/testdata/screens/chart-bar-percent.html +4 -4
@@ -3,13 +3,13 @@
33 44 <span style="background:var(--vt-palette-8)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">A</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">B</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">C</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">D</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">E</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">F</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">G</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">H</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">I</span><span style="background:var(--vt-palette-8)"> </span>55 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Month</span><span style="background:var(--vt-palette-6)"> </span> Rent Food <span style="color:var(--vt-palette-8)">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-8)">──────────────────────────────┐</span>6-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Jan</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">████████████████████████</span><span style="color:var(--vt-palette-6);background:var(--vt-palette-5)">▊</span><span style="color:var(--vt-palette-5)">██████████</span> <span style="color:var(--vt-palette-8)">│</span>6+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Jan</span> <span style="color:var(--vt-palette-6)">▐████████████████████████</span><span style="color:var(--vt-palette-6);background:var(--vt-palette-5)">▎</span><span style="color:var(--vt-palette-5)">█████████▌</span> <span style="color:var(--vt-palette-8)">│</span>77 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Feb $1,450 $640 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>8-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Feb</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">████████████████████████</span><span style="color:var(--vt-palette-6);background:var(--vt-palette-5)">▎</span><span style="color:var(--vt-palette-5)">██████████</span> <span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Feb</span> <span style="color:var(--vt-palette-6)">▐███████████████████████</span><span style="color:var(--vt-palette-6);background:var(--vt-palette-5)">▊</span><span style="color:var(--vt-palette-5)">██████████▌</span> <span style="color:var(--vt-palette-8)">│</span>99 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>10-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Mar</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">████████████████████████</span><span style="color:var(--vt-palette-6);background:var(--vt-palette-5)">▉</span><span style="color:var(--vt-palette-5)">██████████</span> <span style="color:var(--vt-palette-8)">│</span>10+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Mar</span> <span style="color:var(--vt-palette-6)">▐████████████████████████</span><span style="color:var(--vt-palette-6);background:var(--vt-palette-5)">▍</span><span style="color:var(--vt-palette-5)">█████████▌</span> <span style="color:var(--vt-palette-8)">│</span>1111 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">7</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>12-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Apr</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">███████████████████████</span><span style="color:var(--vt-palette-6);background:var(--vt-palette-5)">▉</span><span style="color:var(--vt-palette-5)">███████████</span> <span style="color:var(--vt-palette-8)">│</span>12+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Apr</span> <span style="color:var(--vt-palette-6)">▐███████████████████████</span><span style="color:var(--vt-palette-6);background:var(--vt-palette-5)">▍</span><span style="color:var(--vt-palette-5)">██████████▌</span> <span style="color:var(--vt-palette-8)">│</span>1313 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>1414 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>1515 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>
M e2e/testdata/screens/chart-bar.html +8 -8
@@ -3,17 +3,17 @@
33 44 <span style="background:var(--vt-palette-8)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">A</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">B</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">C</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">D</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">E</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">F</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">G</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">H</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">I</span><span style="background:var(--vt-palette-8)"> </span>55 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Month</span><span style="background:var(--vt-palette-6)"> </span> Rent Food <span style="color:var(--vt-palette-8)">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-8)">──────────────────────────────┐</span>6-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Jan</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">██████████████████████████████████▊</span><span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>7-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Feb $1,450 $640 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-5)">██████████████▍</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>6+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Jan</span> <span style="color:var(--vt-palette-6)">▐██████████████████████████████████▎</span><span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>7+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Feb $1,450 $640 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-5)">▐█████████████▉</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>88 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>9-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Feb</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">██████████████████████████████████▊</span><span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>10-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-5)">███████████████▍</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>9+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Feb</span> <span style="color:var(--vt-palette-6)">▐██████████████████████████████████▎</span><span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>10+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-5)">▐██████████████▉</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>1111 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">7</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>12-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Mar</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">████████████████████████████████████</span> <span style="color:var(--vt-palette-8)">│</span>13-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-5)">██████████████▊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>12+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Mar</span> <span style="color:var(--vt-palette-6)">▐███████████████████████████████████▌</span> <span style="color:var(--vt-palette-8)">│</span>13+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-5)">▐██████████████▎</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>1414 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>15-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Apr</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">████████████████████████████████████</span> <span style="color:var(--vt-palette-8)">│</span>16-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-5)">████████████████▊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>15+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Apr</span> <span style="color:var(--vt-palette-6)">▐███████████████████████████████████▌</span> <span style="color:var(--vt-palette-8)">│</span>16+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-5)">▐████████████████▎</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">┊</span> <span style="color:var(--vt-palette-8)">│</span>1717 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">└───────────┬───────────┬───────────┬</span> <span style="color:var(--vt-palette-8)">│</span>1818 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">$500</span> <span style="color:var(--vt-palette-8)">$1,000</span> <span style="color:var(--vt-palette-8)">$1,500</span> <span style="color:var(--vt-palette-8)">│</span>1919 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">■</span> <span style="color:var(--vt-palette-8)">Rent</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-8)">Food</span> <span style="color:var(--vt-palette-8)">│</span>
M e2e/testdata/screens/chart-editor-light.html +4 -4
@@ -5,16 +5,16 @@
55 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Month</span><span style="background:var(--vt-palette-6)"> </span> Rent Food <span style="color:var(--vt-palette-6);font-weight:bold">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-6);font-weight:bold">──────────────────────────────┐</span>66 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">2</span><span style="background:var(--vt-palette-7)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>77 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">3</span><span style="background:var(--vt-palette-7)"> </span> Feb $1,450 $640 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>8-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">$1,500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-4)">▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>8+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">$1,500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-4)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>99 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1010 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">6</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1111 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">7</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">$1,000</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>12-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▂▂▂</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>13-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▅▅▅</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▇▇▇</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▅▅▅</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>12+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>13+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▁▁▁</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▃▃▃</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▁▁▁</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▆▆▆</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1414 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">10</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">$500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1515 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">11</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1616 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">12</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>17-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">13</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">$0</span> <span style="color:var(--vt-palette-8)">┼────────────────────────────────────</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>17+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">13</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">$0</span> <span style="color:var(--vt-palette-8)">┼──</span><span style="color:var(--vt-palette-4)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-4)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-4)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-4)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">────</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1818 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">14</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-0)">Jan</span> <span style="color:var(--vt-palette-0)">Feb</span> <span style="color:var(--vt-palette-0)">Mar</span> <span style="color:var(--vt-palette-0)">Apr</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1919 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">15</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-4)">■</span> <span style="color:var(--vt-palette-0)">Rent</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-0)">Food</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>2020 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">16</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">└──────────────────────────────────────</span> <span style="color:var(--vt-palette-0)">A1:C5</span> <span style="color:var(--vt-palette-6);font-weight:bold">─◢</span>
M e2e/testdata/screens/chart-editor.html +4 -4
@@ -5,16 +5,16 @@
55 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Month</span><span style="background:var(--vt-palette-6)"> </span> Rent Food <span style="color:var(--vt-palette-6);font-weight:bold">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-6);font-weight:bold">──────────────────────────────┐</span>66 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>77 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Feb $1,450 $640 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>8-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$1,500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>8+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$1,500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>99 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1010 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1111 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">7</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$1,000</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>12-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▂▂▂</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>13-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▅▅▅</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▇▇▇</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▅▅▅</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>12+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>13+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▁▁▁</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▃▃▃</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▁▁▁</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▆▆▆</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1414 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1515 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1616 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>17-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼────────────────────────────────────</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>17+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">────</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1818 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">Jan</span> <span style="color:var(--vt-palette-8)">Feb</span> <span style="color:var(--vt-palette-8)">Mar</span> <span style="color:var(--vt-palette-8)">Apr</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1919 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-6)">■</span> <span style="color:var(--vt-palette-8)">Rent</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-8)">Food</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>2020 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">16</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">└──────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">A1:C5</span> <span style="color:var(--vt-palette-6);font-weight:bold">─◢</span>
M e2e/testdata/screens/chart-light.html +4 -4
@@ -5,16 +5,16 @@
55 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Month</span><span style="background:var(--vt-palette-6)"> </span> Rent Food <span style="color:var(--vt-palette-8)">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-8)">──────────────────────────────┐</span>66 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">2</span><span style="background:var(--vt-palette-7)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>77 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">3</span><span style="background:var(--vt-palette-7)"> </span> Feb $1,450 $640 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>8-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$1,500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-4)">▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$1,500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-4)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>99 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-8)">│</span>1010 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">6</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-8)">│</span>1111 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">7</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$1,000</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>12-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▂▂▂</span> <span style="color:var(--vt-palette-8)">│</span>13-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▅▅▅</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▇▇▇</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▅▅▅</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-8)">│</span>12+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-4)">███</span> <span style="color:var(--vt-palette-8)">│</span>13+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▁▁▁</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▃▃▃</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▁▁▁</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">▆▆▆</span> <span style="color:var(--vt-palette-8)">│</span>1414 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">10</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>1515 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">11</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-8)">│</span>1616 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">12</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-4)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-8)">│</span>17-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">13</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$0</span> <span style="color:var(--vt-palette-8)">┼────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">│</span>17+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">13</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$0</span> <span style="color:var(--vt-palette-8)">┼──</span><span style="color:var(--vt-palette-4)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-4)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-4)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-4)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">────</span> <span style="color:var(--vt-palette-8)">│</span>1818 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">14</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">Jan</span> <span style="color:var(--vt-palette-0)">Feb</span> <span style="color:var(--vt-palette-0)">Mar</span> <span style="color:var(--vt-palette-0)">Apr</span> <span style="color:var(--vt-palette-8)">│</span>1919 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">15</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">■</span> <span style="color:var(--vt-palette-0)">Rent</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-0)">Food</span> <span style="color:var(--vt-palette-8)">│</span>2020 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">16</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">└──────────────────────────────────────</span> <span style="color:var(--vt-palette-0)">A1:C5</span> <span style="color:var(--vt-palette-8)">─┘</span>
M e2e/testdata/screens/chart-line-light.html +4 -4
@@ -5,15 +5,15 @@
55 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Month</span><span style="background:var(--vt-palette-6)"> </span> Rent Food <span style="color:var(--vt-palette-8)">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-8)">──────────────────────────────┐</span>66 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">2</span><span style="background:var(--vt-palette-7)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>77 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">3</span><span style="background:var(--vt-palette-7)"> </span> Feb $1,450 $640 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$1,600</span> <span style="color:var(--vt-palette-8)">┤┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>8-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-4)">⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠔⠒⠒⠒⠒⠒⠊⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</span> <span style="color:var(--vt-palette-8)">│</span>9-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$1,400</span> <span style="color:var(--vt-palette-8)">┤┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">⢀⣀⣀⣀⣀⣀⡠⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</span> <span style="color:var(--vt-palette-8)">│</span>9+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$1,400</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-4)">⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>1010 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">6</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>1111 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">7</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$1,200</span> <span style="color:var(--vt-palette-8)">┤┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>1212 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>1313 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$1,000</span> <span style="color:var(--vt-palette-8)">┤┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>1414 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">10</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>15-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">11</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$800</span> <span style="color:var(--vt-palette-8)">┤┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span><span style="color:var(--vt-palette-5)">⢀⣀</span> <span style="color:var(--vt-palette-8)">│</span>16-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">12</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-5)">⣀⣀⣀⠤⠤⠤⠤⠤⠤⠒⠒⠒⠒⠒⠢⠤⠤⠤⠤⠤⢄⣀⣀⣀⡠⠤⠤⠔⠒⠒⠊⠉⠉⠁</span> <span style="color:var(--vt-palette-8)">│</span>15+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">11</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$800</span> <span style="color:var(--vt-palette-8)">┤┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>16+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">12</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-5)">⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⠤⠤⠤⠤⠤⠤</span> <span style="color:var(--vt-palette-8)">│</span>1717 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">13</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$600</span> <span style="color:var(--vt-palette-8)">┼────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">│</span>1818 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">14</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">Jan</span> <span style="color:var(--vt-palette-0)">Feb</span> <span style="color:var(--vt-palette-0)">Mar</span> <span style="color:var(--vt-palette-0)">Apr</span> <span style="color:var(--vt-palette-8)">│</span>1919 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">15</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">■</span> <span style="color:var(--vt-palette-0)">Rent</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-0)">Food</span> <span style="color:var(--vt-palette-8)">│</span>
M e2e/testdata/screens/chart-line.html +4 -4
@@ -5,15 +5,15 @@
55 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Month</span><span style="background:var(--vt-palette-6)"> </span> Rent Food <span style="color:var(--vt-palette-8)">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-8)">──────────────────────────────┐</span>66 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>77 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Feb $1,450 $640 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$1,600</span> <span style="color:var(--vt-palette-8)">┤┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>8-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-6)">⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠔⠒⠒⠒⠒⠒⠊⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</span> <span style="color:var(--vt-palette-8)">│</span>9-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$1,400</span> <span style="color:var(--vt-palette-8)">┤┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">⢀⣀⣀⣀⣀⣀⡠⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</span> <span style="color:var(--vt-palette-8)">│</span>9+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$1,400</span> <span style="color:var(--vt-palette-8)">┤</span><span style="color:var(--vt-palette-6)">⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>1010 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>1111 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">7</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$1,200</span> <span style="color:var(--vt-palette-8)">┤┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>1212 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>1313 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$1,000</span> <span style="color:var(--vt-palette-8)">┤┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>1414 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>15-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$800</span> <span style="color:var(--vt-palette-8)">┤┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span><span style="color:var(--vt-palette-5)">⢀⣀</span> <span style="color:var(--vt-palette-8)">│</span>16-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-5)">⣀⣀⣀⠤⠤⠤⠤⠤⠤⠒⠒⠒⠒⠒⠢⠤⠤⠤⠤⠤⢄⣀⣀⣀⡠⠤⠤⠔⠒⠒⠊⠉⠉⠁</span> <span style="color:var(--vt-palette-8)">│</span>15+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$800</span> <span style="color:var(--vt-palette-8)">┤┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>16+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span><span style="color:var(--vt-palette-5)">⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⠤⠤⠤⠤⠤⠤</span> <span style="color:var(--vt-palette-8)">│</span>1717 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$600</span> <span style="color:var(--vt-palette-8)">┼────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">│</span>1818 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Jan</span> <span style="color:var(--vt-palette-8)">Feb</span> <span style="color:var(--vt-palette-8)">Mar</span> <span style="color:var(--vt-palette-8)">Apr</span> <span style="color:var(--vt-palette-8)">│</span>1919 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">■</span> <span style="color:var(--vt-palette-8)">Rent</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-8)">Food</span> <span style="color:var(--vt-palette-8)">│</span>
M e2e/testdata/screens/chart-narrow.html +4 -4
@@ -6,10 +6,10 @@
66 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">7</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-6);font-weight:bold">──────────────────────────────┐</span>77 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>88 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$2,000</span> <span style="color:var(--vt-palette-8)">┤┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>9-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">▇▇▇</span> <span style="color:var(--vt-palette-6)">▇▇▇</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>10-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$1,000</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▃▃▃</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>11-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>12-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼────────────────────────────────────</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>9+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">▃▃▃</span> <span style="color:var(--vt-palette-6)">▃▃▃</span> <span style="color:var(--vt-palette-6)">▄▄▄</span> <span style="color:var(--vt-palette-6)">▄▄▄</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>10+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$1,000</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>11+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▆▆▆</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▆▆▆</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▆▆▆</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▇▇▇</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>12+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">────</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1313 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">Jan</span> <span style="color:var(--vt-palette-8)">Feb</span> <span style="color:var(--vt-palette-8)">Mar</span> <span style="color:var(--vt-palette-8)">Apr</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1414 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-6)">■</span> <span style="color:var(--vt-palette-8)">Rent</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-8)">Food</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1515 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">16</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-6);font-weight:bold">└──────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">A1:C5</span> <span style="color:var(--vt-palette-6);font-weight:bold">─◢</span></pre>\ No newline at end of file
M e2e/testdata/screens/chart-selected.html +4 -4
@@ -5,16 +5,16 @@
55 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Month</span><span style="background:var(--vt-palette-6)"> </span> Rent Food <span style="color:var(--vt-palette-6);font-weight:bold">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-6);font-weight:bold">──────────────────────────────┐</span>66 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>77 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Feb $1,450 $640 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>8-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$1,500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>8+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$1,500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>99 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1010 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1111 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">7</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$1,000</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>12-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▂▂▂</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>13-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▅▅▅</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▇▇▇</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▅▅▅</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>12+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>13+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▁▁▁</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▃▃▃</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▁▁▁</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▆▆▆</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1414 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1515 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1616 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>17-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼────────────────────────────────────</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>17+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">────</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1818 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-8)">Jan</span> <span style="color:var(--vt-palette-8)">Feb</span> <span style="color:var(--vt-palette-8)">Mar</span> <span style="color:var(--vt-palette-8)">Apr</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>1919 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span> <span style="color:var(--vt-palette-6)">■</span> <span style="color:var(--vt-palette-8)">Rent</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-8)">Food</span> <span style="color:var(--vt-palette-6);font-weight:bold">│</span>2020 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">16</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-6);font-weight:bold">└──────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">A1:C5</span> <span style="color:var(--vt-palette-6);font-weight:bold">─◢</span>
M e2e/testdata/screens/chart-stacked-light.html +4 -4
@@ -5,16 +5,16 @@
55 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Month</span><span style="background:var(--vt-palette-6)"> </span> Rent Food <span style="color:var(--vt-palette-8)">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-8)">──────────────────────────────┐</span>66 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">2</span><span style="background:var(--vt-palette-7)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>77 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">3</span><span style="background:var(--vt-palette-7)"> </span> Feb $1,450 $640 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$2,500</span> <span style="color:var(--vt-palette-8)">┤┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>8-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-5)">▂▂▂▂▂▂</span> <span style="color:var(--vt-palette-5)">▃▃▃▃▃▃</span> <span style="color:var(--vt-palette-5)">▄▄▄▄▄▄</span> <span style="color:var(--vt-palette-5)">▆▆▆▆▆▆</span> <span style="color:var(--vt-palette-8)">│</span>9-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$2,000</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-5)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-5)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-5)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-5)">██████</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-5)">▂▂▂▂▂▂</span> <span style="color:var(--vt-palette-8)">│</span>9+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$2,000</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-5)">▆▆▆▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-5)">▇▇▇▇▇▇</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-5)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-5)">██████</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>1010 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">6</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-5)">██████</span> <span style="color:var(--vt-palette-5)">██████</span> <span style="color:var(--vt-palette-5)">██████</span> <span style="color:var(--vt-palette-5)">██████</span> <span style="color:var(--vt-palette-8)">│</span>11-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">7</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$1,500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-4);background:var(--vt-palette-5)">▆▆▆▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4);background:var(--vt-palette-5)">▆▆▆▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4)">██████</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>11+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">7</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$1,500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-4);background:var(--vt-palette-5)">▂▂▂▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4);background:var(--vt-palette-5)">▂▂▂▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4);background:var(--vt-palette-5)">▄▄▄▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4);background:var(--vt-palette-5)">▄▄▄▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>1212 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">██████</span> <span style="color:var(--vt-palette-4)">██████</span> <span style="color:var(--vt-palette-4)">██████</span> <span style="color:var(--vt-palette-4)">██████</span> <span style="color:var(--vt-palette-8)">│</span>1313 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$1,000</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-4)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4)">██████</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>1414 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">10</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">██████</span> <span style="color:var(--vt-palette-4)">██████</span> <span style="color:var(--vt-palette-4)">██████</span> <span style="color:var(--vt-palette-4)">██████</span> <span style="color:var(--vt-palette-8)">│</span>1515 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">11</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-4)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-4)">██████</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>1616 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">12</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">██████</span> <span style="color:var(--vt-palette-4)">██████</span> <span style="color:var(--vt-palette-4)">██████</span> <span style="color:var(--vt-palette-4)">██████</span> <span style="color:var(--vt-palette-8)">│</span>17-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">13</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$0</span> <span style="color:var(--vt-palette-8)">┼────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">│</span>17+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">13</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">$0</span> <span style="color:var(--vt-palette-8)">┼──</span><span style="color:var(--vt-palette-4)">▀▀▀▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-4)">▀▀▀▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-4)">▀▀▀▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-4)">▀▀▀▀▀▀</span><span style="color:var(--vt-palette-8)">────</span> <span style="color:var(--vt-palette-8)">│</span>1818 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">14</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">Jan</span> <span style="color:var(--vt-palette-0)">Feb</span> <span style="color:var(--vt-palette-0)">Mar</span> <span style="color:var(--vt-palette-0)">Apr</span> <span style="color:var(--vt-palette-8)">│</span>1919 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">15</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">■</span> <span style="color:var(--vt-palette-0)">Rent</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-0)">Food</span> <span style="color:var(--vt-palette-8)">│</span>2020 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">16</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">└──────────────────────────────────────</span> <span style="color:var(--vt-palette-0)">A1:C5</span> <span style="color:var(--vt-palette-8)">─┘</span>
M e2e/testdata/screens/chart-stacked.html +4 -4
@@ -5,16 +5,16 @@
55 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Month</span><span style="background:var(--vt-palette-6)"> </span> Rent Food <span style="color:var(--vt-palette-8)">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-8)">──────────────────────────────┐</span>66 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>77 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Feb $1,450 $640 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$2,500</span> <span style="color:var(--vt-palette-8)">┤┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>8-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-5)">▂▂▂▂▂▂</span> <span style="color:var(--vt-palette-5)">▃▃▃▃▃▃</span> <span style="color:var(--vt-palette-5)">▄▄▄▄▄▄</span> <span style="color:var(--vt-palette-5)">▆▆▆▆▆▆</span> <span style="color:var(--vt-palette-8)">│</span>9-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$2,000</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-5)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-5)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-5)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-5)">██████</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-5)">▂▂▂▂▂▂</span> <span style="color:var(--vt-palette-8)">│</span>9+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$2,000</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-5)">▆▆▆▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-5)">▇▇▇▇▇▇</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-5)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-5)">██████</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>1010 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-5)">██████</span> <span style="color:var(--vt-palette-5)">██████</span> <span style="color:var(--vt-palette-5)">██████</span> <span style="color:var(--vt-palette-5)">██████</span> <span style="color:var(--vt-palette-8)">│</span>11-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">7</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$1,500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6);background:var(--vt-palette-5)">▆▆▆▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6);background:var(--vt-palette-5)">▆▆▆▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">██████</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>11+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">7</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$1,500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6);background:var(--vt-palette-5)">▂▂▂▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6);background:var(--vt-palette-5)">▂▂▂▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6);background:var(--vt-palette-5)">▄▄▄▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6);background:var(--vt-palette-5)">▄▄▄▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>1212 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">██████</span> <span style="color:var(--vt-palette-6)">██████</span> <span style="color:var(--vt-palette-6)">██████</span> <span style="color:var(--vt-palette-6)">██████</span> <span style="color:var(--vt-palette-8)">│</span>1313 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$1,000</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">██████</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>1414 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">██████</span> <span style="color:var(--vt-palette-6)">██████</span> <span style="color:var(--vt-palette-6)">██████</span> <span style="color:var(--vt-palette-6)">██████</span> <span style="color:var(--vt-palette-8)">│</span>1515 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">██████</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">██████</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>1616 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">██████</span> <span style="color:var(--vt-palette-6)">██████</span> <span style="color:var(--vt-palette-6)">██████</span> <span style="color:var(--vt-palette-6)">██████</span> <span style="color:var(--vt-palette-8)">│</span>17-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">│</span>17+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼──</span><span style="color:var(--vt-palette-6)">▀▀▀▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀▀▀▀</span><span style="color:var(--vt-palette-8)">────</span> <span style="color:var(--vt-palette-8)">│</span>1818 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Jan</span> <span style="color:var(--vt-palette-8)">Feb</span> <span style="color:var(--vt-palette-8)">Mar</span> <span style="color:var(--vt-palette-8)">Apr</span> <span style="color:var(--vt-palette-8)">│</span>1919 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">■</span> <span style="color:var(--vt-palette-8)">Rent</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-8)">Food</span> <span style="color:var(--vt-palette-8)">│</span>2020 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">16</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">└──────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">A1:C5</span> <span style="color:var(--vt-palette-8)">─┘</span>
M e2e/testdata/screens/chart-wide.html +4 -4
@@ -5,16 +5,16 @@
55 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Month</span><span style="background:var(--vt-palette-6)"> </span> Rent Food <span style="color:var(--vt-palette-8)">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-8)">──────────────────────────────┐</span>66 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>77 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Feb $1,450 $640 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>8-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$1,500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$1,500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>99 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-8)">│</span>1010 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-8)">│</span>1111 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">7</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$1,000</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>12-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▂▂▂</span> <span style="color:var(--vt-palette-8)">│</span>13-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▅▅▅</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▇▇▇</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▅▅▅</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-8)">│</span>12+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-8)">│</span>13+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▁▁▁</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▃▃▃</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▁▁▁</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▆▆▆</span> <span style="color:var(--vt-palette-8)">│</span>1414 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>1515 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-8)">│</span>1616 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-8)">│</span>17-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">│</span>17+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">────</span> <span style="color:var(--vt-palette-8)">│</span>1818 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Jan</span> <span style="color:var(--vt-palette-8)">Feb</span> <span style="color:var(--vt-palette-8)">Mar</span> <span style="color:var(--vt-palette-8)">Apr</span> <span style="color:var(--vt-palette-8)">│</span>1919 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">■</span> <span style="color:var(--vt-palette-8)">Rent</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-8)">Food</span> <span style="color:var(--vt-palette-8)">│</span>2020 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">16</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">└──────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">A1:C5</span> <span style="color:var(--vt-palette-8)">─┘</span>
M e2e/testdata/screens/chart.html +4 -4
@@ -5,16 +5,16 @@
55 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Month</span><span style="background:var(--vt-palette-6)"> </span> Rent Food <span style="color:var(--vt-palette-8)">┌─</span> <span style="font-weight:bold">Rent</span> <span style="font-weight:bold">and</span> <span style="font-weight:bold">Food</span> <span style="color:var(--vt-palette-8)">──────────────────────────────┐</span>66 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> Jan $1,450 $600 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>77 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Feb $1,450 $640 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span>8-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$1,500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">▆▆▆</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Mar $1,500 $612 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$1,500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">▂▂▂</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">▄▄▄</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>99 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Apr $1,500 $700 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-8)">│</span>1010 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-8)">│</span>1111 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">7</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$1,000</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-8)">┈┈┈┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>12-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▂▂▂</span> <span style="color:var(--vt-palette-8)">│</span>13-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▅▅▅</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▇▇▇</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▅▅▅</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-8)">│</span>12+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-6)">███</span> <span style="color:var(--vt-palette-8)">│</span>13+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▁▁▁</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▃▃▃</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▁▁▁</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">▆▆▆</span> <span style="color:var(--vt-palette-8)">│</span>1414 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$500</span> <span style="color:var(--vt-palette-8)">┤┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈</span><span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span><span style="color:var(--vt-palette-8)">┈┈┈</span> <span style="color:var(--vt-palette-8)">│</span>1515 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-8)">│</span>1616 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-6)">███</span><span style="color:var(--vt-palette-5)">███</span> <span style="color:var(--vt-palette-8)">│</span>17-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">│</span>17+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">$0</span> <span style="color:var(--vt-palette-8)">┼──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">──</span><span style="color:var(--vt-palette-6)">▀▀▀</span><span style="color:var(--vt-palette-5)">▀▀▀</span><span style="color:var(--vt-palette-8)">────</span> <span style="color:var(--vt-palette-8)">│</span>1818 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Jan</span> <span style="color:var(--vt-palette-8)">Feb</span> <span style="color:var(--vt-palette-8)">Mar</span> <span style="color:var(--vt-palette-8)">Apr</span> <span style="color:var(--vt-palette-8)">│</span>1919 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">■</span> <span style="color:var(--vt-palette-8)">Rent</span> <span style="color:var(--vt-palette-5)">■</span> <span style="color:var(--vt-palette-8)">Food</span> <span style="color:var(--vt-palette-8)">│</span>2020 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">16</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">└──────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">A1:C5</span> <span style="color:var(--vt-palette-8)">─┘</span>
M e2e/testdata/screens/error-goto.html +1 -1
@@ -27,4 +27,4 @@
2727 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">23</span><span style="background:var(--vt-palette-8)"> </span>2828 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">24</span><span style="background:var(--vt-palette-8)"> </span>2929 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">25</span><span style="background:var(--vt-palette-8)"> </span>30-<span style="color:var(--vt-palette-9);font-weight:bold">Not</span> <span style="color:var(--vt-palette-9);font-weight:bold">a</span> <span style="color:var(--vt-palette-9);font-weight:bold">cell,</span> <span style="color:var(--vt-palette-9);font-weight:bold">range</span> <span style="color:var(--vt-palette-9);font-weight:bold">or</span> <span style="color:var(--vt-palette-9);font-weight:bold">named</span> <span style="color:var(--vt-palette-9);font-weight:bold">range:</span> <span style="color:var(--vt-palette-9);font-weight:bold">nope</span> <span style="color:var(--vt-palette-8)">press</span> <span style="color:var(--vt-palette-8)">any</span> <span style="color:var(--vt-palette-8)">key</span></pre>\ No newline at end of file30+<span style="color:var(--vt-palette-9);font-weight:bold">Not</span> <span style="color:var(--vt-palette-9);font-weight:bold">a</span> <span style="color:var(--vt-palette-9);font-weight:bold">cell,</span> <span style="color:var(--vt-palette-9);font-weight:bold">range,</span> <span style="color:var(--vt-palette-9);font-weight:bold">named</span> <span style="color:var(--vt-palette-9);font-weight:bold">range</span> <span style="color:var(--vt-palette-9);font-weight:bold">or</span> <span style="color:var(--vt-palette-9);font-weight:bold">region:</span> <span style="color:var(--vt-palette-9);font-weight:bold">nope</span> <span style="color:var(--vt-palette-8)">press</span> <span style="color:var(--vt-palette-8)">any</span> <span style="color:var(--vt-palette-8)">key</span></pre>\ No newline at end of file
M e2e/testdata/screens/pipe-quit-light.html +5 -5
@@ -1,11 +1,11 @@
11 <pre class="screen"> <span style="text-decoration:underline">F</span>ile <span style="text-decoration:underline">E</span>dit <span style="text-decoration:underline">V</span>iew <span style="text-decoration:underline">I</span>nsert F<span style="text-decoration:underline">o</span>rmat <span style="text-decoration:underline">D</span>ata <span style="text-decoration:underline">H</span>elp <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">MENU</span><span style="background:var(--vt-palette-6)"> </span>22 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">A1:B3</span><span style="background:var(--vt-palette-7)"> </span> name33 Send A1:B3 as NUON? <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Enter</span><span style="background:var(--vt-palette-7)"> </span> Send selection <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">S</span><span style="background:var(--vt-palette-7)"> </span> Send sheet <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">D</span><span style="background:var(--vt-palette-7)"> </span> Don&#39;t send <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Esc</span><span style="background:var(--vt-palette-7)"> </span> Cancel4-<span style="background:var(--vt-palette-7)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">A</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">B</span><span style="background:var(--vt-palette-4)"> </span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">C</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">D</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">E</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">F</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">G</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">H</span><span style="background:var(--vt-palette-7)"> </span>5-<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">name</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">size</span><span style="background:var(--vt-palette-4)"> </span> modified6-<span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">2</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">CLAUDE.md</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">1.6</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">kB</span><span style="background:var(--vt-palette-4)"> </span> 9/27/2026 11:27:317-<span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">3</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">go.mod</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">812</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">B</span><span style="background:var(--vt-palette-4)"> </span> 9/20/2026 8:00:008-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> e2e 4.2 kB 9/28/2026 17:45:104+<span style="background:var(--vt-palette-7)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">A</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">B</span><span style="background:var(--vt-palette-4)"> </span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">C</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">D</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">E</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">F</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">G</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">H</span><span style="background:var(--vt-palette-7)"> </span>5+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">name</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">size</span><span style="background:var(--vt-palette-4)"> </span> modified6+<span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">2</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">CLAUDE.md</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">1.6</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">kB</span><span style="background:var(--vt-palette-4)"> </span> 9/27/2026 11:27:317+<span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">3</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">go.mod</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">812</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">B</span><span style="background:var(--vt-palette-4)"> </span> 9/20/2026 8:00:008+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> e2e 4.2 kB 9/28/2026 17:45:1099 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span>1010 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">6</span><span style="background:var(--vt-palette-7)"> </span>1111 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">7</span><span style="background:var(--vt-palette-7)"> </span>
M e2e/testdata/screens/pipe-quit.html +5 -5
@@ -1,11 +1,11 @@
11 <pre class="screen"> <span style="text-decoration:underline">F</span>ile <span style="text-decoration:underline">E</span>dit <span style="text-decoration:underline">V</span>iew <span style="text-decoration:underline">I</span>nsert F<span style="text-decoration:underline">o</span>rmat <span style="text-decoration:underline">D</span>ata <span style="text-decoration:underline">H</span>elp <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">MENU</span><span style="background:var(--vt-palette-6)"> </span>22 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">A1:B3</span><span style="background:var(--vt-palette-8)"> </span> name33 Send A1:B3 as NUON? <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Enter</span><span style="background:var(--vt-palette-8)"> </span> Send selection <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">S</span><span style="background:var(--vt-palette-8)"> </span> Send sheet <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">D</span><span style="background:var(--vt-palette-8)"> </span> Don&#39;t send <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Esc</span><span style="background:var(--vt-palette-8)"> </span> Cancel4-<span style="background:var(--vt-palette-8)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">A</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">B</span><span style="background:var(--vt-palette-4)"> </span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">C</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">D</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">E</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">F</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">G</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">H</span><span style="background:var(--vt-palette-8)"> </span>5-<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">name</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">size</span><span style="background:var(--vt-palette-4)"> </span> modified6-<span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">2</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">CLAUDE.md</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">1.6</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">kB</span><span style="background:var(--vt-palette-4)"> </span> 9/27/2026 11:27:317-<span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">3</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">go.mod</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">812</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">B</span><span style="background:var(--vt-palette-4)"> </span> 9/20/2026 8:00:008-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> e2e 4.2 kB 9/28/2026 17:45:104+<span style="background:var(--vt-palette-8)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">A</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">B</span><span style="background:var(--vt-palette-4)"> </span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">C</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">D</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">E</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">F</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">G</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">H</span><span style="background:var(--vt-palette-8)"> </span>5+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">name</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">size</span><span style="background:var(--vt-palette-4)"> </span> modified6+<span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">2</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">CLAUDE.md</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">1.6</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">kB</span><span style="background:var(--vt-palette-4)"> </span> 9/27/2026 11:27:317+<span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">3</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">go.mod</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">812</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">B</span><span style="background:var(--vt-palette-4)"> </span> 9/20/2026 8:00:008+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> e2e 4.2 kB 9/28/2026 17:45:1099 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span>1010 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span>1111 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">7</span><span style="background:var(--vt-palette-8)"> </span>
M e2e/testdata/screens/pipe-status-light.html +5 -5
@@ -1,11 +1,11 @@
11 <pre class="screen"> <span style="text-decoration:underline">F</span>ile <span style="text-decoration:underline">E</span>dit <span style="text-decoration:underline">V</span>iew <span style="text-decoration:underline">I</span>nsert F<span style="text-decoration:underline">o</span>rmat <span style="text-decoration:underline">D</span>ata <span style="text-decoration:underline">H</span>elp <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">READY</span><span style="background:var(--vt-palette-6)"> </span>22 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">A1</span><span style="background:var(--vt-palette-7)"> </span> name33 Read 4 rows of NUON from standard input4-<span style="background:var(--vt-palette-7)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">A</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">B</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">C</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">D</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">E</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">F</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">G</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">H</span><span style="background:var(--vt-palette-7)"> </span>5-<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">name</span><span style="background:var(--vt-palette-6)"> </span> size modified6-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">2</span><span style="background:var(--vt-palette-7)"> </span> CLAUDE.md 1.6 kB 9/27/2026 11:27:317-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">3</span><span style="background:var(--vt-palette-7)"> </span> go.mod 812 B 9/20/2026 8:00:008-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> e2e 4.2 kB 9/28/2026 17:45:104+<span style="background:var(--vt-palette-7)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">A</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">B</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">C</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">D</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">E</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">F</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">G</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">H</span><span style="background:var(--vt-palette-7)"> </span>5+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">name</span><span style="background:var(--vt-palette-6)"> </span> size modified6+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">2</span><span style="background:var(--vt-palette-7)"> </span> CLAUDE.md 1.6 kB 9/27/2026 11:27:317+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">3</span><span style="background:var(--vt-palette-7)"> </span> go.mod 812 B 9/20/2026 8:00:008+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> e2e 4.2 kB 9/28/2026 17:45:1099 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span>1010 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">6</span><span style="background:var(--vt-palette-7)"> </span>1111 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">7</span><span style="background:var(--vt-palette-7)"> </span>
M e2e/testdata/screens/pipe-status.html +5 -5
@@ -1,11 +1,11 @@
11 <pre class="screen"> <span style="text-decoration:underline">F</span>ile <span style="text-decoration:underline">E</span>dit <span style="text-decoration:underline">V</span>iew <span style="text-decoration:underline">I</span>nsert F<span style="text-decoration:underline">o</span>rmat <span style="text-decoration:underline">D</span>ata <span style="text-decoration:underline">H</span>elp <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">READY</span><span style="background:var(--vt-palette-6)"> </span>22 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">A1</span><span style="background:var(--vt-palette-8)"> </span> name33 Read 4 rows of NUON from standard input4-<span style="background:var(--vt-palette-8)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">A</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">B</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">C</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">D</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">E</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">F</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">G</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">H</span><span style="background:var(--vt-palette-8)"> </span>5-<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">name</span><span style="background:var(--vt-palette-6)"> </span> size modified6-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> CLAUDE.md 1.6 kB 9/27/2026 11:27:317-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> go.mod 812 B 9/20/2026 8:00:008-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> e2e 4.2 kB 9/28/2026 17:45:104+<span style="background:var(--vt-palette-8)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">A</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">B</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">C</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">D</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">E</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">F</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">G</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">H</span><span style="background:var(--vt-palette-8)"> </span>5+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">name</span><span style="background:var(--vt-palette-6)"> </span> size modified6+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> CLAUDE.md 1.6 kB 9/27/2026 11:27:317+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> go.mod 812 B 9/20/2026 8:00:008+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> e2e 4.2 kB 9/28/2026 17:45:1099 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span>1010 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span>1111 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">7</span><span style="background:var(--vt-palette-8)"> </span>
M internal/chart/bar.go +2 -2
M internal/chart/chart_test.go +33 -0
M internal/chart/column.go +6 -4
M internal/chart/sixel.go +17 -27
@@ -11,14 +11,14 @@ import (
1111 // Sixel is the other way images reach a terminal, for terminals without1212 // kitty graphics (foot, xterm, mlterm, Windows Terminal and others). A1313 // sixel image is pixels drawn at the cursor, not text: the UI draws it14-// after the frame over blank cells it keeps for it (see the ui package's15-// sixel.go). The image is sent whole each time, in at most as many16-// colors as the terminal has color registers, run-length encoded.14+// after the frame, over the text chart the cells hold (see the ui15+// package's sixel.go), so every pixel is set and the text never shows16+// through. The image is sent whole each time, in at most as many colors17+// as the terminal has color registers, run-length encoded.1718 18-// Sixel returns the DCS sequence that draws img at the cursor: pixels19-// with any coverage composited over bg, fully transparent ones left20-// unset so the cell background shows, in at most registers colors21-// (at least 2, at most 256).19+// Sixel returns the DCS sequence that draws img at the cursor, every20+// pixel composited over bg, in at most registers colors (at least 2, at21+// most 256).2222 func Sixel(img *image.RGBA, bg color.RGBA, registers int) string {2323 registers = min(max(registers, 2), 256)2424 b := img.Bounds()
@@ -28,8 +28,9 @@ func Sixel(img *image.RGBA, bg color.RGBA, registers int) string {
2828 }2929 idx, pal := quantize(img, bg, registers)3030 var out strings.Builder31- // P2 = 1: pixels not drawn keep what's under them. The raster32- // attributes set square pixels and the image's size.31+ // P2 = 1: pixels not drawn keep what's under them, which only the32+ // empty sixels past the image's last row are. The raster attributes33+ // set square pixels and the image's size.3334 out.WriteString("\x1bP0;1;0q\"1;1;")3435 out.WriteString(strconv.Itoa(w) + ";" + strconv.Itoa(h))3536 for i, c := range pal {
@@ -44,7 +45,7 @@ func Sixel(img *image.RGBA, bg color.RGBA, registers int) string {
4445 // percent is a color channel as sixel's 0 to 100.4546 func percent(v uint8) string { return strconv.Itoa((int(v)*100 + 127) / 255) }4647 47-// sixelBands encodes the image of register indexes (-1 for unset), six48+// sixelBands encodes the image of register indexes, six4849 // rows at a time: for each color in the band, its row of sixels,4950 // run-length encoded, then "$" to go back for the next color, and "-"5051 // between bands.
@@ -79,9 +80,6 @@ type bands struct {
7980 func (b *bands) gather(px []int16, y0 int) {8081 b.used = b.used[:0]8182 for i, c := range px {82- if c < 0 {83- continue84- }8583 if b.band[c] != y0+1 {8684 b.band[c] = y0 + 18785 b.used = append(b.used, c)
@@ -122,7 +120,7 @@ func writeRuns(out *strings.Builder, row []byte) {
122120 }123121 124122 // quantize maps each pixel of img, composited over bg, to a register,125-// -1 for a fully transparent pixel, and returns the registers' colors.123+// and returns the registers' colors.126124 // Colors are kept exactly while there are at most registers of them;127125 // past that, their low bits are dropped until they fit, and each128126 // register is the average of the colors it stands for. Registers are
@@ -131,12 +129,11 @@ func writeRuns(out *strings.Builder, row []byte) {
131129 func quantize(img *image.RGBA, bg color.RGBA, registers int) ([]int16, []color.RGBA) {132130 b := img.Bounds()133131 w, h := b.Dx(), b.Dy()134- px := make([]uint32, w*h) // 0 for transparent, else 1<<24 | RGB132+ px := make([]uint32, w*h) // 1<<24 | RGB135133 for y := range h {136134 for x := range w {137- if c := over(img, b.Min.X+x, b.Min.Y+y, bg); c.A != 0 {138- px[y*w+x] = 1<<24 | uint32(c.R)<<16 | uint32(c.G)<<8 | uint32(c.B)139- }135+ c := over(img, b.Min.X+x, b.Min.Y+y, bg)136+ px[y*w+x] = 1<<24 | uint32(c.R)<<16 | uint32(c.G)<<8 | uint32(c.B)140137 }141138 }142139 shift := uint(0)
@@ -150,10 +147,6 @@ func quantize(img *image.RGBA, bg color.RGBA, registers int) ([]int16, []color.R
150147 idx := make([]int16, w*h)151148 last, lastReg := uint32(0), int16(-1) // runs of one color are common: look each up once152149 for i, p := range px {153- if p == 0 {154- idx[i] = -1155- continue156- }157150 r := lastReg158151 if p != last {159152 k := bucket(p, shift)
@@ -191,7 +184,7 @@ func distinct(px []uint32, shift uint, limit int) int {
191184 seen := map[uint32]struct{}{}192185 last := uint32(0)193186 for _, p := range px {194- if p == 0 || p == last {187+ if p == last {195188 continue196189 }197190 last = p
@@ -204,14 +197,11 @@ func distinct(px []uint32, shift uint, limit int) int {
204197 }205198 206199 // over is the pixel at x, y of the premultiplied img composited over207-// bg, opaque, or transparent where img has no coverage.200+// bg, opaque.208201 func over(img *image.RGBA, x, y int, bg color.RGBA) color.RGBA {209202 i := img.PixOffset(x, y)210203 p := img.Pix[i : i+4 : i+4]211204 a := int(p[3])212- if a == 0 {213- return color.RGBA{}214- }215205 return color.RGBA{mix(p[0], bg.R, a), mix(p[1], bg.G, a), mix(p[2], bg.B, a), 255}216206 }217207
M internal/chart/sixel_test.go +8 -7
@@ -13,7 +13,8 @@ import (
1313 // order they appear, runs of four or more as "!n", trailing empty1414 // sixels left out, "$" between the colors of a band and "-" between1515 // bands, a pixel with half coverage composited over the background and16-// a transparent one left unset.16+// a transparent one drawn in the background, so text under the image17+// never shows through.1718 func TestSixelGolden(t *testing.T) {1819 img := image.NewRGBA(image.Rect(0, 0, 4, 7))1920 red := color.RGBA{255, 0, 0, 255}
@@ -27,9 +28,9 @@ func TestSixelGolden(t *testing.T) {
2728 img.SetRGBA(0, 6, color.RGBA{0, 0, 255, 255})2829 got := Sixel(img, color.RGBA{0, 0, 0, 255}, 256)2930 want := "\x1bP0;1;0q\"1;1;4;7" +30- "#0;2;100;0;0#1;2;0;50;0#2;2;0;0;100" +31- "#0DDD@$#1?A" + // red: rows 0 and 2 (1+4) three times, then row 0 alone32- "-#2@" +31+ "#0;2;100;0;0#1;2;0;0;0#2;2;0;50;0#3;2;0;0;100" +32+ "#0DDD@$#1ywy}$#2?A" + // red: rows 0 and 2 (1+4) three times, then row 0 alone; black around33+ "-#1?@@@$#3@" +3334 "\x1b\\"3435 if got != want {3536 t.Errorf("Sixel =\n%q\nwant\n%q", got, want)
@@ -81,8 +82,8 @@ func TestSixelChart(t *testing.T) {
8182 }8283 8384 // A chart's sixel image decodes to the image composited over the84-// background, each channel within sixel's percent steps, and pixels85-// without coverage unset.85+// background, each channel within sixel's percent steps, pixels86+// without coverage included.8687 func TestSixelDecodes(t *testing.T) {8788 bg := color.RGBA{250, 250, 245, 255}8889 for _, ct := range []sheet.ChartType{sheet.ChartLine, sheet.ChartPie, sheet.ChartArea} {
@@ -93,7 +94,7 @@ func TestSixelDecodes(t *testing.T) {
9394 for x := range b.Dx() {9495 want := over(img, x, y, bg)9596 c, set := got[image.Pt(x, y)]96- if set != (want.A != 0) || set && (diff(c.R, want.R) > 3 || diff(c.G, want.G) > 3 || diff(c.B, want.B) > 3) {97+ if !set || (diff(c.R, want.R) > 3 || diff(c.G, want.G) > 3 || diff(c.B, want.B) > 3) {9798 t.Fatalf("%v at %d,%d: %v %v, want %v", ct, x, y, c, set, want)9899 }99100 }
M internal/chart/stack.go +5 -1
M internal/chart/testdata/area-negative.txt +6 -6
M internal/chart/testdata/area-stacked.txt +5 -5
M internal/chart/testdata/area.txt +4 -4
@@ -1,12 +1,12 @@
1-$1,500 ┤▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▇▇▇▇▇██████████████1+$1,500 ┤▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▃▃▃▃▃▄▄▄▄▄▄▄▄▄▄▄▄▄▄22 │███████████████████████████████████33 │███████████████████████████████████44 $1,000 ┤███████████████████████████████████5- │████████████████████████████████▁▁▂6- │███████████████████████▅▆▆▇▇▇██████5+ │███████████████████████████████████6+ │███████████████████████▁▂▂▃▃▃▄▄▄▅▅▆77 $500 ┤███████████████████████████████████88 │███████████████████████████████████99 │███████████████████████████████████10- $0 ┼────────────────────────────────────10+ $0 ┼▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀─1111 Jan Feb Mar Apr1212 ■ Rent ■ Food
M internal/chart/testdata/axis-log.txt +6 -6
M internal/chart/testdata/axis-min-max.txt +5 -5
M internal/chart/testdata/axis-min.txt +4 -4
M internal/chart/testdata/bar-log.txt +4 -4
M internal/chart/testdata/bar-percent.txt +4 -4
M internal/chart/testdata/bar-single.txt +4 -4
M internal/chart/testdata/bar-stacked.txt +4 -4
M internal/chart/testdata/bar.txt +7 -7
M internal/chart/testdata/column-narrow.txt +4 -4
M internal/chart/testdata/column-negative.txt +5 -5
M internal/chart/testdata/column-percent.txt +3 -3
M internal/chart/testdata/column-single.txt +6 -6
M internal/chart/testdata/column-stacked-negative.txt +7 -7
@@ -1,12 +1,12 @@
11 2- 40 ┤┈█████████┈┈█████████┈┈▄▄▄▄▄▄▄▄▄┈┈2+ 40 ┤┈▄▄▄▄▄▄▄▄▄┈┈▄▄▄▄▄▄▄▄▄┈┈┈┈┈┈┈┈┈┈┈┈┈3+ │ ▄▄▄▄▄▄▄▄▄ █████████ █████████4+ 20 ┤┈█████████┈┈█████████┈┈▄▄▄▄▄▄▄▄▄┈┈35 │ █████████ █████████ █████████4- 20 ┤┈█████████┈┈█████████┈┈█████████┈┈5- │ █████████ █████████ █████████6- 0 ┤┈█████████┈┈█████████┈┈█████████┈┈7- │ █████████ ▀▀▀▀▀▀▀▀▀ █████████8--20 ┤┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈█████████┈┈9- │6+ 0 ┤┈▄▄▄▄▄▄▄▄▄┈┈▄▄▄▄▄▄▄▄▄┈┈▄▄▄▄▄▄▄▄▄┈┈7+ │ █████████ ▄▄▄▄▄▄▄▄▄ █████████8+-20 ┤┈▀▀▀▀▀▀▀▀▀┈┈┈┈┈┈┈┈┈┈┈┈┈█████████┈┈9+ │ ▀▀▀▀▀▀▀▀▀1010 -40 ┼───────────────────────────────────1111 Q1 Q2 Q31212 ■ Sales ■ Costs ■ Other
M internal/chart/testdata/column-stacked.txt +5 -5
M internal/chart/testdata/column.txt +4 -4
M internal/chart/testdata/legend-none.txt +4 -4
M internal/chart/testdata/legend-right.txt +4 -4
M internal/chart/testdata/line-single.txt +8 -8
M internal/chart/testdata/line.txt +3 -3
M internal/chart/testdata/no-gridlines.txt +6 -6
M internal/fileio/fileio.go +3 -0
M internal/fileio/formats.go +6 -2
M internal/fileio/stream.go +1 -0
A internal/fileio/widths_test.go +72 -0
@@ -0,0 +1,72 @@
1+package fileio2+3+import (4+ "context"5+ "os"6+ "path/filepath"7+ "strings"8+ "testing"9+10+ "github.com/FelineStateMachine/012/internal/sheet"11+)12+13+// Formats without widths of their own fit their columns to the header14+// and the rows below it, capped, and leave narrow columns at the15+// default; read from a stream too.16+func TestImportFitsWidths(t *testing.T) {17+ long := strings.Repeat("x", 60)18+ files := map[string]string{19+ "t.csv": "Item,Qty,Note\nStapler with a long name,3," + long + "\n",20+ "t.tsv": "Item\tQty\tNote\nStapler with a long name\t3\t" + long + "\n",21+ "t.json": `[{"Item":"Stapler with a long name","Qty":3,"Note":"` + long + `"}]`,22+ "t.nuon": `[[Item, Qty, Note]; ["Stapler with a long name", 3, "` + long + `"]]`,23+ "t.jsonl": `{"Item":"Stapler with a long name","Qty":3,"Note":"` + long + `"}`,24+ }25+ check := func(t *testing.T, s *sheet.Sheet) {26+ t.Helper()27+ if got := s.ColWidth(0); got != len("Stapler with a long name")+2 {28+ t.Errorf("Item is %d wide", got)29+ }30+ if got := s.ColWidth(1); got != sheet.DefaultWidth {31+ t.Errorf("Qty is %d wide, want the default", got)32+ }33+ if got := s.ColWidth(2); got != 30 {34+ t.Errorf("Note is %d wide, want the cap", got)35+ }36+ }37+ dir := t.TempDir()38+ for name, text := range files {39+ t.Run(name, func(t *testing.T) {40+ path := filepath.Join(dir, name)41+ os.WriteFile(path, []byte(text), 0o600)42+ r, err := Import(context.Background(), path, Options{})43+ if err != nil {44+ t.Fatal(err)45+ }46+ check(t, r.Sheet)47+ r, err = ImportReader(context.Background(), "stdin", strings.NewReader(text), Options{})48+ if err != nil {49+ t.Fatal(err)50+ }51+ check(t, r.Sheet)52+ })53+ }54+}55+56+// A format that keeps widths keeps them, and columns it leaves at the57+// default stay there.58+func TestImportKeepsFileWidths(t *testing.T) {59+ s := sheet.New()60+ s.Set(sheet.Addr{}, strings.Repeat("x", 40))61+ path := filepath.Join(t.TempDir(), "t.xlsx")62+ if _, err := Export(context.Background(), path, XLSX, SnapBook(s), ExportOptions{}); err != nil {63+ t.Fatal(err)64+ }65+ r, err := Import(context.Background(), path, Options{})66+ if err != nil {67+ t.Fatal(err)68+ }69+ if got := r.Sheet.ColWidth(0); got != sheet.DefaultWidth {70+ t.Errorf("A is %d wide, want the file's default", got)71+ }72+}
M internal/nushell/module/012.nu +19 -7
@@ -7,20 +7,32 @@
77 # Open a table in 012, and return the table sent back on quitting.88 #99 # The table piped in opens as a sheet, or the file named instead. Edit10-# it, sort it or select a range; quitting sends the selection or the11-# whole sheet back as NUON, so file sizes, durations and dates come12-# back as themselves. Quitting without sending raises an error, so13-# `try` can catch it. Text piped in (CSV, TSV, JSON, NUON) is read as14-# 012 reads it.10+# it, sort it or select a range; quitting asks whether to send the11+# selection or the whole sheet back as NUON, so file sizes, durations12+# and dates come back as themselves. With --send, quitting sends13+# without asking. Quitting without sending raises an error, so `try`14+# can catch it. Text piped in (CSV, TSV, JSON, NUON) is read as 01215+# reads it.1516 @example "Pick files in 012 and keep filtering" { ls | sheet | where size > 1kb }17+@example "Edit the table and get all of it back when you quit" { ls | sheet --send sheet }18+@example "Get back the range selected when you quit, its first row naming the columns" { ls | select name size | sheet --send selection }1619 @example "Edit a workbook and save what you send back as CSV" { sheet budget.xlsx | save -f budget.csv }1720 @example "Carry on when nothing is sent back" { try { ps | sheet } catch { [] } }1821 @search-terms [spreadsheet table edit 012]1922 export def sheet [2023 file?: path # open this workbook or file instead of the input24+ --send: string # send without asking on quitting: selection (the sheet when one cell is selected) or sheet2125 ] {2226 let input = $in23- let args = if $file == null { [--pipe --to nuon] } else { [--pipe --to nuon $file] }27+ if $send != null and $send not-in [selection sheet] {28+ error make {29+ msg: $"--send ($send): sheet sends selection or sheet"30+ label: {text: "selection or sheet", span: (metadata $send).span}31+ }32+ }33+ let send_args = if $send == null { [] } else { [--send $send] }34+ let file_args = if $file == null { [] } else { [$file] }35+ let args = [--pipe --to nuon ...$send_args ...$file_args]2436 let r = if $input == null {2537 ^012 ...$args | complete2638 } else if ($input | describe) in [string binary] {
@@ -32,7 +44,7 @@ export def sheet [
3244 let why = $r.stderr | str trim | str replace --regex '^012: ' ''3345 error make {3446 msg: (if $why == "" { $"012 exited with status ($r.exit_code)" } else { $why })35- help: "nothing was sent back; quit with Enter or S to send a table"47+ help: (if $send == null { "nothing was sent back; quit with Enter or S to send a table" } else { $"nothing was sent back; Ctrl+Q sends the ($send)" })3648 }3749 }3850 $r.stdout | from nuon
M internal/sheet/load.go +11 -0
M internal/ui/charts.go +9 -12
@@ -14,8 +14,8 @@ import (
1414 "github.com/FelineStateMachine/012/internal/ui/theme"1515 )1616 17-// Charts follow Sheets: Insert > Chart charts the selection (or the block18-// of data around the active cell) and opens the chart editor, a bar on the17+// Charts follow Sheets: Insert > Chart charts the selection (or the table18+// around the active cell) and opens the chart editor, a bar on the1919 // context line for the type, series direction, headers, range and title.2020 // Charts float over the grid anchored at a cell, redraw as their data2121 // recalculates, and can be dragged, resized from the corner, and deleted
@@ -89,7 +89,7 @@ func (m *Model) targetChart() int {
8989 func (m *Model) insertChart() tea.Cmd {9090 r := m.selection()9191 if !m.hasRange() {92- r = m.sheet.Region(m.cur)92+ r = m.tableAround(m.cur)9393 }9494 if used, ok := m.sheet.UsedRange(); !ok || r.From.Col > used.To.Col || r.From.Row > used.To.Row {9595 m.note = "Select the data to chart first"
@@ -228,11 +228,11 @@ func (m *Model) chartBoxes() []overlay.Box {
228228 // border with a resize handle in the corner.229229 func (m *Model) drawChart(i int, c sheet.Chart, selected bool) []string {230230 w, h := chartInner(c)231+ // A sixel image covers the text chart drawn under it (see sixel.go),232+ // whose bars meet the axis in the row below the image, so the plot233+ // stops being text for kitty placeholders only.231234 o := m.term.chartOptions()232235 o.Chart = c.ChartOptions233- if m.term.sixelOn() {234- o.Image = m.term.six.placed(i) // see sixel.go235- }236236 if i >= maxImages {237237 o.Image = false238238 }
@@ -251,7 +251,7 @@ func (m *Model) drawChart(i int, c sheet.Chart, selected bool) []string {
251251 lines = append(lines, border.Render("┌─")+m.th.Title.Render(title)+252252 border.Render(strings.Repeat("─", max(c.W-3-ansi.StringWidth(title), 0))+"┐"))253253 for y := range h {254- lines = append(lines, border.Render("│")+" "+chartRow(&m.th, g, y, firstImageID+i, o.Image, m.term.kitty)+" "+border.Render("│"))254+ lines = append(lines, border.Render("│")+" "+chartRow(&m.th, g, y, firstImageID+i, o.Image)+" "+border.Render("│"))255255 }256256 corner := "┘"257257 if selected {
@@ -267,9 +267,8 @@ func (m *Model) drawChart(i int, c sheet.Chart, selected bool) []string {
267267 }268268 269269 // chartRow renders row y of a drawn chart with the theme; with images,270-// the plot area is the image's kitty placeholders, or blank cells for a271-// sixel image to cover.272-func chartRow(th *theme.Theme, g *chart.Grid, y, imageID int, image, kitty bool) string {270+// the plot area is the image's kitty placeholders.271+func chartRow(th *theme.Theme, g *chart.Grid, y, imageID int, image bool) string {273272 var b, run strings.Builder274273 var style lipgloss.Style275274 styled := false
@@ -290,8 +289,6 @@ func chartRow(th *theme.Theme, g *chart.Grid, y, imageID int, image, kitty bool)
290289 key, st, isStyled := 0, lipgloss.Style{}, true291290 text := c.Text292291 switch inPlot := y >= g.Plot.Min.Y && y < g.Plot.Max.Y && x >= g.Plot.Min.X && x < g.Plot.Max.X; {293- case image && inPlot && !kitty:294- key, isStyled, text = 2, false, " "295292 case image && inPlot:296293 key, st = 1, th.ImageID(imageID)297294 text = chart.Placeholder(y-g.Plot.Min.Y, x-g.Plot.Min.X)
M internal/ui/dialog.go +3 -3
M internal/ui/filter.go +16 -3
A internal/ui/goto_test.go +88 -0
@@ -0,0 +1,88 @@
1+package ui2+3+import (4+ "strconv"5+ "testing"6+7+ "github.com/FelineStateMachine/012/internal/sheet"8+)9+10+// withRegion adds a notebook sheet after the one shown with region name11+// showing a table of a header row and two rows of numbers, and returns12+// the sheet and the table.13+func withRegion(t *testing.T, m *Model, name string) (*sheet.Sheet, sheet.Rect) {14+ t.Helper()15+ nb, err := m.book().AddNotebook("Shell", m.sheet)16+ if err != nil {17+ t.Fatal(err)18+ }19+ if err := nb.AddRegion(sheet.Region{Name: name, Command: "ls"}); err != nil {20+ t.Fatal(err)21+ }22+ d := &sheet.RegionData{Rows: 3, Cols: 2, Values: []sheet.Value{23+ {Kind: sheet.Text, Str: "name"}, {Kind: sheet.Text, Str: "size"},24+ {Kind: sheet.Text, Str: "a"}, {Kind: sheet.Number, Num: 1},25+ {Kind: sheet.Text, Str: "b"}, {Kind: sheet.Number, Num: 2},26+ }}27+ if err := nb.ShowRegion(name, d); err != nil {28+ t.Fatal(err)29+ }30+ table, ok := nb.RegionTable(name)31+ if !ok {32+ t.Fatal("no table")33+ }34+ return nb, table35+}36+37+// Go to takes a region's name as formulas write it and selects its38+// table, header row included, on whichever sheet holds it.39+func TestGotoRegion(t *testing.T) {40+ m := newModel()41+ nb, want := withRegion(t, m, "totals")42+ press(t, m, "<ctrl+g>", "NU.Totals", "<enter>")43+ if m.mode != modeReady || m.sheet != nb {44+ t.Fatalf("mode %v, sheet %q, err %q", m.mode, m.sheet.Name(), m.errMsg)45+ }46+ if got := m.selection(); got != want {47+ t.Errorf("selected %v, want the table %v", got, want)48+ }49+ press(t, m, "<f5>", "nu.nothing", "<enter>")50+ if m.mode != modeError {51+ t.Errorf("an unknown region: mode %v", m.mode)52+ }53+}54+55+// From a cell of a region, or its label, the table around it is the56+// region's table, not the block of data that takes in the label line;57+// Insert > Chart and a pivot table read it.58+func TestTableAroundRegion(t *testing.T) {59+ m := newModel()60+ nb, table := withRegion(t, m, "r1")61+ m.showSheet(nb)62+ label := sheet.Addr{Col: table.From.Col, Row: table.From.Row - 1}63+ for _, at := range []sheet.Addr{table.To, label} {64+ m.clearSelection()65+ m.cur = at66+ if got := m.dataRange(); got != table {67+ t.Errorf("from %v: %v, want the table %v", at, got, table)68+ }69+ if got, ok := m.pivotData(); !ok || got != table {70+ t.Errorf("from %v: pivot reads %v %v, want %v", at, got, ok, table)71+ }72+ }73+ m.cur = table.To74+ m.runCommand("insert.chart")75+ press(t, m, "<enter>")76+ if cs := nb.Charts(); len(cs) != 1 || cs[0].Data != table {77+ t.Fatalf("charts %+v, want one of %v", cs, table)78+ }79+ // Ordinary data is still the block around the cell.80+ m.showSheet(m.book().Sheets()[0])81+ for r := range 3 {82+ m.sheet.Set(sheet.Addr{Row: r}, strconv.Itoa(r))83+ }84+ m.cur = sheet.Addr{Row: 1}85+ if got := m.dataRange(); got != (sheet.Rect{To: sheet.Addr{Row: 2}}) {86+ t.Errorf("ordinary data: %v", got)87+ }88+}
M internal/ui/graphics.go +2 -1
M internal/ui/menubar.go +1 -1
M internal/ui/names_test.go +1 -1
M internal/ui/pipe.go +44 -8
@@ -16,8 +16,9 @@ import (
1616 // table to standard output when it quits: the selection or the sheet,1717 // as the user chooses, in the input's format unless another was asked1818 // for. The screen is the terminal's own (cmd/012 opens it), so nothing19-// else reaches standard output. Quitting asks what to send, and20-// quitting without sending lets the pipeline know by the exit status.19+// else reaches standard output. Quitting asks what to send, or sends20+// what --send chose without asking, and quitting without sending lets21+// the pipeline know by the exit status.2122 2223 // StdinName is what a table read from standard input is called: its2324 // sheet's name.
@@ -27,8 +28,9 @@ const StdinName = "stdin"
2728 type pipeState struct {2829 in io.Reader // standard input, read as the program starts; nil once read2930 30- on bool // --pipe: quitting writes a table to standard output31- to fileio.Kind // the format asked for (--to), or 0 for the input's31+ on bool // --pipe: quitting writes a table to standard output32+ to fileio.Kind // the format asked for (--to), or 0 for the input's33+ send Send // what quitting sends (--send)3234 3335 // Set by a quit that sends: what to write, and in which format.3436 sent *fileio.Snapshot
@@ -43,6 +45,18 @@ func (m *Model) ReadStdin(r io.Reader) { m.pipe.in = r }
4345 // (a text format; 0 for the input's, or NUON when the input isn't text).4446 func (m *Model) SetPipe(to fileio.Kind) { m.pipe.on, m.pipe.to = true, to }4547 48+// Send is what quitting sends in a pipeline (012 --pipe --send).49+type Send int50+51+const (52+ SendAsk Send = iota // ask: the selection, the sheet, or nothing53+ SendSelection // the selection, or the sheet when only one cell is selected54+ SendSheet // the sheet, whatever is selected55+)56+57+// SetSend makes quitting in a pipeline send s rather than ask.58+func (m *Model) SetSend(s Send) { m.pipe.send = s }59+4660 // Piped is what quitting sent: the table and its format, or false when4761 // the user quit without sending.4862 func (m *Model) Piped() (*fileio.Snapshot, fileio.Kind, bool) {
@@ -61,6 +75,10 @@ func init() {
6175 enabled: func(m *Model) bool { return m.pipe.on },6276 hidden: func(m *Model) bool { return !m.pipe.on },6377 run: func(m *Model) tea.Cmd { return m.send(sheet.Rect{}) }},78+ &command{id: "pipe.quit_unsent", macro: macroNever, title: "Quit without sending",79+ desc: "Quit, writing nothing to standard output: the pipeline sees exit status 1",80+ hidden: func(m *Model) bool { return !m.pipe.on },81+ run: (*Model).exit},6482 )6583 }6684
@@ -98,16 +116,34 @@ func (m *Model) pipeKind() fileio.Kind {
98116 return fileio.NUON99117 }100118 119+// sendRange is what quitting would send: the selection, when a range120+// is selected and --send doesn't ask for the sheet, or else the sheet121+// (the zero Rect).122+func (m *Model) sendRange() sheet.Rect {123+ if m.pipe.send != SendSheet && m.hasRange() {124+ return m.selection()125+ }126+ return sheet.Rect{}127+}128+101129 // sendWhat names what quitting would send: "B2:D9" or "the sheet".102130 func (m *Model) sendWhat() string {103- if m.hasRange() {104- return m.selection().String()131+ if r := m.sendRange(); r != (sheet.Rect{}) {132+ return r.String()105133 }106134 return "the sheet"107135 }108136 109-// askSend is Quit in a pipeline: send the selection, if there is one,110-// or the sheet, or quit without sending.137+// quitPiped is Quit in a pipeline: send what --send chose, or ask.138+func (m *Model) quitPiped() tea.Cmd {139+ if m.pipe.send == SendAsk {140+ return m.askSend()141+ }142+ return m.send(m.sendRange())143+}144+145+// askSend asks what to send: the selection, if there is one, or the146+// sheet, or nothing.111147 func (m *Model) askSend() tea.Cmd {112148 var choices []choice113149 if m.hasRange() {
M internal/ui/pipe_test.go +63 -4
@@ -104,8 +104,66 @@ func TestPipeQuitWithoutSending(t *testing.T) {
104104 }105105 }106106 107-// TestPipeCommands: the send commands are in File and the palette only108-// in a pipeline, and run from there.107+// TestPipeSendSelection: with --send selection, Quit sends the108+// selection without asking, or the sheet when only one cell is109+// selected, and the status line says which.110+func TestPipeSendSelection(t *testing.T) {111+ m := stdinModel(t, filesNUON, true, 0)112+ m.SetSend(SendSelection)113+ if st := line(m, m.height-1); !strings.Contains(st, "Ctrl+Q send the sheet as NUON") {114+ t.Errorf("status line %q", st)115+ }116+ press(t, m, "<shift+down>", "<shift+right>")117+ if st := line(m, m.height-1); !strings.Contains(st, "Ctrl+Q send A1:B2 as NUON") {118+ t.Errorf("status line %q", st)119+ }120+ if _, quit := press(t, m, "<ctrl+q>").(tea.QuitMsg); !quit {121+ t.Fatal("asked rather than quit")122+ }123+ if snap, _, ok := m.Piped(); !ok || snap.Range.String() != "A1:B2" {124+ t.Errorf("sent %v %v", snap.Range, ok)125+ }126+127+ m = stdinModel(t, filesNUON, true, 0)128+ m.SetSend(SendSelection)129+ press(t, m, "<down>")130+ cmd, _ := m.runCmdLine("q")131+ if _, quit := run(m, cmd).(tea.QuitMsg); !quit {132+ t.Fatal(":q asked rather than quit")133+ }134+ if snap, _, ok := m.Piped(); !ok || snap.Range.String() != "A1:B3" {135+ t.Errorf("one cell selected sent %v %v", snap.Range, ok)136+ }137+}138+139+// TestPipeSendSheet: with --send sheet, Quit sends the sheet whatever140+// is selected, and Quit without sending is still in the palette.141+func TestPipeSendSheet(t *testing.T) {142+ m := stdinModel(t, filesNUON, true, fileio.CSV)143+ m.SetSend(SendSheet)144+ press(t, m, "<shift+down>")145+ if st := line(m, m.height-1); !strings.Contains(st, "Ctrl+Q send the sheet as CSV") {146+ t.Errorf("status line %q", st)147+ }148+ if _, quit := run(m, m.runCommand("quit")).(tea.QuitMsg); !quit {149+ t.Fatal("File > Quit asked rather than quit")150+ }151+ if snap, k, ok := m.Piped(); !ok || k != fileio.CSV || snap.Range.String() != "A1:B3" {152+ t.Errorf("sent %v %v %v", snap.Range, k, ok)153+ }154+155+ m = stdinModel(t, filesNUON, true, 0)156+ m.SetSend(SendSheet)157+ if _, quit := run(m, m.runCommand("pipe.quit_unsent")).(tea.QuitMsg); !quit {158+ t.Fatal("Quit without sending didn't quit")159+ }160+ if _, _, ok := m.Piped(); ok {161+ t.Error("Quit without sending sent")162+ }163+}164+165+// TestPipeCommands: the send commands and Quit without sending are in166+// File and the palette only in a pipeline, and run from there.109167 func TestPipeCommands(t *testing.T) {110168 titles := func(m *Model) []string {111169 var out []string
@@ -115,11 +173,12 @@ func TestPipeCommands(t *testing.T) {
115173 return out116174 }117175 m := newModel()118- if slices.Contains(titles(m), "Quit and send sheet") || len(m.applicable(menuBar[0].items)) != len(menuBar[0].items)-2 {176+ if slices.Contains(titles(m), "Quit and send sheet") || len(m.applicable(menuBar[0].items)) != len(menuBar[0].items)-3 {119177 t.Error("send commands outside a pipeline")120178 }121179 m = stdinModel(t, filesNUON, true, 0)122- if !slices.Contains(titles(m), "Quit and send sheet") || !slices.Contains(titles(m), "Quit and send selection") {180+ if !slices.Contains(titles(m), "Quit and send sheet") || !slices.Contains(titles(m), "Quit and send selection") ||181+ !slices.Contains(titles(m), "Quit without sending") {123182 t.Error("send commands missing in a pipeline")124183 }125184 if commands["pipe.send_selection"].available(m) {
M internal/ui/selection.go +25 -4
@@ -258,16 +258,16 @@ func isMoveKey(key string) bool {
258258 func (m *Model) openGoto() {259259 m.openText("Go to:", m.cur.String(), func(m *Model, text string) tea.Cmd {260260 if !m.gotoText(strings.TrimSpace(text)) {261- m.fail("Not a cell, range or named range: " + text)261+ m.fail("Not a cell, range, named range or region: " + text)262262 }263263 return nil264264 })265265 m.prompt.indicator = "POINT"266266 }267267 268-// gotoText goes to a cell, range or named range, on any sheet, and269-// reports whether text named one. A sheet may lead: Sheet2!A1,270-// 'Q3 plan'!B2:C9, or just Sheet2!.268+// gotoText goes to a cell, range, named range or region's table (nu.r1,269+// as formulas name it), on any sheet, and reports whether text named270+// one. A sheet may lead: Sheet2!A1, 'Q3 plan'!B2:C9, or just Sheet2!.271271 func (m *Model) gotoText(text string) bool {272272 target := m.sheet273273 if name, rest := sheet.SplitSheet(text); name != "" {
@@ -286,6 +286,9 @@ func (m *Model) gotoText(text string) bool {
286286 if n, named := m.sheet.LookupName(text); named && !n.Gone() && target == m.sheet {287287 r, ok, target = n.Range, true, n.Sheet288288 }289+ if !ok && target == m.sheet {290+ r, target, ok = m.regionTable(text)291+ }289292 if !ok {290293 return false291294 }
@@ -301,3 +304,21 @@ func (m *Model) gotoText(text string) bool {
301304 m.selectRect(r)302305 return true303306 }307+308+// regionTable finds the region formulas name as text (nu.r1), ignoring309+// case, and returns its table, header row included, and its sheet. A310+// region not run yet has no table: its label line stands for it.311+func (m *Model) regionTable(text string) (sheet.Rect, *sheet.Sheet, bool) {312+ const prefix = "nu."313+ if len(text) <= len(prefix) || !strings.EqualFold(text[:len(prefix)], prefix) {314+ return sheet.Rect{}, nil, false315+ }316+ s, reg, ok := m.book().Region(text[len(prefix):])317+ if !ok {318+ return sheet.Rect{}, nil, false319+ }320+ if t, ok := s.RegionTable(reg.Name); ok {321+ return t, s, true322+ }323+ return sheet.Rect{From: reg.At, To: reg.At}, s, true324+}
M internal/ui/sixel.go +8 -8
@@ -24,9 +24,14 @@ import (
2424 //2525 // - A chart is an image only where the whole of its plot area shows: in2626 // the grid, under no chart drawn later and no floating box (a menu,27-// a dialog, formula suggestions, a note). Elsewhere it is text. The28-// frame keeps blank cells where an image goes, so the renderer has29-// nothing to write there.27+// a dialog, formula suggestions, a note). Elsewhere it is text.28+// - Under an image the frame keeps the text chart, which the image29+// covers whole (every pixel is set). The renderer writes those cells30+// only when the chart changes, and then the image is drawn again.31+// DA1 only says a terminal parses sixel: one that lists it without32+// showing images, or a recording of the text alone (VHS records33+// xterm.js's text layer, not its image layer), shows the text chart34+// rather than an empty plot.3035 // - Images are drawn after the frame: a sixelDrawMsg comes once the3136 // frame has been still for sixelSettle, longer than a frame, and3237 // draws each image with the cursor saved and restored around it.
@@ -116,11 +121,6 @@ func (s *sixelState) clock() time.Time {
116121 // off.117122 func (t *terminal) sixelOn() bool { return t.sixel && !t.noImages && t.cellW > 0 && t.cellH > 0 }118123 119-// placed reports whether chart i is an image in the current frame.120-func (s *sixelState) placed(i int) bool {121- return slices.ContainsFunc(s.plan, func(p sixelPlace) bool { return p.chart == i })122-}123-124124 // syncSixel follows msg, after Update has handled it: it encodes the125125 // charts that changed, works out where images go, clears the screen when126126 // one drawn moved, changed or went, and asks for the images to be drawn
M internal/ui/sixel_test.go +4 -2
M scripts/doccheck/main.go +4 -1
A scripts/doccheck/redirects.go +116 -0
@@ -0,0 +1,116 @@
1+package main2+3+import (4+ "encoding/json"5+ "fmt"6+ "os"7+ "os/exec"8+ "path"9+ "slices"10+ "strings"11+)12+13+// The docs site keeps its old addresses: a page that moves or goes14+// leaves a redirect in website/redirects.json, from its old address to15+// where its reader goes now. The site's build checks that each redirect16+// leads to a page; checkRedirects checks that none is missing, by17+// finding every docs page the site has had since it began (in git's18+// history) that isn't a page any more.19+20+// siteConfig is the file whose first commit began the site.21+const siteConfig = "website/docusaurus.config.ts"22+23+// redirectsFile lists the site's redirects.24+const redirectsFile = "website/redirects.json"25+26+// checkRedirects reports each docs page the site has published that is27+// gone without a redirect from its address. Without git or the history28+// back to the site's beginning (a shallow clone), there is nothing to29+// compare with, and it checks nothing.30+func checkRedirects(docs map[string]*doc) []string {31+ published, ok := publishedPages()32+ if !ok {33+ return nil34+ }35+ b, err := os.ReadFile(redirectsFile)36+ if err != nil {37+ return []string{redirectsFile + ": " + err.Error()}38+ }39+ var redirects []struct{ From, To string }40+ if err := json.Unmarshal(b, &redirects); err != nil {41+ return []string{redirectsFile + ": " + err.Error()}42+ }43+ from := map[string]bool{}44+ for _, r := range redirects {45+ from[r.From] = true46+ }47+ var problems []string48+ for _, p := range published {49+ if _, still := docs[p]; still {50+ continue51+ }52+ if url := pageURL(p); !from[url] {53+ problems = append(problems, fmt.Sprintf("%s: gone, but the site has published it at %s: add a redirect from there in %s", p, url, redirectsFile))54+ }55+ }56+ return problems57+}58+59+// publishedPages lists the docs pages that existed when the site began60+// or were added, changed or deleted since, sorted.61+func publishedPages() ([]string, bool) {62+ adds, err := gitLines("log", "--diff-filter=A", "--format=%H", "--", siteConfig)63+ if err != nil || len(adds) == 0 {64+ return nil, false65+ }66+ first := adds[len(adds)-1]67+ then, err := gitLines("ls-tree", "-r", "--name-only", first, "--", "docs")68+ if err != nil {69+ return nil, false70+ }71+ since, err := gitLines("log", "--no-renames", "--format=", "--name-only", first+"..HEAD", "--", "docs")72+ if err != nil {73+ return nil, false74+ }75+ var pages []string76+ for _, p := range append(then, since...) {77+ if isPage(p) {78+ pages = append(pages, p)79+ }80+ }81+ slices.Sort(pages)82+ return slices.Compact(pages), true83+}84+85+func gitLines(args ...string) ([]string, error) {86+ out, err := exec.Command("git", args...).Output()87+ if err != nil {88+ return nil, err89+ }90+ return strings.Fields(string(out)), nil91+}92+93+// isPage reports whether p, a path under docs/, is a page of the site:94+// Markdown not excluded by a leading _ (see the docs preset's exclude).95+func isPage(p string) bool {96+ if path.Ext(p) != ".md" {97+ return false98+ }99+ for _, part := range strings.Split(p, "/") {100+ if strings.HasPrefix(part, "_") {101+ return false102+ }103+ }104+ return true105+}106+107+// pageURL is where the site serves the page at p: its path without108+// .md and with a trailing slash, a folder's README.md at the folder's109+// address.110+func pageURL(p string) string {111+ p = strings.TrimSuffix(p, ".md")112+ if base := path.Base(p); base == "README" {113+ p = path.Dir(p)114+ }115+ return "/" + p + "/"116+}
M website/docusaurus.config.ts +8 -0
M website/package-lock.json +25 -0
M website/package.json +1 -0
A website/redirects.json +3 -0