remove Numi brand mentions from code and lockfile

This commit is contained in:
Horizontal42 2026-06-18 21:51:31 +03:00
parent c6e664cbe6
commit ec09c93770
10 changed files with 15 additions and 16 deletions

2
.gitignore vendored
View file

@ -4,7 +4,7 @@ src-tauri/target/
src-tauri/gen/
*.log
# local reference copy of the original macOS Numi bundle — not ours to ship
# local reference copy of a third-party macOS bundle — not ours to ship
Contents/
# one-off debugging artifacts

4
package-lock.json generated
View file

@ -1,11 +1,11 @@
{
"name": "numi-windows",
"name": "summarum",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "numi-windows",
"name": "summarum",
"version": "1.0.0",
"dependencies": {
"@codemirror/autocomplete": "^6.18.0",

View file

@ -1,7 +1,6 @@
// Summarum extension example.
// Drop .js files into this folder and restart the app.
// The API is compatible with Numi extensions: numi.setVariable,
// numi.addUnit, numi.addFunction.
// API: numi.setVariable, numi.addUnit, numi.addFunction.
// A global variable usable on any sheet, e.g. `salary * vat`
// numi.setVariable("vat", { "double": 20 });

View file

@ -81,7 +81,7 @@ describe("edge cases", () => {
});
});
describe("extra units (beyond original Numi)", () => {
describe("extra units", () => {
it("speed", () => {
expect(calc("100 km/h in mph")).toBe("62.14 mph");
expect(calc("60 mph in km/h")).toBe("96.56 km/h");

View file

@ -49,7 +49,7 @@ describe("arithmetic", () => {
it("scales", () => {
expect(calc("1.5 million")).toBe("1,500,000");
expect(calc("5k")).toBe("5,000");
expect(calc("2 dozen")).toBe("2"); // dozen is not in Numi vocab — noise
expect(calc("2 dozen")).toBe("2"); // dozen is not in the vocab — noise
});
it("free text around math is ignored", () => {
expect(calc("I spent 20 on pizza plus 5 on coffee")).toBe("25");

View file

@ -419,7 +419,7 @@ function evalAgg(name: "sum" | "avg" | "prev", ctx: EvalCtx): Value {
acc = numericAdd(acc, item, 1);
counted++;
} catch {
// skip lines with incompatible dimensions, as Numi does
// skip lines with incompatible dimensions
}
}
if (name === "avg") return qty(acc.value.div(counted), acc.unit);

View file

@ -175,7 +175,7 @@ export function buildRegistry(): Registry {
reg.addPhrase("mod", { t: "op", op: "mod" }, { caseSensitive: false });
reg.addPhrase("modulo", { t: "op", op: "mod" }, { caseSensitive: false });
// bitwise: "and" stays an addition word (original Numi), so & | xor shl shr
// bitwise: "and" stays an addition word, so & | xor shl shr
reg.addPhrase("xor", { t: "bitop", op: "bxor" }, { caseSensitive: false });
reg.addPhrase("or", { t: "bitop", op: "bor" }, { caseSensitive: false });
reg.addPhrase("shl", { t: "bitop", op: "shl" }, { caseSensitive: false });

View file

@ -1,4 +1,4 @@
// JS extensions runtime (Numi-compatible API): numi.setVariable,
// JS extensions runtime: numi.setVariable,
// numi.addUnit, numi.addFunction. Scripts share the engine's JS runtime.
import { SumEngine, ExtensionUnitSpec, ExtensionValue } from "./engine";

View file

@ -433,9 +433,9 @@ function toast(msg: string): void {
async function boot(): Promise<void> {
settings = await loadSettings();
if (!localStorage.getItem("numi.langInit") && settings.language === "en") {
if (!localStorage.getItem("summarum.langInit") && settings.language === "en") {
settings.language = detectLang();
localStorage.setItem("numi.langInit", "1");
localStorage.setItem("summarum.langInit", "1");
}
engine = new SumEngine({ precision: settings.precision, groupSeparator: settings.groupSeparator });

View file

@ -66,7 +66,7 @@ export async function loadSettings(): Promise<SettingsData> {
try {
const raw = isTauri()
? await invoke<string | null>("load_file", { name: "settings.json" })
: localStorage.getItem("numi.settings");
: localStorage.getItem("summarum.settings");
if (raw) return { ...defaultSettingsData, ...JSON.parse(raw) };
} catch (e) {
console.warn("loadSettings failed", e);
@ -77,7 +77,7 @@ export async function loadSettings(): Promise<SettingsData> {
export async function saveSettings(s: SettingsData): Promise<void> {
const raw = JSON.stringify(s, null, 2);
if (isTauri()) await invoke("save_file", { name: "settings.json", contents: raw });
else localStorage.setItem("numi.settings", raw);
else localStorage.setItem("summarum.settings", raw);
}
// ---------- documents
@ -86,7 +86,7 @@ export async function loadAppData(dataDir: string): Promise<AppData | null> {
try {
const raw = isTauri()
? await invoke<string | null>("load_documents", { dir: dirArg(dataDir) })
: localStorage.getItem("numi.documents");
: localStorage.getItem("summarum.documents");
if (raw) return JSON.parse(raw);
} catch (e) {
console.warn("loadAppData failed", e);
@ -120,7 +120,7 @@ export async function flushAppData(): Promise<void> {
pendingData = null;
try {
if (isTauri()) await invoke("save_documents", { dir: dirArg(currentDataDir), contents: raw });
else localStorage.setItem("numi.documents", raw);
else localStorage.setItem("summarum.documents", raw);
} catch (e) {
console.warn("saveAppData failed", e);
}