From ba007a325a8c68453ae57e8ed2554bdd399bd56d Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 22 Oct 2026 09:09:37 +0000 Subject: [PATCH] =?UTF-8?q?Hustler-Pixelwelt=20T11:=20alte=20helle=20Oberf?= =?UTF-8?q?l=C3=A4che=20und=20Kanvas-Engine=20entfernt,=20workers.css=20ge?= =?UTF-8?q?k=C3=BCrzt,=20Zusicherungen=20in=20die=20neuen=20Tests=20=C3=BC?= =?UTF-8?q?bertragen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - gelöscht: components/workers/engine/* (10 Dateien), WorkersStage, WorkersBoard, WorkerCard, WorkerList, WorkersKpis, die neun Engine-Tests samt workersSmoke (211 Tests) und die Helfer engineVm.mjs und fakeCtx.mjs (nur die Engine-Tests brauchten sie) - workers.css (310 -> 60 Zeilen) behält nur Einstellungen-Dialog und Interessenten-Panel; @font-face für Pixelify Sans steht jetzt in hustler/schrift.css - workersComponents: kein innerHTML und kein Kanvas rekursiv unter components/workers/**, jeder Knopf mit type, Links nur aus geprüften Feldern (externe mit noopener), keine Anmeldung in den Bildschirmen, alte Dateien weg und nirgends mehr importiert - workersCss: jede wk-Klasse im Code hat eine Regel, keine Regel ohne Nutzer; workersFont: Pixelify Sans genau einmal in schrift.css - hustlerAssets: Pixelify Sans in schrift.css erlaubt; hustlerDialog: Link-Ziele nur aus safeLink, Knöpfe mit type; hustlerSeite: Laden/Fehler/bereit am selben Einhängepunkt Co-Authored-By: Claude Sonnet 5.5 --- src/components/workers/WorkerCard.jsx | 144 ----- src/components/workers/WorkerList.jsx | 62 -- src/components/workers/WorkersBoard.jsx | 190 ------ src/components/workers/WorkersKpis.jsx | 13 - src/components/workers/WorkersStage.jsx | 120 ---- src/components/workers/engine/building.js | 114 ---- src/components/workers/engine/camera.js | 79 --- src/components/workers/engine/director.js | 673 ---------------------- src/components/workers/engine/fx.js | 188 ------ src/components/workers/engine/layout.js | 134 ----- src/components/workers/engine/lift.js | 169 ------ src/components/workers/engine/props.js | 255 -------- src/components/workers/engine/rooms.js | 329 ----------- src/components/workers/engine/scene.js | 395 ------------- src/components/workers/engine/sprites.js | 329 ----------- src/styles/hustler/schrift.css | 13 +- src/styles/workers.css | 264 +-------- tests/unit/helpers/engineVm.mjs | 179 ------ tests/unit/helpers/fakeCtx.mjs | 51 -- tests/unit/hustlerAssets.test.mjs | 3 +- tests/unit/hustlerDialog.test.mjs | 13 + tests/unit/hustlerSeite.test.mjs | 25 +- tests/unit/workersCamera.test.mjs | 119 ---- tests/unit/workersComponents.test.mjs | 248 ++++---- tests/unit/workersCss.test.mjs | 136 ++--- tests/unit/workersDirector.test.mjs | 640 -------------------- tests/unit/workersFont.test.mjs | 32 +- tests/unit/workersFx.test.mjs | 162 ------ tests/unit/workersLayout.test.mjs | 120 ---- tests/unit/workersLift.test.mjs | 228 -------- tests/unit/workersProps.test.mjs | 82 --- tests/unit/workersRooms.test.mjs | 336 ----------- tests/unit/workersScene.test.mjs | 620 -------------------- tests/unit/workersSmoke.test.mjs | 118 ---- tests/unit/workersSprites.test.mjs | 189 ------ 35 files changed, 277 insertions(+), 6495 deletions(-) delete mode 100644 src/components/workers/WorkerCard.jsx delete mode 100644 src/components/workers/WorkerList.jsx delete mode 100644 src/components/workers/WorkersBoard.jsx delete mode 100644 src/components/workers/WorkersKpis.jsx delete mode 100644 src/components/workers/WorkersStage.jsx delete mode 100644 src/components/workers/engine/building.js delete mode 100644 src/components/workers/engine/camera.js delete mode 100644 src/components/workers/engine/director.js delete mode 100644 src/components/workers/engine/fx.js delete mode 100644 src/components/workers/engine/layout.js delete mode 100644 src/components/workers/engine/lift.js delete mode 100644 src/components/workers/engine/props.js delete mode 100644 src/components/workers/engine/rooms.js delete mode 100644 src/components/workers/engine/scene.js delete mode 100644 src/components/workers/engine/sprites.js delete mode 100644 tests/unit/helpers/engineVm.mjs delete mode 100644 tests/unit/helpers/fakeCtx.mjs delete mode 100644 tests/unit/workersCamera.test.mjs delete mode 100644 tests/unit/workersDirector.test.mjs delete mode 100644 tests/unit/workersFx.test.mjs delete mode 100644 tests/unit/workersLayout.test.mjs delete mode 100644 tests/unit/workersLift.test.mjs delete mode 100644 tests/unit/workersProps.test.mjs delete mode 100644 tests/unit/workersRooms.test.mjs delete mode 100644 tests/unit/workersScene.test.mjs delete mode 100644 tests/unit/workersSmoke.test.mjs delete mode 100644 tests/unit/workersSprites.test.mjs diff --git a/src/components/workers/WorkerCard.jsx b/src/components/workers/WorkerCard.jsx deleted file mode 100644 index ffb289a..0000000 --- a/src/components/workers/WorkerCard.jsx +++ /dev/null @@ -1,144 +0,0 @@ -import { useEffect, useRef } from 'react' -import { Link } from 'react-router-dom' -import Badge from '../ui/Badge' -import { counterLines, formatCount, formatUsd, safeLink, statusTone, tokenTotal, traceRows, workerStatusLabel } from '../../lib/workersView' -import { MODEL_IDS, hatForWorker, roleOf } from '../../lib/workersRoster' -import { drawWorker, setGrid } from './engine/sprites' - -const DASH = '–' - -// Modell-Chip je Hut (Wörterbuch statt zusammengesetzter Klasse: der CSS-Test in workers.css findet die Namen) -const CHIP = { - opus: 'wk-chip-opus', - sonnet: 'wk-chip-sonnet', - haiku: 'wk-chip-haiku', - overseer: 'wk-chip-overseer', -} - -const PORTRAIT_W = 72 -const PORTRAIT_H = 96 -// Beginnt die Karte tiefer als so viele Pixel über der Unterkante des Fensters, wird sie nach oben geholt -const MIN_VISIBLE = 120 - -const isRecord = (v) => v !== null && typeof v === 'object' && !Array.isArray(v) - -// Status aus dem Zustandseintrag; ein nicht angeschlossener Worker ist grau (wie in indexWorkers) -function statusOf(worker) { - if (!isRecord(worker)) return '' - return worker.connected === false ? 'grau' : worker.status -} - -// Porträt der Figur auf einem eigenen Canvas (Raster 4, Figur bei 6/8) -function Portrait({ hat, grey }) { - const ref = useRef(null) - useEffect(() => { - const canvas = ref.current - const ctx = canvas && canvas.getContext ? canvas.getContext('2d') : null - if (!ctx) return - ctx.clearRect(0, 0, PORTRAIT_W, PORTRAIT_H) - setGrid(ctx, { k: 4 }) - drawWorker(ctx, 6, 8, { hat, grey, scale: 1 }) - }, [hat, grey]) - return