Rename project from numbers-study to numolus
- package.json / package-lock.json: package name "numolus" - README: new title, drop the "Case- und Designstudie" framing, update test count (331 -> 528) - localStorage keys renamed to numolus:doc:v2 / numolus:theme; the old numbers-study:* keys are still read as a fallback so existing documents and theme choices survive the rename Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
# Numbers-Studie — Tabellenkalkulation mit eigener Formel-Engine
|
||||
# numolus — Tabellenkalkulation mit eigener Formel-Engine
|
||||
|
||||
Eine browserbasierte Tabellenkalkulation als **Case- und Designstudie** nach dem
|
||||
Vorbild von **Apple Numbers**. Zwei Dinge stehen im Mittelpunkt:
|
||||
Eine browserbasierte Tabellenkalkulation nach dem Vorbild von **Apple Numbers**. Zwei Dinge stehen im Mittelpunkt:
|
||||
|
||||
1. **Handwerk** — eine von Grund auf selbst geschriebene, schlanke Formel-Engine
|
||||
(Tokenizer, Parser, AST, Abhängigkeitsgraph, Neuberechnung, Zirkelbezug-
|
||||
@@ -13,7 +12,7 @@ Vorbild von **Apple Numbers**. Zwei Dinge stehen im Mittelpunkt:
|
||||
```bash
|
||||
npm install
|
||||
npm run dev # Vite-Devserver
|
||||
npm run test # Vitest-Suite (Engine + Store + IO), 331 Tests
|
||||
npm run test # Vitest-Suite (Engine + Store + IO), 528 Tests
|
||||
npm run build # Typecheck + Produktionsbuild
|
||||
npm run lint # ESLint (flat config)
|
||||
```
|
||||
@@ -961,7 +960,7 @@ gefunden wurde, ein Fehler darin schlägt bei einem Treffer also nie durch.
|
||||
Platzhalter-Modus (`2`) ist nicht unterstützt. `Suchmodus`: `1` (Standard)
|
||||
erster Treffer zuerst, `-1` letzter Treffer zuerst; Excels binäre
|
||||
Suchmodi (`2`/`-2`, setzen einen sortierten Bereich voraus) sind nicht
|
||||
unterstützt — bei den Tabellengrößen dieser Studie ohne Vorteil. Beispiel:
|
||||
unterstützt — bei den Tabellengrößen von numolus ohne Vorteil. Beispiel:
|
||||
`=XLOOKUP(B7; A2:A6; C2:C6; "unbekannt")`.
|
||||
|
||||
**Fehlermodell** (propagiert an abhängige Zellen):
|
||||
@@ -1075,13 +1074,13 @@ Grundrechenarten: `Übersicht!B2 = =SUM(Umsatz!B2:E2)`, `D2 = =B2-C2`,
|
||||
|
||||
> **Hinweis zur Aufgabenstellung:** Die Akzeptanzliste nennt „Übersicht!B2 =
|
||||
> 6070". Die explizit angegebene Nord-Zeile ergibt jedoch
|
||||
> `1200+1450+1600+1720 = 5970`. Die Studie hält sich an die explizite Tabelle;
|
||||
> `1200+1450+1600+1720 = 5970`. numolus hält sich an die explizite Tabelle;
|
||||
> das demonstrierte Verhalten (Sofort-Propagierung durch Übersicht, „Gesamt" und
|
||||
> das Diagramm bei Änderung von `Umsatz!B2`) ist davon unberührt.
|
||||
|
||||
## Tests
|
||||
|
||||
`npm run test` — Vitest, 331 Tests:
|
||||
`npm run test` — Vitest, 528 Tests:
|
||||
|
||||
- **lexer / parser** — Präzedenz & Assoziativität (`^` vor `*/` vor `+-`, `^`
|
||||
rechts, `-2^2 = -(2^2)`), lokale/qualifizierte/quoted Bezüge, `!` **und** `::`,
|
||||
|
||||
Generated
+2
-2
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "numbers-study",
|
||||
"name": "numolus",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "numbers-study",
|
||||
"name": "numolus",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"chart.js": "^4.4.6",
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "numbers-study",
|
||||
"name": "numolus",
|
||||
"private": true,
|
||||
"version": "1.0.0",
|
||||
"type": "module",
|
||||
|
||||
@@ -2,8 +2,12 @@ import { ref, watchEffect } from 'vue';
|
||||
|
||||
type Mode = 'system' | 'light' | 'dark';
|
||||
|
||||
const KEY = 'numbers-study:theme';
|
||||
const stored = (localStorage.getItem(KEY) as Mode | null) ?? 'system';
|
||||
const KEY = 'numolus:theme';
|
||||
/** Key used before the rename to numolus -- still read as a fallback. */
|
||||
const LEGACY_KEY = 'numbers-study:theme';
|
||||
const stored =
|
||||
((localStorage.getItem(KEY) ?? localStorage.getItem(LEGACY_KEY)) as Mode | null) ??
|
||||
'system';
|
||||
const mode = ref<Mode>(stored);
|
||||
|
||||
watchEffect(() => {
|
||||
|
||||
@@ -80,7 +80,9 @@ import { defaultTableView, DEFAULT_ROW_H, MIN_GRID_SIZE, MAX_GRID_SIZE } from '.
|
||||
import { createSeedDocument } from '../data/seed';
|
||||
import { validateDocument } from '../io/json';
|
||||
|
||||
const STORAGE_KEY = 'numbers-study:doc:v2';
|
||||
const STORAGE_KEY = 'numolus:doc:v2';
|
||||
/** Key used before the rename to numolus -- still read as a fallback. */
|
||||
const LEGACY_STORAGE_KEY = 'numbers-study:doc:v2';
|
||||
|
||||
const CASCADE = 28; // px offset for successive inserted objects
|
||||
|
||||
@@ -523,7 +525,8 @@ function rewriteRefsForRename(
|
||||
|
||||
function loadInitial(): DocumentState {
|
||||
try {
|
||||
const raw = localStorage.getItem(STORAGE_KEY);
|
||||
const raw =
|
||||
localStorage.getItem(STORAGE_KEY) ?? localStorage.getItem(LEGACY_STORAGE_KEY);
|
||||
if (raw) {
|
||||
// validateDocument migrates v1, validates + *normalises* v2 (fills in
|
||||
// `view` and other defaults for documents saved by an older build).
|
||||
|
||||
Reference in New Issue
Block a user