From 8ff2bf86c85d9042e86e25f86cd28e7e3769d1d8 Mon Sep 17 00:00:00 2001 From: Christian Fehmer Date: Thu, 8 Jan 2026 11:21:42 +0100 Subject: [PATCH 01/43] refactor: example usage of solid/tsx (@fehmer) --- frontend/package.json | 2 + frontend/src/html/pages/test.html | 1 + frontend/src/ts/ready.ts | 3 + frontend/src/ts/test/live-counter.tsx | 12 ++ frontend/src/ts/test/live-states.ts | 11 ++ frontend/src/ts/test/test-timer.ts | 2 + frontend/tsconfig.json | 5 +- frontend/vite.config.ts | 2 + pnpm-lock.yaml | 208 +++++++++++++++++++++++--- 9 files changed, 227 insertions(+), 19 deletions(-) create mode 100644 frontend/src/ts/test/live-counter.tsx create mode 100644 frontend/src/ts/test/live-states.ts diff --git a/frontend/package.json b/frontend/package.json index 09d7b37315ab..7dce2304259b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -51,6 +51,7 @@ "modern-screenshot": "4.6.5", "object-hash": "3.0.0", "slim-select": "2.9.2", + "solid-js": "1.9.10", "stemmer": "2.0.1", "throttle-debounce": "5.0.2", "zod": "3.23.8", @@ -98,6 +99,7 @@ "vite-plugin-inspect": "11.3.3", "vite-plugin-minify": "2.1.0", "vite-plugin-pwa": "1.1.0", + "vite-plugin-solid": "2.11.10", "vitest": "4.0.15" }, "lint-staged": { diff --git a/frontend/src/html/pages/test.html b/frontend/src/html/pages/test.html index a2cf8e5a2538..f590ab5d3db9 100644 --- a/frontend/src/html/pages/test.html +++ b/frontend/src/html/pages/test.html @@ -175,6 +175,7 @@ +
+
+ Your speed style is: +
+
All-Time English Leaderboards
diff --git a/frontend/src/ts/pages/account.ts b/frontend/src/ts/pages/account.ts index f57c3ade6b85..b3076facbce7 100644 --- a/frontend/src/ts/pages/account.ts +++ b/frontend/src/ts/pages/account.ts @@ -36,7 +36,7 @@ import Ape from "../ape"; import { AccountChart } from "@monkeytype/schemas/configs"; import { SortedTableWithLimit } from "../utils/sorted-table"; import { qs, qsa, qsr, onWindowLoad, ElementWithUtils } from "../utils/dom"; - +import { mountAccountPage } from "../test/live-states"; let filterDebug = false; //toggle filterdebug export function toggleFilterDebug(): void { @@ -51,6 +51,8 @@ let visibleTableLines = 0; let testActivityEl: HTMLElement | null; let historyTable: SortedTableWithLimit>; +let accountDispose: () => void; + function loadMoreLines(lineIndex?: number): void { if (filteredResults === undefined || filteredResults.length === 0) return; let newVisibleLines; @@ -564,7 +566,7 @@ async function fillContent(): Promise { histogramChartData.push(0); } } - (histogramChartData[bucket] as number)++; + (histogramChartData[bucket] as number) += 1; let tt = 0; if ( @@ -1243,10 +1245,12 @@ export const page = new Page({ afterHide: async (): Promise => { reset(); Skeleton.remove("pageAccount"); + accountDispose?.(); }, beforeShow: async (): Promise => { Skeleton.append("pageAccount", "main"); const snapshot = DB.getSnapshot(); + accountDispose = mountAccountPage(); await ResultFilters.appendDropdowns(update); ResultFilters.updateActive(); await Misc.sleep(0); diff --git a/frontend/src/ts/test/live-states.tsx b/frontend/src/ts/test/live-states.tsx index 24b836bd442b..4290b1547d2c 100644 --- a/frontend/src/ts/test/live-states.tsx +++ b/frontend/src/ts/test/live-states.tsx @@ -15,3 +15,13 @@ export function mountLiveCounters(): void { qsr("#liveSpeedCounter").native, ); } + +export function mountAccountPage(): () => void { + const speedStyleDispose = render( + () => , + qsr("#accountSpeedStyle").native, + ); + return () => { + speedStyleDispose(); + }; +} From fa0611cba988b0c735f95e5ce5c6fe17f35a13dd Mon Sep 17 00:00:00 2001 From: Christian Fehmer Date: Thu, 8 Jan 2026 16:29:55 +0100 Subject: [PATCH 07/43] convert live stats --- .../test/live-counter.jsdom-spec.tsx | 8 +- frontend/src/html/pages/test.html | 12 +-- frontend/src/styles/test.scss | 2 +- frontend/src/ts/signals/config.ts | 14 ++- frontend/src/ts/signals/live-states.ts | 6 +- frontend/src/ts/test/focus.ts | 12 +-- frontend/src/ts/test/live-acc.ts | 89 ------------------ frontend/src/ts/test/live-burst.ts | 87 ------------------ frontend/src/ts/test/live-counter.tsx | 9 +- frontend/src/ts/test/live-speed.ts | 91 ------------------- frontend/src/ts/test/live-states.tsx | 63 +++++++++++-- frontend/src/ts/test/test-timer.ts | 2 - frontend/src/ts/test/test-ui.ts | 34 +++---- 13 files changed, 102 insertions(+), 327 deletions(-) delete mode 100644 frontend/src/ts/test/live-acc.ts delete mode 100644 frontend/src/ts/test/live-burst.ts delete mode 100644 frontend/src/ts/test/live-speed.ts diff --git a/frontend/__tests__/test/live-counter.jsdom-spec.tsx b/frontend/__tests__/test/live-counter.jsdom-spec.tsx index 77c95b9b4315..61e6f2ff2528 100644 --- a/frontend/__tests__/test/live-counter.jsdom-spec.tsx +++ b/frontend/__tests__/test/live-counter.jsdom-spec.tsx @@ -8,21 +8,21 @@ afterEach(() => cleanup()); describe("LiveCounter", () => { it("renders initial value", () => { - const [value] = createSignal(5); + const [value] = createSignal("5"); render(() => ); expect(screen.getByText("5")).toBeInTheDocument(); }); it("updates reactively when signal changes", () => { - const [value, setValue] = createSignal(1); + const [value, setValue] = createSignal("1"); render(() => ); expect(screen.getByText("1")).toBeInTheDocument(); - setValue(42); + setValue("42"); expect(screen.getByText("42")).toBeInTheDocument(); - setValue(99); + setValue("99"); expect(screen.getByText("99")).toBeInTheDocument(); }); }); diff --git a/frontend/src/html/pages/test.html b/frontend/src/html/pages/test.html index f590ab5d3db9..4da84f0bec3b 100644 --- a/frontend/src/html/pages/test.html +++ b/frontend/src/html/pages/test.html @@ -131,9 +131,6 @@
- - -