Skip to content

v0.1.1 — formula recalc on load, autosave banner fix, formula-bar parser

Choose a tag to compare

@schnsrw schnsrw released this 25 May 11:19
· 134 commits to main since this release

What's new in v0.1.1 — a tight patch on v0.1.0

Three user-facing bug fixes and a tested formula-bar feature shipped to the v0.1.x line.

🐛 Formula cells render on template load

Bug: Opening any template that ships formulas without cached <v> values (most hand-authored xlsx files) rendered the formula cells as blank in v0.1.0. Users had to click each cell + press Enter to materialise the value.

Fix: UniverSheet now triggers getFormula().executeCalculation() immediately after createUnit on first mount AND after every replaceWorkbook swap. A microtask-defer retry covers the brief window before the formula facade extension registers.

🐛 Autosave-restore banner was hidden behind the grid

Bug: The autosave-restore banner had no explicit grid-area in the .app layout. It fell into an implicit row past the sheet-tabs slot, which .app { overflow: hidden; height: 100dvh } clipped out of view. Users with unsaved work never saw the prompt to restore.

Fix: Added an auto-height banner row to the .app grid template (both the regular and --no-formula-bar variants). Mapped both .autosave-banner and .preview-banner to that area. The row collapses to 0 when no banner is rendered. Also auto-dismisses the home-template-gallery when an autosave record exists, so the user lands directly on the restore prompt.

✨ Excel-style typed input parses as numbers in the formula bar

The formula bar now parses Excel-style decorated input as numbers instead of storing them as text:

Typed Stored value
$2,000 · €1,500.50 · £99.99 · ¥10,000 · ₹50,000 · NT$1,234 · R$1,500 the bare number
15% · 12.5% · -3% divided-by-100 (matches Excel)
(500) · ($1,234.50) negative (accounting parentheses)
+500 · -$1,234 · $-1,234 signed
1,234,567 thousands grouping stripped
100 kr · 250 zł · 1,500 € suffix locales
=SUM(A1:A10) · '42 · Hello world unchanged (formula / forced-text / plain text)

97 unit tests pin the grammar. Only the formula-bar commit path uses the parser in v0.1.1 — the in-cell-grid editor's auto-coercion behind a guard is queued for v0.2.

🛠 Behind the scenes

  • E2E suite back to ~17 minutes. v0.1.0's home-template-gallery overlay was silently intercepting pointer events on ~50 e2e tests, blowing CI to 1 h+ runs. waitForUniver now dismisses the gallery (with a 250 ms grace window so autosave-driven dismiss + collab-URL suppression can fire first without racing).
  • Desktop toolbar visibility at phone aligned with the mobile-pass design (single-row scrollable strip, ≤48 px tall).
  • Sheet CI back to green end-to-end. Patch was held until the suite ran clean.

📦 Available now

docker run -p 3000:3000 schnsrw/casual-sheets:0.1
# also: schnsrw/casual-sheets:0.1.1

Pinning recommendations unchanged: :0.1 rolls forward on patches, :0.1.1 for an exact pin. Multi-arch (amd64 + arm64), OCI-labelled, SBOM + provenance attestations in the manifest.

What's not in v0.1.1

  • The in-cell-grid auto-coercion (auto-parse $2,000 as you type it directly in a cell, not just the formula bar). The InputParserDriver is shipped but unmounted — the global beforeCommandExecuted hook needs a targeted guard before it can intercept user-typed mutations without affecting formula-engine writebacks and programmatic seeds. Queued for v0.2.
  • Backend OIDC / SAML enforcement (schema persists in /admin config — v0.2 adds enforcement).
  • Horizontal scale-out (collab WebSocket sticky-session + cross-replica awareness).

Upgrade path

0.1.0 → 0.1.1 is a drop-in. No config migration. No on-disk format changes. Just bump your :0.1 tag or pull :0.1.1.

Full diff: v0.1.0...v0.1.1