frontend: Toggle „vertikal" schaltet Seitenlayout mit
Der „vertikal"-Umschalter steuert jetzt zusätzlich zur Baumausrichtung die Anordnung von Editor und Diagramm: - aktiv (vertikal): Editor links, Diagramm rechts — der schmale, transponierte Baum passt in die rechte Spalte. - inaktiv (horizontal): Diagramm oben und Editor unten, je volle Breite; die Agenda (Legende/Hilfe) sitzt rechts im Editor als aufklappbares <details>. Umgesetzt via CSS-Grid mit grid-template-areas und .side-Klasse; die .hint-Legende wandert in ein <details class="agenda">, der Editor-Body wird zum Flex-Container (horizontal Zeile, vertikal Spalte). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
ded894a4da
commit
be19bac84f
+48
-5
@@ -33,12 +33,48 @@
|
|||||||
h1{font-size:1.25rem;font-weight:600;letter-spacing:-.01em}
|
h1{font-size:1.25rem;font-weight:600;letter-spacing:-.01em}
|
||||||
header p{margin-top:4px;color:var(--muted);font-size:.9rem}
|
header p{margin-top:4px;color:var(--muted);font-size:.9rem}
|
||||||
|
|
||||||
|
/* Horizontal (Toggle aus): Diagramm oben, Editor unten — je volle Breite.
|
||||||
|
Vertikal (Toggle an, .side): Editor links, Diagramm rechts. */
|
||||||
.app{
|
.app{
|
||||||
max-width:1200px;margin:0 auto;
|
max-width:1200px;margin:0 auto;
|
||||||
display:grid;grid-template-columns:360px 1fr;gap:20px;
|
display:grid;grid-template-columns:1fr;gap:20px;
|
||||||
|
grid-template-areas:"diagram" "editor";
|
||||||
align-items:start;
|
align-items:start;
|
||||||
}
|
}
|
||||||
@media (max-width:820px){ .app{grid-template-columns:1fr} }
|
.app.side{
|
||||||
|
grid-template-columns:360px 1fr;
|
||||||
|
grid-template-areas:"editor diagram";
|
||||||
|
}
|
||||||
|
.panel.editor{grid-area:editor}
|
||||||
|
.panel.right{grid-area:diagram}
|
||||||
|
@media (max-width:820px){
|
||||||
|
.app.side{grid-template-columns:1fr;grid-template-areas:"editor" "diagram"}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Editor-Innenaufbau: Textarea + aufklappbare Agenda.
|
||||||
|
Horizontal nebeneinander, vertikal (.side) untereinander. */
|
||||||
|
.editor-body{display:flex;align-items:stretch}
|
||||||
|
.editor-body textarea{flex:1 1 auto;min-width:0}
|
||||||
|
.agenda{
|
||||||
|
flex:0 0 auto;
|
||||||
|
border-left:1px dashed rgba(36,52,71,.18);
|
||||||
|
display:flex;flex-direction:column;
|
||||||
|
}
|
||||||
|
.agenda[open]{width:300px}
|
||||||
|
.agenda>summary{
|
||||||
|
list-style:none;cursor:pointer;white-space:nowrap;
|
||||||
|
padding:10px 16px;
|
||||||
|
font-family:'IBM Plex Mono',monospace;
|
||||||
|
font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);
|
||||||
|
display:flex;align-items:center;gap:7px;
|
||||||
|
}
|
||||||
|
.agenda>summary::-webkit-details-marker{display:none}
|
||||||
|
.agenda>summary::before{content:'▸';display:inline-block;transition:transform .15s}
|
||||||
|
.agenda[open]>summary::before{transform:rotate(90deg)}
|
||||||
|
.agenda .hint{border-top:0;overflow:auto}
|
||||||
|
.side .editor-body{flex-direction:column;align-items:stretch}
|
||||||
|
.side .agenda{border-left:0;border-top:1px dashed rgba(36,52,71,.18)}
|
||||||
|
.side .agenda[open]{width:auto}
|
||||||
|
|
||||||
.panel{
|
.panel{
|
||||||
background:var(--card);
|
background:var(--card);
|
||||||
@@ -271,13 +307,16 @@
|
|||||||
</svg>
|
</svg>
|
||||||
<span>Werk<span style="color:var(--or)">baum</span></span>
|
<span>Werk<span style="color:var(--or)">baum</span></span>
|
||||||
</h1>
|
</h1>
|
||||||
<p>Links die textuelle Struktur bearbeiten — rechts entsteht das Diagramm live.</p>
|
<p>Struktur als Text bearbeiten — das Diagramm entsteht live. Umschalter „vertikal“ ordnet Editor und Diagramm nebeneinander an.</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div class="app">
|
<div class="app" id="app">
|
||||||
<div class="panel">
|
<div class="panel editor">
|
||||||
<div class="panel-head">Struktur (Text)</div>
|
<div class="panel-head">Struktur (Text)</div>
|
||||||
|
<div class="editor-body">
|
||||||
<textarea id="src" spellcheck="false"></textarea>
|
<textarea id="src" spellcheck="false"></textarea>
|
||||||
|
<details class="agenda">
|
||||||
|
<summary>Agenda</summary>
|
||||||
<div class="hint">
|
<div class="hint">
|
||||||
Einrückung (2 Leerzeichen oder Tab) definiert die Hierarchie.<br>
|
Einrückung (2 Leerzeichen oder Tab) definiert die Hierarchie.<br>
|
||||||
<code>-</code> Teilpaket, alle erforderlich <em>(all of)</em><br>
|
<code>-</code> Teilpaket, alle erforderlich <em>(all of)</em><br>
|
||||||
@@ -299,6 +338,8 @@
|
|||||||
Kommentare mit <code>%%</code> — als ganze Zeile oder am Zeilenende.
|
Kommentare mit <code>%%</code> — als ganze Zeile oder am Zeilenende.
|
||||||
Personen mit <code>@name</code> — erscheinen unten rechts am Knoten.
|
Personen mit <code>@name</code> — erscheinen unten rechts am Knoten.
|
||||||
</div>
|
</div>
|
||||||
|
</details>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="panel right">
|
<div class="panel right">
|
||||||
@@ -478,9 +519,11 @@ src.addEventListener('keydown', e => {
|
|||||||
|
|
||||||
src.addEventListener('input', render);
|
src.addEventListener('input', render);
|
||||||
|
|
||||||
|
const app = document.getElementById('app');
|
||||||
const vert = document.getElementById('vert');
|
const vert = document.getElementById('vert');
|
||||||
vert.addEventListener('change', () => {
|
vert.addEventListener('change', () => {
|
||||||
out.classList.toggle('vertical', vert.checked);
|
out.classList.toggle('vertical', vert.checked);
|
||||||
|
app.classList.toggle('side', vert.checked);
|
||||||
});
|
});
|
||||||
|
|
||||||
const showc = document.getElementById('showc');
|
const showc = document.getElementById('showc');
|
||||||
|
|||||||
Reference in New Issue
Block a user