Der #legendBtn (nur auf kleinem Bildschirm sichtbar) trug ein Menue-/
Listen-Icon; die Legende ist aber eine Hilfe-/Referenzseite. Jetzt ein
Hilfe-Icon (Kreis mit Fragezeichen). Nur der Button-Inhalt geaendert,
Normalgroesse nicht betroffen (Button dort verborgen).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Auf body.mobile zeigt der horizontal/kompakt/vertikal-Waehler nur noch das
aktive Icon (label:has(input:checked)); Tippen schaltet reihum zum naechsten
Modus (horizontal -> kompakt -> vertikal -> …). Spart zwei Drittel Breite.
Verifiziert (headless): mobil ein Icon sichtbar (~40px), 3x Tippen zyklt
horizontal/kompakt/vertikal/horizontal; Desktop unveraendert (3 Icons,
~118px, Direktauswahl ohne Zyklus), keine Konsolenfehler.
SPEC §9 (Kleiner Bildschirm) ergaenzt. Normalgroesse nicht betroffen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Der Gutter wurde auf Mobil faelschlich ganz ausgeblendet. Jetzt bleibt er
sichtbar und ziehbar (die 820-px-Regel liefert das gestapelte Layout inkl.
Gutter); nur die Min/Normal/Max-Buttons bleiben verborgen. Default weiterhin
ein Bereich gross, Umschalten per Titelzeilen-Tap unveraendert, zusaetzlich
Teilen per Ziehen moeglich.
Verifiziert (headless, 375px): Gutter sichtbar, Ziehen erzeugt Custom-Split
(--drow gesetzt, beide Bereiche sichtbar); Default-Einzelansicht und
winbtns-verborgen unveraendert. Normalgroesse nicht betroffen.
SPEC §9 und DECISIONS D17 an "Splitter bleibt" angepasst.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Der Default-Beispieltext (INITIAL) ist jetzt englisch (passend zur
englischen Haupt-README). Statt "Cloud" nun "Cooperative Community Cloud"
mit Link https://hostsharing.net (nackte URL -> klickbarer Knoten mit ↗).
README-Screenshot neu erzeugt (englische UI + Inhalt).
SPEC §10 (kanonisches Fixture) bleibt bewusst deutsch: normatives
Beispiel der deutschsprachigen Doku, unabhaengig vom Live-Demo-Text.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Auf kleinem Bildschirm (body.mobile per matchMedia, <=640px):
- Immer nur ein Bereich gross (Diagramm ODER Editor); der andere schrumpft
auf seine Titelzeile und dient als Umschalter (Antippen holt ihn nach
vorn). Splitter und Min/Normal/Max-Buttons entfallen.
- Legende von der Bereichs-Umschaltung entkoppelt: eigener Umschalter
(#legendBtn) im Editor-Kopf statt der dauerhaften "AGENDA"-Zeile, damit
sie zugeklappt keinen Platz kostet (neuer i18n-Key legendTooltip, 9 Spr.).
- Sprachwahl schlank: nur EN + aktive Sprache + "…" (klappt alle auf); die
aktive Sprache wird auch als "extra" eingeblendet, Auto-Aufklappen entfaellt.
- Default Vollbild auf Mobil (nur ohne gespeicherte Nutzerwahl).
Verifiziert (headless, 375px): body.mobile gesetzt, Diagramm-Default +
Editor als Titelzeile, Umschalten per Tap, Legenden-Toggle, Sprachleiste
DE+EN+…/Aufklappen zeigt alle 9/aktives Extra bleibt sichtbar, Vollbild an,
keine Konsolenfehler; Desktop unveraendert (beide Panels, 4 Sprachen,
Legendenbutton verborgen). i18n konsistent (47 Keys x 9).
SPEC §9 (Kleiner Bildschirm) + DECISIONS D17 + frontend/CLAUDE.md ergaenzt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
In den transponierten Modi ueberlappte das Groessen-Badge (oben rechts)
eines Knotens oft mit den Namens-Tags (unten rechts) des Knotens darueber
(gemessen: nur 10 px Luecke, 6 px Ueberlappung). Jetzt +20 px Abstand
nach unten fuer gestapelte Blaetter/any-of/kompakt (Luecke 25 px, ~9 px
Freiraum); der obere 23-px-Abzweig bleibt unveraendert. Vertikal
zentrierte all-of-Zwischenknoten bekommen den Abstand symmetrisch (16 px),
damit ihr 50%-Abzweig auf der Knotenmitte bleibt.
Verifiziert (headless): keine Ueberlappung mehr; alle Abzweige treffen die
Knotenmitte (|delta| <= 1 px) in vertikal und kompakt. Horizontal
unveraendert. SPEC §9 (Geometrie-Invarianten) ergaenzt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
"Vibe-Coded with Claude Code Fable 5 and Opus 4.8" wird zu
"Vibe-Coded with Claude Code"; "Fable 5 and Opus 4.8" steckt als
title-Tooltip im span.vibe (gepunktete Unterstreichung, cursor:help).
Spart Platz auf allen Bildschirmen. Keine SPEC-Aenderung.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Micro-Version jetzt commit-basiert statt aus github.run_number:
- Major.Minor in neuer Datei VERSION (per Bump-Commit gepflegt).
- Micro = Commits seit dem letzten VERSION-Bump
(git rev-list --count <VERSION-Commit>..HEAD) -> beginnt nach einem
Bump wieder bei 0 (SemVer-artig, z. B. 1.0.0, 1.0.1, dann 1.1.0).
- checkout mit fetch-depth: 0 (flacher Klon zaehlte sonst nur 1 Commit).
- sed ersetzt jetzt ">Werkbaum <ziffern></a>" (regex), damit auch nach
einem Major/Minor-Bump im Quelltext getroffen wird; viewport-/xml-1.0
bleiben unberuehrt.
Vorteil ggue. Run-Nummer: vollstaendig aus dem Repo reproduzierbar,
zaehlt keine fehlgeschlagenen/manuellen Laeufe, kein Rueckschreiben.
Doku: README (EN+DE) Deployment-Abschnitt und DECISIONS D16 aktualisiert.
Keine SPEC-Aenderung (Notation unberuehrt).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Beim Site-Build ersetzt der Workflow ">Werkbaum 1.0</a>" durch
">Werkbaum 1.0.${{ github.run_number }}</a>" (per sed, nur auf der
Site-Kopie). Die Micro-Version steigt so bei jedem Deployment monoton
um 1 — ohne Commit/Tag zurueck ins Repo und ohne selbstausloesenden
Deploy-Zyklus. run_number via env BUILD_VERSION injiziert. "1.0" bleibt
die manuell gepflegte Basis und die Version beim lokalen Oeffnen; die
viewport-/xml-"1.0" bleiben unberuehrt (Anker >...</a> als Ziel).
Doku: README (EN+DE) Deployment-Abschnitt und DECISIONS D16 ergaenzt.
Keine SPEC-Aenderung (Notation unberuehrt).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Ohne Backend bleiben Einstellungen und Text ueber ein Neuladen erhalten
(localStorage). Gespeichert: Editortext (werkbaum-src) und GUI-Zustand
(werkbaum-ui: Modus, verworfene, Split-Zustand inkl. freier Drag-Groesse
--col/--drow, Zoom, Vollbild); Sprache bleibt in werkbaum-lang.
saveUI()/saveSrc() haengen an allen Zustandsaenderungen (Layout, Toggle,
Fenster-Buttons, Splitter-Drag, Zoom, Vollbild, Texteingabe);
restoreState() stellt beim Laden alles wieder her und unterdrueckt
waehrenddessen ueber restoring=true das Zurueckschreiben. Fehlender Text
faellt auf das Beispiel (INITIAL) zurueck, ein leerer bleibt leer.
Verifiziert (headless): Text, Modus, verworfene, Zoom, Vollbild,
Custom-Split (--col) und Minimier-Zustand ueberstehen ein Reload;
keine Konsolenfehler. Keine SPEC-Aenderung (Notation unberuehrt);
localStorage-Schluessel in frontend/CLAUDE.md dokumentiert.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Link auf https://michael.hoennig.de/imprint.html am Ende des Footers.
Neuer i18n-Key "imprint": deutsch nur "Impressum", in allen anderen
Sprachen die uebersetzte Bezeichnung mit "(Impressum)" in Klammern
dahinter (z. B. EN "Imprint (Impressum)", FR "Mentions legales
(Impressum)"). Keine SPEC-Aenderung (Notation unberuehrt).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Auf Wunsch ist die englische Fassung jetzt die Haupt-README.md; die
deutsche Fassung liegt als README.de.md. Sprachlinks oben in beiden
Dateien angepasst. Der Hinweis in README.md stellt klar, dass die
ausfuehrliche Doku unter docs/ weiterhin auf Deutsch gepflegt wird.
Screenshot der laufenden App (docs/screenshot.png, headless Chrome gegen
den lokalen Dev-Server) im Abschnitt Usage/Nutzung eingebunden.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Deutsch bleibt Quellsprache (CLAUDE: "Doku auf Deutsch"), daher die
Uebersetzung als separate README.en.md statt README.md zu ersetzen.
Wechselseitige Sprachlinks oben in beiden Dateien; Hinweis in der
englischen Fassung, dass sie eine Convenience-Uebersetzung ist und der
deutschen Vorlage hinterherhaengen kann.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Offizieller Actions-Weg (upload-pages-artifact + deploy-pages) mit
permissions pages/id-token und concurrency-Gruppe "pages"; Trigger:
Push auf main + workflow_dispatch. Vitest-Step als Platzhalter
auskommentiert (Tests folgen, TASKS.md Phase 1).
Site-Aufbau: frontend/index.html an die Wurzel-URL, dazu docs/brand/
(Favicon) und LICENSE (MIT-Link im Footer). Die ../-Pfade der Quelle
zeigten von der Wurzel aus über die Site hinaus; statt den Editor zu
aendern, zieht der Workflow sie nur auf der Site-Kopie per sed gerade
(Editor-Quelle bleibt unveraendert, lokal weiter nutzbar). backend/
und uebrige docs/ werden nicht veroeffentlicht.
Doku: README-Abschnitt "Deployment" (inkl. einmaliger Settings-
Umstellung auf Source "GitHub Actions", Repo muss oeffentlich sein),
TASKS.md-Rubrik "Deployment" abgehakt, DECISIONS D16. Hinweis: der
Auftrag nannte "D15", das war aber schon fuer den kompakten Modus
vergeben -> als D16 angelegt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
LibreOffice liest weder das Browser-Bild-Clipboard noch das SVG zuverlässig.
Neben dem SVG-Download gibt es daher jetzt einen zweiten Button, der das
Diagramm als PNG-Datei (werkbaum-diagramm.png, Raster) speichert — überall
per "Bild einfügen" importierbar. Beide Download-Buttons tragen ein
Format-Label (SVG/PNG). Tooltip in allen neun Sprachen; SPEC §9 ergänzt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
LibreOffice Writer erkennt das Browser-Bild-Clipboard nicht zuverlässig
(sein HTML-Filter ignoriert data-URI-Bilder, und die Async-Clipboard-API
erlaubt kein SVG als Bildtyp). Neue Download-Schaltfläche im Diagramm-Kopf
speichert das Diagramm als eigenständige SVG-Datei (Vektor), die per
Einfügen → Bild überall zuverlässig importierbar ist. Der bisherige
PNG-Clipboard-Button bleibt für Apps, die ihn lesen. Tooltip in allen neun
Sprachen; SPEC §9 ergänzt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Zwei weitere aufklappbare Sprachen hinter dem "…"-Umschalter mit
vollständigen UI-Übersetzungen (inkl. Diagramm-Tooltips). Reihenfolge:
de en es fr pl ru hi zh ja …. LANG_EXTRA und CLAUDE.md-Konvention ergänzt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Statt bündig am Fensterrand bleibt im Vollbild links/rechts ein 7-px-Rand
(halber Panel-Zwischenraum von 14 px), damit die Panels nicht gedrängt
wirken.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Das Diagramm wird bewusst als PNG kopiert. Zusätzlich zum image/png-Flavor
wird eine text/html-Variante mit eingebettetem PNG geschrieben, die
Office-Programme wie LibreOffice Writer bevorzugt einbetten — damit ist das
Bild dort einfügbar. Der Tooltip nennt jetzt das Format ("PNG-Bild in die
Zwischenablage"). SPEC §9 entsprechend ergänzt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Der Diagramm-Kopieren-Button liefert nun ein grafisches Format statt Text:
Das gerenderte Diagramm wird aus der Live-Geometrie in ein eigenständiges
SVG (nur Formen + Text, keine externen Ressourcen) nachgezeichnet und als
PNG in die Zwischenablage gelegt. Knotenfarben, Größen-Badges, Tags und der
Geister-Knoten werden übernommen; Verbindungslinien je Gate neu gezogen
(und = durchgezogen Tinte, oder = gestrichelt Grau) und treffen so in allen
Modi die Knoten. Fallback: SVG-Quelltext, wenn kein Bild-Clipboard verfügbar.
Der bisherige ASCII-Text-Export (treeToText, CODE_BY_KEY) entfällt.
Tooltip-Texte auf "als Bild" aktualisiert, SPEC §9 entsprechend ersetzt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Erklärt in allen sieben Sprachen die Regel aus SPEC §5: ab T-Shirt-Größe M
sollte ein Element weiter untergliedert werden.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Erklärt in allen sieben Sprachen, dass der Schalter verworfene Knoten
samt Teilbaum ein-/ausblendet.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Neuer Icon-Toggle in der Kopfzeile (links vom Sprachumschalter). Aktiv
entfernt er linken/rechten Rand und die 1200px-Maximalbreite von Kopf,
Panel-Bereich und Fußzeile, sodass die Panels die ganze Fensterbreite
nutzen. Tooltip in allen sieben Sprachen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Der Markentitel erklärt per Tooltip die Wortbedeutung („Werk-Baum" — der
WBS-/Projektstrukturbaum) in allen sieben UI-Sprachen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
In der zentrierten vertikalen Darstellung sind all-of-Zwischenknoten selbst
vertikal mittig zu ihrem Teilbaum. Der Abzweig war jedoch fest auf 23 px
verankert und lief daher bei diesen Knoten ins Leere. Abzweig und die Enden
der Sammelleiste zielen für all-of-Kinder nun auf 50 % (Knotenmitte);
Blatt- und Any-of-Kinder bleiben bei 23 px. Verifiziert: alle Abzweige
treffen ihren Knoten.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Die aufklappbaren Sprachen (PL/RU/HI) erscheinen nun vor dem "…"-Button,
sodass dieser am rechten, gerundeten Ende der Sprachleiste bleibt und
das Auf-/Zuklappen dort stattfindet.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Der Sprachumschalter zeigt DE/EN/ES/FR direkt; ein "…"-Button klappt
Polnisch, Russisch und Hindi auf. Ist eine dieser Sprachen aktiv (auch
per gemerkter Auswahl), öffnet sich der Bereich automatisch. Vollständige
Übersetzungen aller UI-Texte inkl. Diagramm-Tooltips für PL/RU/HI.
Wurzel-CLAUDE.md-Konvention entsprechend ergänzt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Neue Icon-Schaltfläche im Diagramm-Kopf exportiert die sichtbare Struktur
als einfachen, überall einsetzbaren ASCII-Baum: ├─/└─ für all-of,
├◇/└◇ für any-of-Alternativen, je Knoten [Status] Label (Größe) @tags.
Respektiert den verworfene-Filter. Clipboard-Logik in writeClipboard/
flashCopied ausgelagert und von beiden Kopieren-Buttons genutzt.
SPEC §9 um den Textexport ergänzt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Die Textschaltfläche "kopieren" im Text-Panel wird ein Klemmbrett-Icon mit
übersetztem Tooltip/aria-Label. Bei Erfolg wechselt es kurz auf ein
Häkchen-Icon in Petrol. Icon bleibt beim Sprachwechsel erhalten.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Die Fenster-Buttons stoppen die Ereignis-Weitergabe, damit ein Klick auf
Minimieren/Normal/Maximieren nicht an den Titelzeilen-Restore-Handler des
Panel-Kopfs durchgereicht und dort wieder aufgehoben wird. Das Text-Panel
klappt so verlässlich auf seine Titelzeile zusammen (42 px) und stellt sich
per Klick auf die Titelzeile wieder her.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Copyright verweist auf michael.hoennig.de, dahinter ein Vibe-Coded-
Hinweis (Claude Code Fable 5 und Opus 4.8) samt Link auf die MIT-Lizenz.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Der vertikale Modus zeigt all-of jetzt als exakt transponierten
Organigramm-Fächer: der Überknoten sitzt vertikal mittig zu seiner
Kindergruppe, die Verbindung tritt rechts auf halber Höhe aus und
verteilt über eine Sammelleiste (erste bis letzte Kindmitte) auf die
Kinder. Horizontal und kompakt bleiben unverändert. SPEC §9 angepasst.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sprachumschalter oben rechts neben dem Titel. Alle UI-Texte, Tooltips,
die Legende und die dynamischen Diagramm-Texte (Status-Tooltips,
Geister-Knoten, Warnungen, Leer-Hinweis) laufen über ein I18N-Objekt mit
t()/applyLang(); Auswahl wird in localStorage gemerkt, html-lang gesetzt.
Deutsch ist Quell- und Default-Sprache. Der Beispiel-Notationstext bleibt
unverändert (Nutzerdaten). CLAUDE.md-Konvention entsprechend angepasst.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Segment-Buttons zeigen jetzt schematische Baum-Icons in der Reihenfolge
horizontal · kompakt · vertikal, jeweils mit Tooltip (title) und
aria-label. SPEC §9 entsprechend ergänzt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Der Splitter rastet nahe eines Randes in den minimierten Zustand des
jeweiligen Panels ein (gleiche Optik wie die Min-Buttons) und skaliert
dazwischen frei. Damit lassen sich beide Panels per Drag bis zu beiden
Extremen ziehen — in Seiten- wie Stapelmodus.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
min = Titelzeile, max = voller Platz abzüglich der Titelzeile des anderen
Panels (durch Vollhöhen-Layout und gespiegelte Collapse-Zustände bereits
gegeben). Ergänzt: Klick auf die Titelzeile eines minimierten Panels
stellt es wieder her; Doppelklick auf den Splitter setzt auf normal.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bisher wuchs beim Zoomen das Diagramm-Panel mit. Jetzt füllt die App die
Bildschirmhöhe (Body als Flex-Spalte), beide Panels sind flex-Container
mit fixem, scrollendem Inhaltsbereich. Der Zoom (CSS-`zoom` auf dem Baum)
skaliert damit nur den Inhalt; das Panel behält seine Größe, der Baum
scrollt im Diagramm-Viewport.
Splitter im Stapelmodus jetzt über die Grid-Zeile (--drow) statt
Diagramm-Höhe; Editor-Textarea füllt seinen Pane und scrollt intern.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Schwebende Zoom-Steuerung (−/Prozent/+) unten rechts im Diagramm plus
Strg/Cmd + Mausrad. Skaliert via CSS-`zoom` (Layout-Box), damit die
Scrollbalken des Containers korrekt greifen; Grenzen 30–300 %.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Statt Preset-Größen minimiert/maximiert min/max jetzt echt:
- minimieren blendet den Panel-Körper aus, nur die Titelzeile bleibt;
gestapelt als horizontale Leiste, seitlich als schmaler vertikaler
Streifen mit gedrehter Beschriftung.
- maximieren des einen minimiert das andere Panel (gespiegelt).
- freies Ziehen am Splitter stellt beide wieder her.
Schmaler Viewport (<=820px) verhält sich wie gestapelt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- <title>: WBS-Editor für Projektstrukturplan & Feature-Tree (Und/Oder-Baum)
- <meta name="description"> mit den Kern-Suchbegriffen ergänzt
- Untertitel über dem Diagramm: knappe Tool-Beschreibung
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Button "kopieren" im Editor-Kopf kopiert den Textarea-Inhalt via
navigator.clipboard.writeText (Fallback: Auswahl + execCommand) und
quittiert kurz mit "kopiert ✓".
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Beide Panel-Köpfe (Editor, Diagramm) erhalten drei Fenster-Buttons
(minimieren/normal/maximieren). Sie springen den Splitter auf Presets:
maximieren des einen = minimieren des anderen (gespiegelte Aktiv-Markierung).
Seitlich über --col (72% / 360px / 20%), gestapelt über --diagram-h
(72vh / auto / 160px). Freies Ziehen am Splitter hebt das Preset auf.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>