cat / 012
clone

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

Draw golden screens from libghostty's cell grid

Dami committed 08cfa27
libghostty's HTML and VT formatters paint erased cells with the style of
the text before them, which made screens show backgrounds a terminal
doesn't. Screens are now rendered cell by cell from the grid, including
cells erased with a background color. The harness also sends modifier
keys and the space codepoint, and the e2e tests and screens cover the
Sheets-style flows.
commit
08cfa27e108c71f6495671033b51b6318996913b
parent
5f568595b3f92541fcc6e62b831e309b59a859c4
author
Dami <dami.etoile@gmail.com>
30 files changed, +761 -689
Me2e/app_test.go86+++++++++++++-------
Me2e/harness_test.go48+++++++++--
Ae2e/render_test.go129++++++++++++++++++++++++++++++
Me2e/screens_test.go73+++++++++--------
De2e/testdata/screens/.playwright-cli/console-2026-09-26T22-10-26-203Z.log1-
De2e/testdata/screens/.playwright-cli/page-2026-09-26T22-10-26-244Z.yml65---------------
De2e/testdata/screens/.playwright-cli/page-2026-09-26T22-11-20-441Z.yml65---------------
De2e/testdata/screens/.playwright-cli/page-2026-09-26T22-11-44-676Z.yml51------------
Me2e/testdata/screens/budget-light.html56+++++++-------
Me2e/testdata/screens/budget.html56+++++++-------
Ae2e/testdata/screens/column-select.html30+++++++
Me2e/testdata/screens/edit-error.html60+++++++-------
Me2e/testdata/screens/entry-formula.html60+++++++-------
Me2e/testdata/screens/error-goto.html56+++++++-------
Me2e/testdata/screens/help-light.html40+++++----
Me2e/testdata/screens/help.html40+++++----
De2e/testdata/screens/menu-quit-unsaved-light.html30-------
De2e/testdata/screens/menu-quit-unsaved.html30-------
De2e/testdata/screens/menu-top.html30-------
Ae2e/testdata/screens/menu.html30+++++++
Me2e/testdata/screens/narrow.html28+++---
Me2e/testdata/screens/point-range-light.html60+++++++-------
Me2e/testdata/screens/point-range.html60+++++++-------
Me2e/testdata/screens/prompt-width.html60+++++++-------
Ae2e/testdata/screens/quit-confirm-light.html30+++++++
Ae2e/testdata/screens/quit-confirm.html30+++++++
De2e/testdata/screens/range-erase.html30-------
Me2e/testdata/screens/ready-empty.html56+++++++-------
Ae2e/testdata/screens/selection-stats-light.html30+++++++
Ae2e/testdata/screens/selection-stats.html30+++++++
M e2e/app_test.go +55 -31
@@ -13,77 +13,93 @@ import (
1313 // Screen layout: panel lines 0-2, column header 3, grid row 1 on line 4.1414 const gridRow1 = 41515 16-// numRow is how a grid row of numbers in default-width (9) columns looks:17-// a 6-wide row header, then each number right-aligned with one trailing18-// space, as 1-2-3's General format shows them.16+// numRow is how a grid row of numbers in default-width (10) columns looks:17+// a 6-wide row header, then each number right-aligned with one column of18+// padding.1919 func numRow(row int, nums ...string) string {20- line := fmt.Sprintf("%-6d", row)20+ line := fmt.Sprintf("%5d ", row)2121 for _, n := range nums {22- line += fmt.Sprintf("%8s ", n)22+ line += fmt.Sprintf("%9s ", n)2323 }2424 return strings.TrimRight(line, " ")2525 }2626 2727 func TestFormulaRecalc(t *testing.T) {2828 s := start(t, "")29- s.keys("10", "<down>", "20", "<down>", "@SUM(A1..A2)", "<enter>")30- s.waitFor("A3: @SUM(A1..A2)")29+ s.keys("10", "<enter>", "20", "<enter>", "=SUM(A1:A2)", "<enter>")30+ s.keys("<up>")31+ s.waitFor("A3 =SUM(A1:A2)")3132 s.waitForLine(gridRow1+2, numRow(3, "30"))3233 3334 // Changing a precedent recalculates the total on screen.34- s.keys("<home>", "5", "<enter>")35+ s.keys("<ctrl+home>", "5", "<enter>")3536 s.waitForLine(gridRow1+2, numRow(3, "25"))3637 }3738 3839 func TestPointModeBuildsFormula(t *testing.T) {3940 s := start(t, "")40- s.keys("4", "<right>", "6", "<right>", "+", "<left>", "<left>")41+ s.keys("4", "<tab>", "6", "<tab>", "=", "<left>", "<left>")4142 s.waitFor("POINT")42- s.waitForLine(1, "+A1")43+ s.waitForLine(1, "=A1")4344 s.keys("*", "<left>", "<enter>")44- s.waitFor("C1: +A1*B1")45+ // Enter after a run of Tabs returns to the starting column, as in Sheets.46+ s.keys("<up>", "<right>", "<right>")47+ s.waitFor("C1 =A1*B1")4548 s.waitForLine(gridRow1, numRow(1, "4", "6", "24"))4649 }4750 48-func TestLabelsSpillAndAlign(t *testing.T) {51+func TestShiftSelectionShowsStats(t *testing.T) {4952 s := start(t, "")50- s.keys("Quarterly revenue", "<down>", `"right`, "<down>", "^mid", "<enter>")51- s.waitForLine(gridRow1, "1 Quarterly revenue")52- s.waitForLine(gridRow1+1, "2 right")53- s.waitForLine(gridRow1+2, "3 mid")53+ s.keys("1", "<enter>", "2", "<enter>", "3", "<enter>", "<ctrl+home>")54+ s.keys("<shift+down>", "<shift+down>")55+ s.eventually("selection stats", func() bool {56+ l := s.line(29)57+ return strings.Contains(l, "A1:A3") && strings.Contains(l, "Sum 6") && strings.Contains(l, "Count 3")58+ })59+ s.keys("<delete>")60+ s.waitForLine(gridRow1, " 1")61+}62+63+func TestTextOverflow(t *testing.T) {64+ s := start(t, "")65+ s.keys("Quarterly revenue", "<enter>", "$1,200", "<enter>", "TRUE", "<enter>")66+ s.waitForLine(gridRow1, " 1 Quarterly revenue")67+ s.waitForLine(gridRow1+1, numRow(2, "1200"))68+ s.waitForLine(gridRow1+2, " 3 TRUE")5469 }5570 5671 func TestInvalidFormulaCursor(t *testing.T) {5772 s := start(t, "")58- s.keys("@SUM(A1", "<enter>")73+ s.keys("=SUM(A1", "<enter>")5974 s.waitFor("EDIT")60- s.waitFor("expected , or )")75+ s.waitFor("Expected , or ) in SUM")6176 // The real terminal cursor sits on the edit line at the error.6277 s.eventually("cursor at end of edit line", func() bool {6378 x, y := s.cursor()64- return x == len("@SUM(A1") && y == 179+ return x == len("=SUM(A1") && y == 16580 })6681 }6782 68-func TestMenuFirstLetterSetsWidth(t *testing.T) {83+func TestMenuSetsColumnWidth(t *testing.T) {6984 s := start(t, "")70- s.keys("/")71- s.waitFor("Worksheet Range File Quit")72- s.keys("wcs", "20", "<enter>")73- s.waitFor("A1: [W20]")85+ s.keys("<f10>")86+ s.waitFor("File Edit Format")87+ s.keys("f", "<enter>", "c", "20", "<enter>")88+ s.waitFor("READY")89+ s.eventually("wider column A", func() bool { return strings.HasPrefix(s.line(3), strings.Repeat(" ", 6)+strings.Repeat(" ", 9)+"A") })7490 }7591 7692 func TestSaveQuitReopen(t *testing.T) {7793 dir := t.TempDir()7894 s := start(t, dir)79- s.keys("Budget", "<down>", "1200", "<down>", "+A2*12", "<enter>")80- s.keys("/fs", "budget", "<enter>")95+ s.keys("Budget", "<enter>", "1200", "<enter>", "=A2*12", "<enter>")96+ s.keys("<ctrl+s>", "budget", "<enter>")8197 s.eventually("title update", func() bool { return s.title() == "one23 - budget.o23" })8298 if _, err := os.Stat(filepath.Join(dir, "budget.o23")); err != nil {8399 t.Fatal(err)84100 }85101 86- s.keys("/qy")102+ s.keys("<ctrl+q>")87103 s.waitExit()88104 // Leaving the alternate screen restores the user's shell screen.89105 if scr := s.activeScreen(); scr != ghostty.ScreenPrimary {
@@ -97,14 +113,22 @@ func TestSaveQuitReopen(t *testing.T) {
97113 }98114 }99115 116+func TestQuitAsksAboutUnsavedChanges(t *testing.T) {117+ s := start(t, "")118+ s.keys("1", "<enter>", "<ctrl+q>")119+ s.waitFor("Cancel Quit without saving")120+ s.keys("<esc>", "<esc>")121+ s.waitFor("READY")122+}123+100124 func TestResizeShowsMoreColumns(t *testing.T) {101125 s := start(t, "")102- s.waitFor(" J")103- if strings.Contains(s.line(3), " P") {104- t.Fatalf("column P visible at 100 columns: %q", s.line(3))126+ s.waitFor(" I")127+ if strings.Contains(s.line(3), " N") {128+ t.Fatalf("column N visible at 100 columns: %q", s.line(3))105129 }106130 s.resize(160, 30)107- s.eventually("column P after resize", func() bool { return strings.Contains(s.line(3), " P") })131+ s.eventually("column N after resize", func() bool { return strings.Contains(s.line(3), " N") })108132 }109133 110134 // Click handling is covered by the unit tests; this checks the program
M e2e/harness_test.go +38 -10
@@ -48,7 +48,8 @@ type session struct {
4848 cmd *exec.Cmd4949 pty *os.File5050 51- mu sync.Mutex // guards vt, enc and ev51+ mu sync.Mutex // guards vt, enc, ev and raw52+ raw []byte // everything the program wrote, for debugging5253 vt *ghostty.Terminal5354 enc *ghostty.KeyEncoder5455 ev *ghostty.KeyEvent
@@ -118,6 +119,7 @@ func startWith(t *testing.T, o options, args ...string) *session {
118119 if n > 0 {119120 s.mu.Lock()120121 s.vt.Write(buf[:n])122+ s.raw = append(s.raw, buf[:n]...)121123 s.mu.Unlock()122124 }123125 if err != nil {
@@ -144,10 +146,15 @@ func (s *session) screen() string {
144146 return s.format(ghostty.FormatterFormatPlain)145147 }146148 147-// html returns the visible screen as HTML with inline styles, colored by148-// the session's reference palette.149+// html returns the visible screen as HTML (see renderHTML).149150 func (s *session) html() string {150- return s.format(ghostty.FormatterFormatHTML)151+ s.mu.Lock()152+ defer s.mu.Unlock()153+ out, err := renderHTML(s.vt)154+ if err != nil {155+ s.t.Fatal(err)156+ }157+ return out151158 }152159 153160 func (s *session) format(format ghostty.FormatterFormat) string {
@@ -214,12 +221,32 @@ func (s *session) keys(keys ...string) {
214221 s.t.Helper()215222 for _, k := range keys {216223 if name, ok := strings.CutPrefix(k, "<"); ok {217- key, ok := namedKeys[strings.TrimSuffix(name, ">")]218- if !ok {219- s.t.Fatalf("unknown key %s", k)224+ parts := strings.Split(strings.TrimSuffix(name, ">"), "+")225+ var mods ghostty.Mods226+ for _, p := range parts[:len(parts)-1] {227+ switch p {228+ case "shift":229+ mods |= ghostty.ModShift230+ case "ctrl":231+ mods |= ghostty.ModCtrl232+ case "alt":233+ mods |= ghostty.ModAlt234+ }235+ }236+ base := parts[len(parts)-1]237+ if key, ok := namedKeys[base]; ok {238+ var cp rune239+ if base == "space" {240+ cp = ' ' // the encoder needs the key's codepoint241+ }242+ s.press(key, mods, "", cp)243+ continue244+ }245+ if ck, ok := charKeys[rune(base[0])]; ok && len(base) == 1 {246+ s.press(ck.key, mods|ck.mods, "", rune(base[0]))247+ continue220248 }221- s.press(key, 0, "", 0)222- continue249+ s.t.Fatalf("unknown key %s", k)223250 }224251 for _, r := range k {225252 key, ok := charKeys[r]
@@ -306,7 +333,8 @@ var namedKeys = map[string]ghostty.Key{
306333 "up": ghostty.KeyArrowUp, "down": ghostty.KeyArrowDown,307334 "left": ghostty.KeyArrowLeft, "right": ghostty.KeyArrowRight,308335 "pgup": ghostty.KeyPageUp, "pgdown": ghostty.KeyPageDown,309- "f1": ghostty.KeyF1, "f2": ghostty.KeyF2, "f5": ghostty.KeyF5,336+ "f1": ghostty.KeyF1, "f2": ghostty.KeyF2, "f5": ghostty.KeyF5, "f10": ghostty.KeyF10,337+ "space": ghostty.KeySpace,310338 }311339 312340 type physKey struct {
A e2e/render_test.go +129 -0
@@ -0,0 +1,129 @@
1+package e2e2+3+import (4+ "cmp"5+ "fmt"6+ "html"7+ "strings"8+9+ ghostty "go.mitchellh.com/libghostty"10+)11+12+// renderHTML draws the screen as HTML from libghostty's cell grid, one13+// span per run of identically styled cells. Colors are palette CSS14+// variables so a gallery can show the same snapshot under any theme.15+//16+// We don't use libghostty's HTML formatter because it paints erased cells17+// with the style of the text before them, which misrepresents what a18+// terminal shows.19+func renderHTML(vt *ghostty.Terminal) (string, error) {20+ cols, err := vt.Cols()21+ if err != nil {22+ return "", err23+ }24+ rows, err := vt.Rows()25+ if err != nil {26+ return "", err27+ }28+ var b strings.Builder29+ for y := range uint32(rows) {30+ var line strings.Builder31+ var run strings.Builder32+ style := ""33+ flush := func() {34+ if run.Len() == 0 {35+ return36+ }37+ if style == "" {38+ line.WriteString(run.String())39+ } else {40+ fmt.Fprintf(&line, `<span style="%s">%s</span>`, style, run.String())41+ }42+ run.Reset()43+ }44+ for x := range cols {45+ ref, err := vt.GridRef(ghostty.Point{Tag: ghostty.PointTagActive, X: x, Y: y})46+ if err != nil {47+ return "", err48+ }49+ cell, err := ref.Cell()50+ if err != nil {51+ return "", err52+ }53+ if wide, _ := cell.Wide(); wide == ghostty.CellWideSpacerTail {54+ continue55+ }56+ text := " "57+ if has, _ := cell.HasText(); has {58+ cps, _ := ref.Graphemes()59+ var sb strings.Builder60+ for _, cp := range cps {61+ sb.WriteRune(rune(cp))62+ }63+ text = sb.String()64+ }65+ css := ""66+ if st, err := ref.Style(); err == nil && !st.IsDefault() {67+ css = styleCSS(st)68+ }69+ // Cells erased with a background color hold just that color.70+ switch tag, _ := cell.ContentTag(); tag {71+ case ghostty.CellContentBgColorPalette:72+ p, _ := cell.ColorPalette()73+ css = fmt.Sprintf("background:var(--vt-palette-%d)", p)74+ case ghostty.CellContentBgColorRGB:75+ c, _ := cell.ColorRGB()76+ css = fmt.Sprintf("background:#%02x%02x%02x", c.R, c.G, c.B)77+ }78+ if css != style {79+ flush()80+ style = css81+ }82+ run.WriteString(html.EscapeString(text))83+ }84+ flush()85+ b.WriteString(strings.TrimRight(line.String(), " "))86+ b.WriteByte('\n')87+ }88+ return `<pre class="screen">` + strings.TrimRight(b.String(), "\n") + "</pre>", nil89+}90+91+func styleCSS(st *ghostty.Style) string {92+ fg, bg := cssColor(st.FgColor(), ""), cssColor(st.BgColor(), "")93+ if st.Inverse() {94+ fg, bg = cmp.Or(bg, "var(--bg)"), cmp.Or(fg, "var(--fg)")95+ }96+ var parts []string97+ if fg != "" {98+ parts = append(parts, "color:"+fg)99+ }100+ if bg != "" {101+ parts = append(parts, "background:"+bg)102+ }103+ if st.Bold() {104+ parts = append(parts, "font-weight:bold")105+ }106+ if st.Italic() {107+ parts = append(parts, "font-style:italic")108+ }109+ if st.Faint() {110+ parts = append(parts, "opacity:.6")111+ }112+ if st.Underline() != 0 {113+ parts = append(parts, "text-decoration:underline")114+ }115+ if st.Strikethrough() {116+ parts = append(parts, "text-decoration:line-through")117+ }118+ return strings.Join(parts, ";")119+}120+121+func cssColor(c ghostty.StyleColor, none string) string {122+ switch c.Tag {123+ case ghostty.StyleColorPalette:124+ return fmt.Sprintf("var(--vt-palette-%d)", c.Palette)125+ case ghostty.StyleColorRGB:126+ return fmt.Sprintf("#%02x%02x%02x", c.RGB.R, c.RGB.G, c.RGB.B)127+ }128+ return none129+}
M e2e/screens_test.go +39 -34
@@ -22,59 +22,64 @@ type screen struct {
2222 setup func(s *session)2323 }2424 25-// budget types a small worksheet with labels, numbers, formulas and an26-// error, used by several screens.25+// budget types a small sheet with text, numbers, formulas and an error the26+// way a Sheets user would (Tab across, Enter back), then selects the total.2727 func budget(s *session) {28- s.keys("Household budget 2026", "<down>", "<down>")29- s.keys("Rent", "<right>", "1450", "<down>", "<left>")30- s.keys("Groceries", "<right>", "612.4", "<down>", "<left>")31- s.keys("Transit", "<right>", "96", "<down>", "<left>")32- s.keys("Savings rate", "<right>", "+B3/0", "<down>", "<left>")33- s.keys(`"Total`, "<right>", "@SUM(B3..B5)", "<enter>")34- s.waitFor("B7: @SUM(B3..B5)")28+ s.keys("Household budget 2026", "<enter>", "<down>")29+ s.keys("Rent", "<tab>", "1450", "<enter>")30+ s.keys("Groceries", "<tab>", "612.4", "<enter>")31+ s.keys("Transit", "<tab>", "96", "<enter>")32+ s.keys("Savings rate", "<tab>", "=B3/0", "<enter>")33+ s.keys("Total", "<tab>", "=SUM(B3:B5)", "<enter>")34+ s.keys("<up>", "<right>")35+ s.waitFor("B7 =SUM(B3:B5)")3536 }3637 3738 var screens = []screen{3839 {name: "ready-empty", setup: func(s *session) {}},3940 {name: "budget", setup: budget},40- {name: "budget-light", opts: options{light: true}, setup: budget},4141 {name: "entry-formula", setup: func(s *session) {4242 budget(s)43- s.keys("<down>", "+B7*12")44- s.waitFor("VALUE")43+ s.keys("<down>", "=B7*12")44+ s.waitFor("ENTER")4545 }},4646 {name: "point-range", setup: func(s *session) {4747 budget(s)48- s.keys("<right>", "@AVG(", "<left>", "<up>", "<up>", "<up>", "<up>", ".", "<down>", "<down>")49- s.waitFor("@AVG(B3..B5")48+ s.keys("<right>", "=AVERAGE(", "<left>", "<up>", "<up>", "<up>", "<up>", "<shift+down>", "<shift+down>")49+ s.waitFor("=AVERAGE(B3:B5")5050 }},51- {name: "edit-error", setup: func(s *session) {52- s.keys("@SUM(A1", "<enter>")53- s.waitFor("expected , or )")51+ {name: "selection-stats", setup: func(s *session) {52+ budget(s)53+ s.keys("<up>", "<up>", "<up>", "<up>", "<shift+down>", "<shift+down>")54+ s.waitFor("Sum 2158.4")5455 }},55- {name: "menu-top", setup: func(s *session) {56+ {name: "column-select", setup: func(s *session) {5657 budget(s)57- s.keys("/")58- s.waitFor("Worksheet Range File Quit")58+ s.keys("<ctrl+space>")59+ s.waitFor("B1:B8192")60+ }},61+ {name: "edit-error", setup: func(s *session) {62+ s.keys("=SUM(A1", "<enter>")63+ s.waitFor("Expected , or ) in SUM")5964 }},60- {name: "menu-quit-unsaved", setup: func(s *session) {65+ {name: "menu", setup: func(s *session) {6166 budget(s)62- s.keys("/q", "<right>")63- s.waitFor("NOT SAVED")67+ s.keys("<f10>")68+ s.waitFor("File Edit Format")6469 }},65- {name: "prompt-width", setup: func(s *session) {70+ {name: "quit-confirm", setup: func(s *session) {6671 budget(s)67- s.keys("<home>", "/wcs", "<right>", "<right>", "<right>")68- s.waitFor("Enter column width (1..240): 12")72+ s.keys("<ctrl+q>", "<right>")73+ s.waitFor("unsaved changes")6974 }},70- {name: "range-erase", setup: func(s *session) {75+ {name: "prompt-width", setup: func(s *session) {7176 budget(s)72- s.keys("<home>", "<down>", "<down>", "/re", "<right>", "<down>", "<down>")73- s.waitFor("Enter range to erase: A3..B5")77+ s.keys("<ctrl+home>", "<f10>", "f", "<enter>", "c", "<right>", "<right>", "<right>")78+ s.waitFor("Column width (1-240): 13")7479 }},7580 {name: "error-goto", setup: func(s *session) {7681 s.keys("<f5>", "nope", "<enter>")77- s.waitFor("Invalid cell address")82+ s.waitFor("Not a cell address")7883 }},7984 {name: "help", setup: func(s *session) {8085 s.keys("<f1>")
@@ -86,7 +91,7 @@ var screens = []screen{
8691 // Key screens are also recorded on a light terminal, where the app picks8792 // its light theme from the reported background color.8893 func init() {89- for _, name := range []string{"point-range", "menu-quit-unsaved", "help"} {94+ for _, name := range []string{"budget", "point-range", "selection-stats", "quit-confirm", "help"} {9095 for _, sc := range screens {9196 if sc.name == name {9297 sc.name += "-light"
@@ -159,8 +164,8 @@ body{margin:0;padding:32px;background:#0f1012;color:#ddd;font:14px system-ui,san
159164 h1{font-weight:600;margin:0 0 24px}160165 section{margin:0 0 40px}161166 h2{font:500 13px ui-monospace,monospace;color:#aaa;margin:0 0 8px}162-.term{display:inline-block;padding:14px 16px;border-radius:10px;box-shadow:0 8px 30px #0008;font:13px/1.25 "JetBrains Mono","SF Mono",Menlo,monospace}163-.term div{font-family:inherit !important}167+.term{display:inline-block;padding:14px 16px;border-radius:10px;box-shadow:0 8px 30px #0008}168+.screen{margin:0;font:13px/1.3 "JetBrains Mono","SF Mono",Menlo,monospace;color:var(--fg)}164169 .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(820px,1fr));gap:8px 24px}165170 `)166171 for _, p := range []struct {
@@ -168,7 +173,7 @@ h2{font:500 13px ui-monospace,monospace;color:#aaa;margin:0 0 8px}
168173 ansi [16]uint32169174 bg, fg string170175 }{{"dark", darkANSI, "#1d1f21", "#c5c8c6"}, {"light", lightANSI, "#fafafa", "#1d1f21"}} {171- fmt.Fprintf(&b, ".%s{background:%s;color:%s}.%s{", p.class, p.bg, p.fg, p.class)176+ fmt.Fprintf(&b, ".%s{background:%s;color:%s;--bg:%s;--fg:%s}.%s{", p.class, p.bg, p.fg, p.bg, p.fg, p.class)172177 for i, c := range p.ansi {173178 fmt.Fprintf(&b, "--vt-palette-%d:#%06x;", i, c)174179 }
D e2e/testdata/screens/.playwright-cli/console-2026-09-26T22-10-26-203Z.log +0 -1
D e2e/testdata/screens/.playwright-cli/page-2026-09-26T22-10-26-244Z.yml +0 -65
@@ -1,65 +0,0 @@
1-- generic [active] [ref=e1]:2- - heading "one23 screens" [level=1] [ref=e2]3- - generic [ref=e3]:4- - heading "ready-empty" [level=2] [ref=e4]5- - generic [ref=e5]:6- - generic [ref=e6]: "A1: READY A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"7- - generic [ref=e8]: "A1: READY A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"8- - generic [ref=e10]:9- - heading "budget" [level=2] [ref=e11]10- - generic [ref=e12]:11- - generic [ref=e13]: "B7: @SUM(B3..B5) READY A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"12- - generic [ref=e15]: "B7: @SUM(B3..B5) READY A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"13- - generic [ref=e17]:14- - heading "budget-light" [level=2] [ref=e18]15- - generic [ref=e19]: "B7: @SUM(B3..B5) READY A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"16- - generic [ref=e22]:17- - heading "entry-formula" [level=2] [ref=e23]18- - generic [ref=e24]:19- - generic [ref=e25]: "B8: VALUE +B7*12 A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"20- - generic [ref=e27]: "B8: VALUE +B7*12 A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"21- - generic [ref=e29]:22- - heading "point-range" [level=2] [ref=e30]23- - generic [ref=e31]:24- - generic [ref=e32]: "C7: POINT @AVG(B3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"25- - generic [ref=e34]: "C7: POINT @AVG(B3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"26- - generic [ref=e36]:27- - heading "edit-error" [level=2] [ref=e37]28- - generic [ref=e38]:29- - generic [ref=e39]: "A1: EDIT @SUM(A1 expected , or ) at position 8 A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"30- - generic [ref=e41]: "A1: EDIT @SUM(A1 expected , or ) at position 8 A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"31- - generic [ref=e43]:32- - heading "menu-top" [level=2] [ref=e44]33- - generic [ref=e45]:34- - generic [ref=e46]: "B7: @SUM(B3..B5) MENU Worksheet Range File Quit Column Erase A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"35- - generic [ref=e48]: "B7: @SUM(B3..B5) MENU Worksheet Range File Quit Column Erase A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"36- - generic [ref=e50]:37- - heading "menu-quit-unsaved" [level=2] [ref=e51]38- - generic [ref=e52]:39- - generic [ref=e53]: "B7: @SUM(B3..B5) MENU No Yes WORKSHEET CHANGES NOT SAVED! End the session anyway? A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"40- - generic [ref=e55]: "B7: @SUM(B3..B5) MENU No Yes WORKSHEET CHANGES NOT SAVED! End the session anyway? A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"41- - generic [ref=e57]:42- - heading "prompt-width" [level=2] [ref=e58]43- - generic [ref=e59]:44- - generic [ref=e60]: "A1: [W12] 'Household budget 2026 POINT Enter column width (1..240): 12 Type a width or use the left and right arrows A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings rate ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"45- - generic [ref=e62]: "A1: [W12] 'Household budget 2026 POINT Enter column width (1..240): 12 Type a width or use the left and right arrows A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings rate ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"46- - generic [ref=e64]:47- - heading "range-erase" [level=2] [ref=e65]48- - generic [ref=e66]:49- - generic [ref=e67]: "A3: 'Rent POINT Enter range to erase: A3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"50- - generic [ref=e69]: "A3: 'Rent POINT Enter range to erase: A3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"51- - generic [ref=e71]:52- - heading "error-goto" [level=2] [ref=e72]53- - generic [ref=e73]:54- - generic [ref=e74]: "A1: ERROR A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Invalid cell address: nope (press any key)"55- - generic [ref=e76]: "A1: ERROR A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Invalid cell address: nope (press any key)"56- - generic [ref=e78]:57- - heading "help" [level=2] [ref=e79]58- - generic [ref=e80]:59- - generic [ref=e81]: "HELP one23 (press any key to return) Arrows Move the cell pointer PgUp / PgDn Move one screen up or down Tab / Shift+Tab Move one screen right or left Home Go to A1 Ctrl+C Quit immediately F2 Edit the current cell's contents DELETE Erase the current cell F5 Move the cell pointer to an address F1 Show keys and functions / OR < Open the slash menu Entries Text Label (prefix ' left, \" right, ^ center) 0-9 + - . ( @ # $ Value or formula, e.g. +A1*2, @SUM(A1..A5) Arrows after an operator enter POINT mode; . anchors a range Functions: @SUM @AVG @COUNT @MIN @MAX @ABS @INT @SQRT @ROUND @MOD @IF @PI @TRUE @FALSE @ERR @NA Operators: + - * / ^ & = <> < > <= >= #AND# #OR# #NOT#"60- - generic [ref=e83]: "HELP one23 (press any key to return) Arrows Move the cell pointer PgUp / PgDn Move one screen up or down Tab / Shift+Tab Move one screen right or left Home Go to A1 Ctrl+C Quit immediately F2 Edit the current cell's contents DELETE Erase the current cell F5 Move the cell pointer to an address F1 Show keys and functions / OR < Open the slash menu Entries Text Label (prefix ' left, \" right, ^ center) 0-9 + - . ( @ # $ Value or formula, e.g. +A1*2, @SUM(A1..A5) Arrows after an operator enter POINT mode; . anchors a range Functions: @SUM @AVG @COUNT @MIN @MAX @ABS @INT @SQRT @ROUND @MOD @IF @PI @TRUE @FALSE @ERR @NA Operators: + - * / ^ & = <> < > <= >= #AND# #OR# #NOT#"61- - generic [ref=e85]:62- - heading "narrow" [level=2] [ref=e86]63- - generic [ref=e87]:64- - generic [ref=e88]: "B7: @SUM(B3..B5) READY A B C D E F 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 untitled [modified] F1 Help / Menu"65- - generic [ref=e90]: "B7: @SUM(B3..B5) READY A B C D E F 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 untitled [modified] F1 Help / Menu"\ No newline at end of file
D e2e/testdata/screens/.playwright-cli/page-2026-09-26T22-11-20-441Z.yml +0 -65
@@ -1,65 +0,0 @@
1-- generic [active] [ref=f1e1]:2- - heading "one23 screens" [level=1] [ref=f1e2]3- - generic [ref=f1e3]:4- - heading "ready-empty" [level=2] [ref=f1e4]5- - generic [ref=f1e5]:6- - generic [ref=f1e6]: "A1: READY A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"7- - generic [ref=f1e8]: "A1: READY A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"8- - generic [ref=f1e10]:9- - heading "budget" [level=2] [ref=f1e11]10- - generic [ref=f1e12]:11- - generic [ref=f1e13]: "B7: @SUM(B3..B5) READY A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"12- - generic [ref=f1e15]: "B7: @SUM(B3..B5) READY A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"13- - generic [ref=f1e17]:14- - heading "budget-light" [level=2] [ref=f1e18]15- - generic [ref=f1e19]: "B7: @SUM(B3..B5) READY A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"16- - generic [ref=f1e22]:17- - heading "entry-formula" [level=2] [ref=f1e23]18- - generic [ref=f1e24]:19- - generic [ref=f1e25]: "B8: VALUE +B7*12 A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"20- - generic [ref=f1e27]: "B8: VALUE +B7*12 A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"21- - generic [ref=f1e29]:22- - heading "point-range" [level=2] [ref=f1e30]23- - generic [ref=f1e31]:24- - generic [ref=f1e32]: "C7: POINT @AVG(B3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"25- - generic [ref=f1e34]: "C7: POINT @AVG(B3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"26- - generic [ref=f1e36]:27- - heading "edit-error" [level=2] [ref=f1e37]28- - generic [ref=f1e38]:29- - generic [ref=f1e39]: "A1: EDIT @SUM(A1 expected , or ) at position 8 A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"30- - generic [ref=f1e41]: "A1: EDIT @SUM(A1 expected , or ) at position 8 A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"31- - generic [ref=f1e43]:32- - heading "menu-top" [level=2] [ref=f1e44]33- - generic [ref=f1e45]:34- - generic [ref=f1e46]: "B7: @SUM(B3..B5) MENU Worksheet Range File Quit Column Erase A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"35- - generic [ref=f1e48]: "B7: @SUM(B3..B5) MENU Worksheet Range File Quit Column Erase A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"36- - generic [ref=f1e50]:37- - heading "menu-quit-unsaved" [level=2] [ref=f1e51]38- - generic [ref=f1e52]:39- - generic [ref=f1e53]: "B7: @SUM(B3..B5) MENU No Yes WORKSHEET CHANGES NOT SAVED! End the session anyway? A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"40- - generic [ref=f1e55]: "B7: @SUM(B3..B5) MENU No Yes WORKSHEET CHANGES NOT SAVED! End the session anyway? A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"41- - generic [ref=f1e57]:42- - heading "prompt-width" [level=2] [ref=f1e58]43- - generic [ref=f1e59]:44- - generic [ref=f1e60]: "A1: [W12] 'Household budget 2026 POINT Enter column width (1..240): 12 Type a width or use the left and right arrows A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings rate ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"45- - generic [ref=f1e62]: "A1: [W12] 'Household budget 2026 POINT Enter column width (1..240): 12 Type a width or use the left and right arrows A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings rate ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"46- - generic [ref=f1e64]:47- - heading "range-erase" [level=2] [ref=f1e65]48- - generic [ref=f1e66]:49- - generic [ref=f1e67]: "A3: 'Rent POINT Enter range to erase: A3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"50- - generic [ref=f1e69]: "A3: 'Rent POINT Enter range to erase: A3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"51- - generic [ref=f1e71]:52- - heading "error-goto" [level=2] [ref=f1e72]53- - generic [ref=f1e73]:54- - generic [ref=f1e74]: "A1: ERROR A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Invalid cell address: nope (press any key)"55- - generic [ref=f1e76]: "A1: ERROR A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Invalid cell address: nope (press any key)"56- - generic [ref=f1e78]:57- - heading "help" [level=2] [ref=f1e79]58- - generic [ref=f1e80]:59- - generic [ref=f1e81]: "HELP one23 (press any key to return) Arrows Move the cell pointer PgUp / PgDn Move one screen up or down Tab / Shift+Tab Move one screen right or left Home Go to A1 Ctrl+C Quit immediately F2 Edit the current cell's contents Del Erase the current cell F5 Move the cell pointer to an address F1 Show keys and functions / or < Open the slash menu Entries Text Label (prefix ' left, \" right, ^ center) 0-9 + - . ( @ # $ Value or formula, e.g. +A1*2, @SUM(A1..A5) Arrow after + ( , POINT mode: arrow to a cell, . anchors a range Functions: @SUM @AVG @COUNT @MIN @MAX @ABS @INT @SQRT @ROUND @MOD @IF @PI @TRUE @FALSE @ERR @NA Operators: + - * / ^ & = <> < > <= >= #AND# #OR# #NOT#"60- - generic [ref=f1e83]: "HELP one23 (press any key to return) Arrows Move the cell pointer PgUp / PgDn Move one screen up or down Tab / Shift+Tab Move one screen right or left Home Go to A1 Ctrl+C Quit immediately F2 Edit the current cell's contents Del Erase the current cell F5 Move the cell pointer to an address F1 Show keys and functions / or < Open the slash menu Entries Text Label (prefix ' left, \" right, ^ center) 0-9 + - . ( @ # $ Value or formula, e.g. +A1*2, @SUM(A1..A5) Arrow after + ( , POINT mode: arrow to a cell, . anchors a range Functions: @SUM @AVG @COUNT @MIN @MAX @ABS @INT @SQRT @ROUND @MOD @IF @PI @TRUE @FALSE @ERR @NA Operators: + - * / ^ & = <> < > <= >= #AND# #OR# #NOT#"61- - generic [ref=f1e85]:62- - heading "narrow" [level=2] [ref=f1e86]63- - generic [ref=f1e87]:64- - generic [ref=f1e88]: "B7: @SUM(B3..B5) READY A B C D E F 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 untitled [modified] F1 Help / Menu"65- - generic [ref=f1e90]: "B7: @SUM(B3..B5) READY A B C D E F 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 untitled [modified] F1 Help / Menu"\ No newline at end of file
D e2e/testdata/screens/.playwright-cli/page-2026-09-26T22-11-44-676Z.yml +0 -51
@@ -1,51 +0,0 @@
1-- generic [active] [ref=f2e1]:2- - heading "one23 screens" [level=1] [ref=f2e2]3- - generic [ref=f2e3]:4- - generic [ref=f2e4]:5- - heading "ready-empty" [level=2] [ref=f2e5]6- - generic [ref=f2e6]: "A1: READY A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"7- - generic [ref=f2e9]:8- - heading "budget" [level=2] [ref=f2e10]9- - generic [ref=f2e11]: "B7: @SUM(B3..B5) READY A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"10- - generic [ref=f2e14]:11- - heading "budget-light" [level=2] [ref=f2e15]12- - generic [ref=f2e16]: "B7: @SUM(B3..B5) READY A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"13- - generic [ref=f2e19]:14- - heading "entry-formula" [level=2] [ref=f2e20]15- - generic [ref=f2e21]: "B8: VALUE +B7*12 A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"16- - generic [ref=f2e24]:17- - heading "point-range" [level=2] [ref=f2e25]18- - generic [ref=f2e26]: "C7: POINT @AVG(B3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"19- - generic [ref=f2e29]:20- - heading "edit-error" [level=2] [ref=f2e30]21- - generic [ref=f2e31]: "A1: EDIT @SUM(A1 expected , or ) at position 8 A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"22- - generic [ref=f2e34]:23- - heading "menu-top" [level=2] [ref=f2e35]24- - generic [ref=f2e36]: "B7: @SUM(B3..B5) MENU Worksheet Range File Quit Column Erase A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"25- - generic [ref=f2e39]:26- - heading "menu-quit-unsaved" [level=2] [ref=f2e40]27- - generic [ref=f2e41]: "B7: @SUM(B3..B5) MENU No Yes WORKSHEET CHANGES NOT SAVED! End the session anyway? A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"28- - generic [ref=f2e44]:29- - heading "prompt-width" [level=2] [ref=f2e45]30- - generic [ref=f2e46]: "A1: [W12] 'Household budget 2026 POINT Enter column width (1..240): 12 Type a width or use the left and right arrows A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings rate ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"31- - generic [ref=f2e49]:32- - heading "range-erase" [level=2] [ref=f2e50]33- - generic [ref=f2e51]: "A3: 'Rent POINT Enter range to erase: A3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"34- - generic [ref=f2e54]:35- - heading "error-goto" [level=2] [ref=f2e55]36- - generic [ref=f2e56]: "A1: ERROR A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Invalid cell address: nope (press any key)"37- - generic [ref=f2e59]:38- - heading "help" [level=2] [ref=f2e60]39- - generic [ref=f2e61]: "HELP one23 (press any key to return) Arrows Move the cell pointer PgUp / PgDn Move one screen up or down Tab / Shift+Tab Move one screen right or left Home Go to A1 Ctrl+C Quit immediately F2 Edit the current cell's contents Del Erase the current cell F5 Move the cell pointer to an address F1 Show keys and functions / or < Open the slash menu Entries Text Label (prefix ' left, \" right, ^ center) 0-9 + - . ( @ # $ Value or formula, e.g. +A1*2, @SUM(A1..A5) Arrow after + ( , POINT mode: arrow to a cell, . anchors a range Functions: @SUM @AVG @COUNT @MIN @MAX @ABS @INT @SQRT @ROUND @MOD @IF @PI @TRUE @FALSE @ERR @NA Operators: + - * / ^ & = <> < > <= >= #AND# #OR# #NOT#"40- - generic [ref=f2e64]:41- - heading "narrow" [level=2] [ref=f2e65]42- - generic [ref=f2e66]: "B7: @SUM(B3..B5) READY A B C D E F 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 untitled [modified] F1 Help / Menu"43- - generic [ref=f2e69]:44- - heading "point-range-light" [level=2] [ref=f2e70]45- - generic [ref=f2e71]: "C7: POINT @AVG(B3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"46- - generic [ref=f2e74]:47- - heading "menu-quit-unsaved-light" [level=2] [ref=f2e75]48- - generic [ref=f2e76]: "B7: @SUM(B3..B5) MENU No Yes WORKSHEET CHANGES NOT SAVED! End the session anyway? A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"49- - generic [ref=f2e79]:50- - heading "help-light" [level=2] [ref=f2e80]51- - generic [ref=f2e81]: "HELP one23 (press any key to return) Arrows Move the cell pointer PgUp / PgDn Move one screen up or down Tab / Shift+Tab Move one screen right or left Home Go to A1 Ctrl+C Quit immediately F2 Edit the current cell's contents Del Erase the current cell F5 Move the cell pointer to an address F1 Show keys and functions / or < Open the slash menu Entries Text Label (prefix ' left, \" right, ^ center) 0-9 + - . ( @ # $ Value or formula, e.g. +A1*2, @SUM(A1..A5) Arrow after + ( , POINT mode: arrow to a cell, . anchors a range Functions: @SUM @AVG @COUNT @MIN @MAX @ABS @INT @SQRT @ROUND @MOD @IF @PI @TRUE @FALSE @ERR @NA Operators: + - * / ^ & = <> < > <= >= #AND# #OR# #NOT#"\ No newline at end of file
M e2e/testdata/screens/budget-light.html +28 -28
@@ -1,30 +1,30 @@
1-<div style="font-family: monospace; white-space: pre;">B7: @SUM(B3..B5) <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> READY</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>1+<pre class="screen"><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> B7 </span> =SUM(B3:B5) <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 33 4-<div style="display: inline;background-color: var(--vt-palette-7);"> </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> C D E F G H I J </div>5-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 1 </div>Household budget 20266-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 2 </div>7-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 3 </div>Rent 14508-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 4 </div>Groceries 612.49-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 5 </div>Transit 9610-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 7 </div> Total<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 2158.4 </div>12-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 8 </div>13-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 9 </div>14-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 10 </div>15-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 11 </div>16-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 12 </div>17-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 13 </div>18-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 14 </div>19-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 15 </div>20-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 16 </div>21-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 17 </div>22-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 18 </div>23-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 19 </div>24-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 20 </div>25-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 21 </div>26-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 22 </div>27-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 23 </div>28-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 24 </div>29-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 25 </div>30-untitled [modified] <div style="display: inline;color: var(--vt-palette-0);">F1 Help / Menu</div></div>\ No newline at end of file4+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> A </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> B </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> C D E F G H I </span>5+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 1 </span> Household budget 20266+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 2 </span>7+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 3 </span> Rent 14508+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 4 </span> Groceries 612.49+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 5 </span> Transit 9610+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 6 </span> Savings r<span style="color:var(--vt-palette-1)"> #DIV/0! </span>11+<span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> 7 </span> Total <span style="color:var(--vt-palette-0);background:var(--vt-palette-6)"> 2158.4 </span>12+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 8 </span>13+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 9 </span>14+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 10 </span>15+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 11 </span>16+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 12 </span>17+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 13 </span>18+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 14 </span>19+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 15 </span>20+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 16 </span>21+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 17 </span>22+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 18 </span>23+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 19 </span>24+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 20 </span>25+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 21 </span>26+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 22 </span>27+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 23 </span>28+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 24 </span>29+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 25 </span>30+untitled<span style="color:var(--vt-palette-0)"> modified</span> <span style="font-weight:bold">F1</span> <span style="color:var(--vt-palette-0)">help </span><span style="font-weight:bold">F10</span> <span style="color:var(--vt-palette-0)">menu </span><span style="font-weight:bold">Ctrl+Q</span> <span style="color:var(--vt-palette-0)">quit</span></pre>\ No newline at end of file
M e2e/testdata/screens/budget.html +28 -28
@@ -1,30 +1,30 @@
1-<div style="font-family: monospace; white-space: pre;">B7: @SUM(B3..B5) <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> READY</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>1+<pre class="screen"><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> B7 </span> =SUM(B3:B5) <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 33 4-<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> C D E F G H I J </div>5-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 1 </div>Household budget 20266-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>Rent 14508-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>Groceries 612.49-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>Transit 9610-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 7 </div> Total<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 2158.4 </div>12-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30-untitled [modified] <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file4+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> A </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> B </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> C D E F G H I </span>5+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 1 </span> Household budget 20266+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 2 </span>7+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 3 </span> Rent 14508+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 4 </span> Groceries 612.49+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 5 </span> Transit 9610+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 6 </span> Savings r<span style="color:var(--vt-palette-1)"> #DIV/0! </span>11+<span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> 7 </span> Total <span style="color:var(--vt-palette-0);background:var(--vt-palette-6)"> 2158.4 </span>12+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 8 </span>13+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 9 </span>14+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 10 </span>15+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 11 </span>16+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 12 </span>17+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 13 </span>18+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 14 </span>19+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 15 </span>20+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 16 </span>21+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 17 </span>22+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 18 </span>23+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 19 </span>24+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 20 </span>25+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 21 </span>26+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 22 </span>27+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 23 </span>28+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 24 </span>29+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 25 </span>30+untitled<span style="color:var(--vt-palette-8)"> modified</span> <span style="font-weight:bold">F1</span> <span style="color:var(--vt-palette-8)">help </span><span style="font-weight:bold">F10</span> <span style="color:var(--vt-palette-8)">menu </span><span style="font-weight:bold">Ctrl+Q</span> <span style="color:var(--vt-palette-8)">quit</span></pre>\ No newline at end of file
A e2e/testdata/screens/column-select.html +30 -0
@@ -0,0 +1,30 @@
1+<pre class="screen"><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> B7 </span> =SUM(B3:B5) <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>2+3+4+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> A </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> B </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> C D E F G H I </span>5+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 1 </span> Household<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> budget 20</span>266+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 2 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>7+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 3 </span> Rent <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 1450 </span>8+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 4 </span> Groceries<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 612.4 </span>9+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 5 </span> Transit <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 96 </span>10+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 6 </span> Savings r<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> #DIV/0! </span>11+<span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> 7 </span> Total <span style="color:var(--vt-palette-0);background:var(--vt-palette-6)"> 2158.4 </span>12+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 8 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>13+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 9 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>14+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 10 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>15+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 11 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>16+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 12 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>17+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 13 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>18+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 14 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>19+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 15 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>20+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 16 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>21+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 17 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>22+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 18 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>23+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 19 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>24+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 20 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>25+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 21 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>26+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 22 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>27+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 23 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>28+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 24 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>29+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 25 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> </span>30+untitled<span style="color:var(--vt-palette-8)"> modified</span> <span style="font-weight:bold">B1:B8192</span> <span style="color:var(--vt-palette-8)">Sum </span>4316.8 <span style="color:var(--vt-palette-8)">Avg </span>1079.2 <span style="color:var(--vt-palette-8)">Count </span>5</pre>\ No newline at end of file
M e2e/testdata/screens/edit-error.html +30 -30
@@ -1,30 +1,30 @@
1-<div style="font-family: monospace; white-space: pre;">A1: <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> EDIT</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2-@SUM(A13-<div style="display: inline;color: var(--vt-palette-3);">expected , or ) at position 8</div>4-<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> A </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> B C D E F G H I J </div>5-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 1 </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> </div>6-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>8-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>9-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>10-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>11-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 7 </div>12-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30-untitled <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file1+<pre class="screen"><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> A1 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> EDIT</span><span style="background:var(--vt-palette-6)"> </span>2+=SUM(A13+<span style="color:var(--vt-palette-3)">Expected , or ) in SUM</span>4+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> A </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> B C D E F G H I </span>5+<span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> 1 </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)"> =SUM(A1 </span>6+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 2 </span>7+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 3 </span>8+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 4 </span>9+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 5 </span>10+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 6 </span>11+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 7 </span>12+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 8 </span>13+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 9 </span>14+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 10 </span>15+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 11 </span>16+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 12 </span>17+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 13 </span>18+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 14 </span>19+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 15 </span>20+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 16 </span>21+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 17 </span>22+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 18 </span>23+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 19 </span>24+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 20 </span>25+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 21 </span>26+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 22 </span>27+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 23 </span>28+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 24 </span>29+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 25 </span>30+untitled <span style="font-weight:bold">F1</span> <span style="color:var(--vt-palette-8)">help </span><span style="font-weight:bold">F10</span> <span style="color:var(--vt-palette-8)">menu </span><span style="font-weight:bold">Ctrl+Q</span> <span style="color:var(--vt-palette-8)">quit</span></pre>\ No newline at end of file
M e2e/testdata/screens/entry-formula.html +30 -30
@@ -1,30 +1,30 @@
1-<div style="font-family: monospace; white-space: pre;">B8: <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> VALUE</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2-+B7*123-4-<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> C D E F G H I J </div>5-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 1 </div>Household budget 20266-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>Rent 14508-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>Groceries 612.49-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>Transit 9610-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 7 </div> Total 2158.412-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 8 </div> <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> </div>13-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30-untitled [modified] <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file1+<pre class="screen"><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> B8 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> ENTER</span><span style="background:var(--vt-palette-6)"> </span>2+=B7*123+<span style="font-weight:bold">Enter</span> <span style="color:var(--vt-palette-8)">accept </span><span style="font-weight:bold">Tab</span> <span style="color:var(--vt-palette-8)">accept and go right </span><span style="font-weight:bold">Arrows after an operator</span> <span style="color:var(--vt-palette-8)">pick cells </span><span style="font-weight:bold">Esc</span> <span style="color:var(--vt-palette-8)">cancel</span>4+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> A </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> B </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> C D E F G H I </span>5+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 1 </span> Household budget 20266+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 2 </span>7+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 3 </span> Rent 14508+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 4 </span> Groceries 612.49+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 5 </span> Transit 9610+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 6 </span> Savings r<span style="color:var(--vt-palette-1)"> #DIV/0! </span>11+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 7 </span> Total 2158.412+<span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> 8 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-6)"> =B7*12 </span>13+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 9 </span>14+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 10 </span>15+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 11 </span>16+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 12 </span>17+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 13 </span>18+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 14 </span>19+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 15 </span>20+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 16 </span>21+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 17 </span>22+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 18 </span>23+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 19 </span>24+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 20 </span>25+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 21 </span>26+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 22 </span>27+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 23 </span>28+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 24 </span>29+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 25 </span>30+untitled<span style="color:var(--vt-palette-8)"> modified</span> <span style="font-weight:bold">F1</span> <span style="color:var(--vt-palette-8)">help </span><span style="font-weight:bold">F10</span> <span style="color:var(--vt-palette-8)">menu </span><span style="font-weight:bold">Ctrl+Q</span> <span style="color:var(--vt-palette-8)">quit</span></pre>\ No newline at end of file
M e2e/testdata/screens/error-goto.html +28 -28
@@ -1,30 +1,30 @@
1-<div style="font-family: monospace; white-space: pre;">A1: <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> ERROR</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>1+<pre class="screen"><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> A1 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> ERROR</span><span style="background:var(--vt-palette-6)"> </span>22 33 4-<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> A </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> B C D E F G H I J </div>5-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 1 </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> </div>6-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>8-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>9-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>10-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>11-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 7 </div>12-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30-<div style="display: inline;color: var(--vt-palette-9);font-weight: bold;">Invalid cell address: nope</div><div style="display: inline;color: var(--vt-palette-8);"> (press any key)</div></div>\ No newline at end of file4+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> A </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> B C D E F G H I </span>5+<span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> 1 </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)"> </span>6+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 2 </span>7+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 3 </span>8+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 4 </span>9+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 5 </span>10+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 6 </span>11+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 7 </span>12+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 8 </span>13+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 9 </span>14+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 10 </span>15+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 11 </span>16+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 12 </span>17+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 13 </span>18+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 14 </span>19+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 15 </span>20+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 16 </span>21+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 17 </span>22+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 18 </span>23+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 19 </span>24+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 20 </span>25+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 21 </span>26+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 22 </span>27+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 23 </span>28+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 24 </span>29+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 25 </span>30+<span style="color:var(--vt-palette-9);font-weight:bold">Not a cell address: nope</span><span style="color:var(--vt-palette-8)"> press any key</span></pre>\ No newline at end of file
M e2e/testdata/screens/help-light.html +22 -18
@@ -1,22 +1,26 @@
1-<div style="font-family: monospace; white-space: pre;"><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> HELP </div> one23 (press any key to return)1+<pre class="screen"><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> HELP </span> Keyboard shortcuts <span style="color:var(--vt-palette-0)">(press any key to return)</span>22 3- Arrows Move the cell pointer4- PgUp / PgDn Move one screen up or down5- Tab / Shift+Tab Move one screen right or left6- Home Go to A17- Ctrl+C Quit immediately3+ Arrows Move Shift+arrows Select4+ Ctrl+arrows Jump to the edge of the data (add Shift to select)5+ Tab / Shift+Tab Right / left PgUp / PgDn Screen up / down6+ Home / Ctrl+Home Column A / A1 Ctrl+End Last used cell7+ Mouse Click, drag or Shift+click to select; click headers8+ for whole columns or rows; double-click to edit89 9- F2 Edit the current cell&#39;s contents10- Del Erase the current cell11- F5 Move the cell pointer to an address12- F1 Show keys and functions13- / or &lt; Open the slash menu10+ Backspace / Del Clear the contents of the selected cells11+ Esc Collapse the selection to the active cell12+ Enter / F2 Edit the active cell&#39;s contents13+ Ctrl+G / F5 Move to a cell address14+ F10 Open the menu15+ Ctrl+O Open a sheet, replacing this one16+ Ctrl+Q Close one2317+ Ctrl+S Save the sheet18+ Ctrl+A Select the data, then the whole sheet19+ Ctrl+Space Select the whole columns of the selection20+ Shift+Space Select the whole rows of the selection1421 15- Entries16- Text Label (prefix &#39; left, &quot; right, ^ center)17- 0-9 + - . ( @ # $ Value or formula, e.g. +A1*2, @SUM(A1..A5)18- Arrow after + ( , POINT mode: arrow to a cell, . anchors a range22+ Typing replaces the cell. Start with = for a formula, &#39; to force text.23+ While typing a formula, arrows after an operator pick cells.1924 20- Functions: @SUM @AVG @COUNT @MIN @MAX @ABS @INT @SQRT @ROUND @MOD21- @IF @PI @TRUE @FALSE @ERR @NA22- Operators: + - * / ^ &amp; = &lt;&gt; &lt; &gt; &lt;= &gt;= #AND# #OR# #NOT#</div>\ No newline at end of file25+ Functions: ABS AND AVERAGE COUNT COUNTA FALSE IF IFERROR INT MAX MIN MOD NA NOT OR PI ROUND SQRT26+ SUM TRUE</pre>\ No newline at end of file
M e2e/testdata/screens/help.html +22 -18
@@ -1,22 +1,26 @@
1-<div style="font-family: monospace; white-space: pre;"><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> HELP </div> one23 (press any key to return)1+<pre class="screen"><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> HELP </span> Keyboard shortcuts <span style="color:var(--vt-palette-8)">(press any key to return)</span>22 3- Arrows Move the cell pointer4- PgUp / PgDn Move one screen up or down5- Tab / Shift+Tab Move one screen right or left6- Home Go to A17- Ctrl+C Quit immediately3+ Arrows Move Shift+arrows Select4+ Ctrl+arrows Jump to the edge of the data (add Shift to select)5+ Tab / Shift+Tab Right / left PgUp / PgDn Screen up / down6+ Home / Ctrl+Home Column A / A1 Ctrl+End Last used cell7+ Mouse Click, drag or Shift+click to select; click headers8+ for whole columns or rows; double-click to edit89 9- F2 Edit the current cell&#39;s contents10- Del Erase the current cell11- F5 Move the cell pointer to an address12- F1 Show keys and functions13- / or &lt; Open the slash menu10+ Backspace / Del Clear the contents of the selected cells11+ Esc Collapse the selection to the active cell12+ Enter / F2 Edit the active cell&#39;s contents13+ Ctrl+G / F5 Move to a cell address14+ F10 Open the menu15+ Ctrl+O Open a sheet, replacing this one16+ Ctrl+Q Close one2317+ Ctrl+S Save the sheet18+ Ctrl+A Select the data, then the whole sheet19+ Ctrl+Space Select the whole columns of the selection20+ Shift+Space Select the whole rows of the selection1421 15- Entries16- Text Label (prefix &#39; left, &quot; right, ^ center)17- 0-9 + - . ( @ # $ Value or formula, e.g. +A1*2, @SUM(A1..A5)18- Arrow after + ( , POINT mode: arrow to a cell, . anchors a range22+ Typing replaces the cell. Start with = for a formula, &#39; to force text.23+ While typing a formula, arrows after an operator pick cells.1924 20- Functions: @SUM @AVG @COUNT @MIN @MAX @ABS @INT @SQRT @ROUND @MOD21- @IF @PI @TRUE @FALSE @ERR @NA22- Operators: + - * / ^ &amp; = &lt;&gt; &lt; &gt; &lt;= &gt;= #AND# #OR# #NOT#</div>\ No newline at end of file25+ Functions: ABS AND AVERAGE COUNT COUNTA FALSE IF IFERROR INT MAX MIN MOD NA NOT OR PI ROUND SQRT26+ SUM TRUE</pre>\ No newline at end of file
D e2e/testdata/screens/menu-quit-unsaved-light.html +0 -30
@@ -1,30 +0,0 @@
1-<div style="font-family: monospace; white-space: pre;">B7: @SUM(B3..B5) <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> MENU</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2-No <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;">Yes</div>3-WORKSHEET CHANGES NOT SAVED! End the session anyway?4-<div style="display: inline;background-color: var(--vt-palette-7);"> </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> C D E F G H I J </div>5-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 1 </div>Household budget 20266-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 2 </div>7-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 3 </div>Rent 14508-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 4 </div>Groceries 612.49-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 5 </div>Transit 9610-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 7 </div> Total<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 2158.4 </div>12-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 8 </div>13-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 9 </div>14-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 10 </div>15-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 11 </div>16-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 12 </div>17-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 13 </div>18-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 14 </div>19-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 15 </div>20-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 16 </div>21-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 17 </div>22-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 18 </div>23-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 19 </div>24-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 20 </div>25-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 21 </div>26-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 22 </div>27-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 23 </div>28-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 24 </div>29-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 25 </div>30-untitled [modified] <div style="display: inline;color: var(--vt-palette-0);">F1 Help / Menu</div></div>\ No newline at end of file
D e2e/testdata/screens/menu-quit-unsaved.html +0 -30
@@ -1,30 +0,0 @@
1-<div style="font-family: monospace; white-space: pre;">B7: @SUM(B3..B5) <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> MENU</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2-No <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;">Yes</div>3-WORKSHEET CHANGES NOT SAVED! End the session anyway?4-<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> C D E F G H I J </div>5-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 1 </div>Household budget 20266-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>Rent 14508-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>Groceries 612.49-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>Transit 9610-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 7 </div> Total<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 2158.4 </div>12-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30-untitled [modified] <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file
D e2e/testdata/screens/menu-top.html +0 -30
@@ -1,30 +0,0 @@
1-<div style="font-family: monospace; white-space: pre;">B7: @SUM(B3..B5) <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> MENU</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;">Worksheet</div> Range File Quit3-Column Erase4-<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> C D E F G H I J </div>5-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 1 </div>Household budget 20266-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>Rent 14508-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>Groceries 612.49-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>Transit 9610-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 7 </div> Total<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 2158.4 </div>12-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30-untitled [modified] <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file
A e2e/testdata/screens/menu.html +30 -0
@@ -0,0 +1,30 @@
1+<pre class="screen"><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> B7 </span> =SUM(B3:B5) <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>2+<span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">File</span> Edit Format3+New Open Save As Quit4+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> A </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> B </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> C D E F G H I </span>5+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 1 </span> Household budget 20266+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 2 </span>7+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 3 </span> Rent 14508+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 4 </span> Groceries 612.49+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 5 </span> Transit 9610+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 6 </span> Savings r<span style="color:var(--vt-palette-1)"> #DIV/0! </span>11+<span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> 7 </span> Total <span style="color:var(--vt-palette-0);background:var(--vt-palette-6)"> 2158.4 </span>12+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 8 </span>13+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 9 </span>14+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 10 </span>15+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 11 </span>16+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 12 </span>17+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 13 </span>18+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 14 </span>19+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 15 </span>20+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 16 </span>21+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 17 </span>22+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 18 </span>23+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 19 </span>24+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 20 </span>25+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 21 </span>26+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 22 </span>27+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 23 </span>28+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 24 </span>29+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 25 </span>30+untitled<span style="color:var(--vt-palette-8)"> modified</span> <span style="font-weight:bold">F1</span> <span style="color:var(--vt-palette-8)">help </span><span style="font-weight:bold">F10</span> <span style="color:var(--vt-palette-8)">menu </span><span style="font-weight:bold">Ctrl+Q</span> <span style="color:var(--vt-palette-8)">quit</span></pre>\ No newline at end of file
M e2e/testdata/screens/narrow.html +14 -14
@@ -1,16 +1,16 @@
1-<div style="font-family: monospace; white-space: pre;">B7: @SUM(B3..B5) <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> READY</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>1+<pre class="screen"><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> B7 </span> =SUM(B3:B5) <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 33 4-<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> C D E F</div><div style="display: inline;background-color: var(--vt-palette-8);"> </div>5-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 1 </div>Household budget 20266-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>Rent 14508-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>Groceries 612.49-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>Transit 9610-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 7 </div> Total<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 2158.4 </div>12-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16-untitled [modified] <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file4+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> A </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> B </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> C D E </span>5+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 1 </span> Household budget 20266+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 2 </span>7+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 3 </span> Rent 14508+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 4 </span> Groceries 612.49+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 5 </span> Transit 9610+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 6 </span> Savings r<span style="color:var(--vt-palette-1)"> #DIV/0! </span>11+<span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> 7 </span> Total <span style="color:var(--vt-palette-0);background:var(--vt-palette-6)"> 2158.4 </span>12+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 8 </span>13+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 9 </span>14+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 10 </span>15+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 11 </span>16+untitled<span style="color:var(--vt-palette-8)"> modified</span> <span style="font-weight:bold">F1</span> <span style="color:var(--vt-palette-8)">help </span><span style="font-weight:bold">F10</span> <span style="color:var(--vt-palette-8)">menu </span><span style="font-weight:bold">Ctrl+Q</span> <span style="color:var(--vt-palette-8)">quit</span></pre>\ No newline at end of file
M e2e/testdata/screens/point-range-light.html +30 -30
@@ -1,30 +1,30 @@
1-<div style="font-family: monospace; white-space: pre;">C7: <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> POINT</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2-@AVG(B3..B53-<div style="display: inline;color: var(--vt-palette-0);">Arrows move, . anchors a range, Esc unanchors, Enter accepts</div>4-<div style="display: inline;background-color: var(--vt-palette-7);"> </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> C D E F G H I J </div>5-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 1 </div>Household budget 20266-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 2 </div>7-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 3 </div>Rent <div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-4);"> 1450 </div>8-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 4 </div>Groceries<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-4);"> 612.4 </div>9-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 5 </div>Transit <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 96 </div>10-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 7 </div> Total 2158.412-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 8 </div>13-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 9 </div>14-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 10 </div>15-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 11 </div>16-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 12 </div>17-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 13 </div>18-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 14 </div>19-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 15 </div>20-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 16 </div>21-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 17 </div>22-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 18 </div>23-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 19 </div>24-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 20 </div>25-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 21 </div>26-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 22 </div>27-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 23 </div>28-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 24 </div>29-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 25 </div>30-untitled [modified] <div style="display: inline;color: var(--vt-palette-0);">F1 Help / Menu</div></div>\ No newline at end of file1+<pre class="screen"><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> C7 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> POINT</span><span style="background:var(--vt-palette-6)"> </span>2+=AVERAGE(<span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">B3:B5</span>3+<span style="font-weight:bold">Arrows</span> <span style="color:var(--vt-palette-0)">pick a cell </span><span style="font-weight:bold">Shift+arrows</span> <span style="color:var(--vt-palette-0)">pick a range </span><span style="font-weight:bold">Enter</span> <span style="color:var(--vt-palette-0)">accept </span><span style="font-weight:bold">Esc</span> <span style="color:var(--vt-palette-0)">back</span>4+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> A </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> B </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> C D E F G H I </span>5+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 1 </span> Household budget 20266+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 2 </span>7+<span style="color:var(--vt-palette-15);background:var(--vt-palette-4)"> 3 </span> Rent <span style="color:var(--vt-palette-15);background:var(--vt-palette-4)"> 1450 </span>8+<span style="color:var(--vt-palette-15);background:var(--vt-palette-4)"> 4 </span> Groceries<span style="color:var(--vt-palette-15);background:var(--vt-palette-4)"> 612.4 </span>9+<span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> 5 </span> Transit <span style="color:var(--vt-palette-0);background:var(--vt-palette-6)"> 96 </span>10+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 6 </span> Savings r<span style="color:var(--vt-palette-1)"> #DIV/0! </span>11+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 7 </span> Total 2158.412+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 8 </span>13+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 9 </span>14+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 10 </span>15+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 11 </span>16+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 12 </span>17+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 13 </span>18+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 14 </span>19+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 15 </span>20+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 16 </span>21+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 17 </span>22+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 18 </span>23+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 19 </span>24+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 20 </span>25+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 21 </span>26+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 22 </span>27+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 23 </span>28+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 24 </span>29+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 25 </span>30+untitled<span style="color:var(--vt-palette-0)"> modified</span> <span style="font-weight:bold">F1</span> <span style="color:var(--vt-palette-0)">help </span><span style="font-weight:bold">F10</span> <span style="color:var(--vt-palette-0)">menu </span><span style="font-weight:bold">Ctrl+Q</span> <span style="color:var(--vt-palette-0)">quit</span></pre>\ No newline at end of file
M e2e/testdata/screens/point-range.html +30 -30
@@ -1,30 +1,30 @@
1-<div style="font-family: monospace; white-space: pre;">C7: <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> POINT</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2-@AVG(B3..B53-<div style="display: inline;color: var(--vt-palette-8);">Arrows move, . anchors a range, Esc unanchors, Enter accepts</div>4-<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> C D E F G H I J </div>5-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 1 </div>Household budget 20266-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>Rent <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-4);"> 1450 </div>8-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>Groceries<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-4);"> 612.4 </div>9-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 5 </div>Transit <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 96 </div>10-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 7 </div> Total 2158.412-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30-untitled [modified] <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file1+<pre class="screen"><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> C7 </span> <span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> POINT</span><span style="background:var(--vt-palette-6)"> </span>2+=AVERAGE(<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">B3:B5</span>3+<span style="font-weight:bold">Arrows</span> <span style="color:var(--vt-palette-8)">pick a cell </span><span style="font-weight:bold">Shift+arrows</span> <span style="color:var(--vt-palette-8)">pick a range </span><span style="font-weight:bold">Enter</span> <span style="color:var(--vt-palette-8)">accept </span><span style="font-weight:bold">Esc</span> <span style="color:var(--vt-palette-8)">back</span>4+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> A </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> B </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> C D E F G H I </span>5+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 1 </span> Household budget 20266+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 2 </span>7+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 3 </span> Rent <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 1450 </span>8+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 4 </span> Groceries<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 612.4 </span>9+<span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> 5 </span> Transit <span style="color:var(--vt-palette-0);background:var(--vt-palette-6)"> 96 </span>10+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 6 </span> Savings r<span style="color:var(--vt-palette-1)"> #DIV/0! </span>11+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 7 </span> Total 2158.412+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 8 </span>13+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 9 </span>14+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 10 </span>15+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 11 </span>16+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 12 </span>17+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 13 </span>18+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 14 </span>19+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 15 </span>20+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 16 </span>21+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 17 </span>22+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 18 </span>23+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 19 </span>24+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 20 </span>25+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 21 </span>26+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 22 </span>27+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 23 </span>28+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 24 </span>29+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 25 </span>30+untitled<span style="color:var(--vt-palette-8)"> modified</span> <span style="font-weight:bold">F1</span> <span style="color:var(--vt-palette-8)">help </span><span style="font-weight:bold">F10</span> <span style="color:var(--vt-palette-8)">menu </span><span style="font-weight:bold">Ctrl+Q</span> <span style="color:var(--vt-palette-8)">quit</span></pre>\ No newline at end of file
M e2e/testdata/screens/prompt-width.html +30 -30
@@ -1,30 +1,30 @@
1-<div style="font-family: monospace; white-space: pre;">A1: [W12] &#39;Household budget 2026 <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> POINT</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2-Enter column width (1..240): 123-<div style="display: inline;color: var(--vt-palette-8);">Type a width or use the left and right arrows</div>4-<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> A </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> B C D E F G H I J </div>5-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 1 </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);">Household bu</div>dget 20266-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>Rent 14508-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>Groceries 612.49-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>Transit 9610-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>Savings rate<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 7 </div> Total 2158.412-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30-untitled [modified] <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file1+<pre class="screen"><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> A1 </span> Household budget 2026 <span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> WIDTH</span><span style="background:var(--vt-palette-6)"> </span>2+Column width (1-240): 133+<span style="font-weight:bold">Left/Right</span> <span style="color:var(--vt-palette-8)">adjust </span><span style="font-weight:bold">Enter</span> <span style="color:var(--vt-palette-8)">apply </span><span style="font-weight:bold">Esc</span> <span style="color:var(--vt-palette-8)">cancel</span>4+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> A </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> B C D E F G H I </span>5+<span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> 1 </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)"> Household bu</span>dget 20266+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 2 </span>7+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 3 </span> Rent 14508+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 4 </span> Groceries 612.49+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 5 </span> Transit 9610+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 6 </span> Savings rate<span style="color:var(--vt-palette-1)"> #DIV/0! </span>11+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 7 </span> Total 2158.412+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 8 </span>13+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 9 </span>14+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 10 </span>15+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 11 </span>16+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 12 </span>17+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 13 </span>18+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 14 </span>19+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 15 </span>20+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 16 </span>21+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 17 </span>22+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 18 </span>23+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 19 </span>24+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 20 </span>25+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 21 </span>26+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 22 </span>27+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 23 </span>28+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 24 </span>29+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 25 </span>30+untitled<span style="color:var(--vt-palette-8)"> modified</span> <span style="font-weight:bold">F1</span> <span style="color:var(--vt-palette-8)">help </span><span style="font-weight:bold">F10</span> <span style="color:var(--vt-palette-8)">menu </span><span style="font-weight:bold">Ctrl+Q</span> <span style="color:var(--vt-palette-8)">quit</span></pre>\ No newline at end of file
A e2e/testdata/screens/quit-confirm-light.html +30 -0
@@ -0,0 +1,30 @@
1+<pre class="screen"><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> B7 </span> =SUM(B3:B5) <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>2+Cancel <span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">Quit without saving</span>3+You have unsaved changes. Close one23 anyway?4+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> A </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> B </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> C D E F G H I </span>5+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 1 </span> Household budget 20266+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 2 </span>7+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 3 </span> Rent 14508+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 4 </span> Groceries 612.49+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 5 </span> Transit 9610+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 6 </span> Savings r<span style="color:var(--vt-palette-1)"> #DIV/0! </span>11+<span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> 7 </span> Total <span style="color:var(--vt-palette-0);background:var(--vt-palette-6)"> 2158.4 </span>12+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 8 </span>13+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 9 </span>14+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 10 </span>15+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 11 </span>16+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 12 </span>17+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 13 </span>18+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 14 </span>19+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 15 </span>20+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 16 </span>21+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 17 </span>22+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 18 </span>23+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 19 </span>24+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 20 </span>25+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 21 </span>26+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 22 </span>27+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 23 </span>28+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 24 </span>29+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 25 </span>30+untitled<span style="color:var(--vt-palette-0)"> modified</span> <span style="font-weight:bold">F1</span> <span style="color:var(--vt-palette-0)">help </span><span style="font-weight:bold">F10</span> <span style="color:var(--vt-palette-0)">menu </span><span style="font-weight:bold">Ctrl+Q</span> <span style="color:var(--vt-palette-0)">quit</span></pre>\ No newline at end of file
A e2e/testdata/screens/quit-confirm.html +30 -0
@@ -0,0 +1,30 @@
1+<pre class="screen"><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> B7 </span> =SUM(B3:B5) <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>2+Cancel <span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">Quit without saving</span>3+You have unsaved changes. Close one23 anyway?4+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> A </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> B </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> C D E F G H I </span>5+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 1 </span> Household budget 20266+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 2 </span>7+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 3 </span> Rent 14508+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 4 </span> Groceries 612.49+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 5 </span> Transit 9610+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 6 </span> Savings r<span style="color:var(--vt-palette-1)"> #DIV/0! </span>11+<span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> 7 </span> Total <span style="color:var(--vt-palette-0);background:var(--vt-palette-6)"> 2158.4 </span>12+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 8 </span>13+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 9 </span>14+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 10 </span>15+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 11 </span>16+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 12 </span>17+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 13 </span>18+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 14 </span>19+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 15 </span>20+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 16 </span>21+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 17 </span>22+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 18 </span>23+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 19 </span>24+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 20 </span>25+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 21 </span>26+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 22 </span>27+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 23 </span>28+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 24 </span>29+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 25 </span>30+untitled<span style="color:var(--vt-palette-8)"> modified</span> <span style="font-weight:bold">F1</span> <span style="color:var(--vt-palette-8)">help </span><span style="font-weight:bold">F10</span> <span style="color:var(--vt-palette-8)">menu </span><span style="font-weight:bold">Ctrl+Q</span> <span style="color:var(--vt-palette-8)">quit</span></pre>\ No newline at end of file
D e2e/testdata/screens/range-erase.html +0 -30
@@ -1,30 +0,0 @@
1-<div style="font-family: monospace; white-space: pre;">A3: &#39;Rent <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> POINT</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2-Enter range to erase: A3..B53-<div style="display: inline;color: var(--vt-palette-8);">Arrows move, . anchors a range, Esc unanchors, Enter accepts</div>4-<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> C D E F G H I J </div>5-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 1 </div>Household budget 20266-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-4);">Rent 1450 </div>8-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-4);">Groceries 612.4 </div>9-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 5 </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-4);">Transit </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 96 </div>10-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 7 </div> Total 2158.412-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30-untitled [modified] <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file
M e2e/testdata/screens/ready-empty.html +28 -28
@@ -1,30 +1,30 @@
1-<div style="font-family: monospace; white-space: pre;">A1: <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> READY</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>1+<pre class="screen"><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> A1 </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 33 4-<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> A </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> B C D E F G H I J </div>5-<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 1 </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> </div>6-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>8-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>9-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>10-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>11-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 7 </div>12-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29-<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30-untitled <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file4+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> A </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> B C D E F G H I </span>5+<span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> 1 </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)"> </span>6+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 2 </span>7+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 3 </span>8+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 4 </span>9+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 5 </span>10+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 6 </span>11+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 7 </span>12+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 8 </span>13+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 9 </span>14+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 10 </span>15+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 11 </span>16+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 12 </span>17+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 13 </span>18+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 14 </span>19+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 15 </span>20+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 16 </span>21+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 17 </span>22+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 18 </span>23+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 19 </span>24+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 20 </span>25+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 21 </span>26+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 22 </span>27+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 23 </span>28+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 24 </span>29+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 25 </span>30+untitled <span style="font-weight:bold">F1</span> <span style="color:var(--vt-palette-8)">help </span><span style="font-weight:bold">F10</span> <span style="color:var(--vt-palette-8)">menu </span><span style="font-weight:bold">Ctrl+Q</span> <span style="color:var(--vt-palette-8)">quit</span></pre>\ No newline at end of file
A e2e/testdata/screens/selection-stats-light.html +30 -0
@@ -0,0 +1,30 @@
1+<pre class="screen"><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> B3 </span> 1450 <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>2+3+4+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> A </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> B </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> C D E F G H I </span>5+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 1 </span> Household budget 20266+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 2 </span>7+<span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> 3 </span> Rent <span style="color:var(--vt-palette-0);background:var(--vt-palette-6)"> 1450 </span>8+<span style="color:var(--vt-palette-15);background:var(--vt-palette-4)"> 4 </span> Groceries<span style="color:var(--vt-palette-15);background:var(--vt-palette-4)"> 612.4 </span>9+<span style="color:var(--vt-palette-15);background:var(--vt-palette-4)"> 5 </span> Transit <span style="color:var(--vt-palette-15);background:var(--vt-palette-4)"> 96 </span>10+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 6 </span> Savings r<span style="color:var(--vt-palette-1)"> #DIV/0! </span>11+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 7 </span> Total 2158.412+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 8 </span>13+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 9 </span>14+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 10 </span>15+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 11 </span>16+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 12 </span>17+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 13 </span>18+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 14 </span>19+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 15 </span>20+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 16 </span>21+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 17 </span>22+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 18 </span>23+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 19 </span>24+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 20 </span>25+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 21 </span>26+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 22 </span>27+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 23 </span>28+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 24 </span>29+<span style="color:var(--vt-palette-0);background:var(--vt-palette-7)"> 25 </span>30+untitled<span style="color:var(--vt-palette-0)"> modified</span> <span style="font-weight:bold">B3:B5</span> <span style="color:var(--vt-palette-0)">Sum </span>2158.4 <span style="color:var(--vt-palette-0)">Avg </span>719.47 <span style="color:var(--vt-palette-0)">Count </span>3</pre>\ No newline at end of file
A e2e/testdata/screens/selection-stats.html +30 -0
@@ -0,0 +1,30 @@
1+<pre class="screen"><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> B3 </span> 1450 <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>2+3+4+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> A </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> B </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> C D E F G H I </span>5+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 1 </span> Household budget 20266+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 2 </span>7+<span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold"> 3 </span> Rent <span style="color:var(--vt-palette-0);background:var(--vt-palette-6)"> 1450 </span>8+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 4 </span> Groceries<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 612.4 </span>9+<span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 5 </span> Transit <span style="color:var(--vt-palette-0);background:var(--vt-palette-4)"> 96 </span>10+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 6 </span> Savings r<span style="color:var(--vt-palette-1)"> #DIV/0! </span>11+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 7 </span> Total 2158.412+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 8 </span>13+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 9 </span>14+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 10 </span>15+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 11 </span>16+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 12 </span>17+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 13 </span>18+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 14 </span>19+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 15 </span>20+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 16 </span>21+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 17 </span>22+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 18 </span>23+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 19 </span>24+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 20 </span>25+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 21 </span>26+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 22 </span>27+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 23 </span>28+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 24 </span>29+<span style="color:var(--vt-palette-15);background:var(--vt-palette-8)"> 25 </span>30+untitled<span style="color:var(--vt-palette-8)"> modified</span> <span style="font-weight:bold">B3:B5</span> <span style="color:var(--vt-palette-8)">Sum </span>2158.4 <span style="color:var(--vt-palette-8)">Avg </span>719.47 <span style="color:var(--vt-palette-8)">Count </span>3</pre>\ No newline at end of file