From b422b492e6ba399704caf58f389ffb6644ae06d7 Mon Sep 17 00:00:00 2001 From: DeeCee03 Date: Sat, 29 Aug 2026 20:51:07 +0200 Subject: [PATCH] Slide 4: das Menue haengt sichtbar am Pluszeichen Vier Sachen an derselben Slide. BREITE AUS DEM INHALT. Sie stand als feste 470 in der Zeichenfunktion, gemessen fuer Beschriftungen mit "senden", und liess ein Drittel Leerraum rechts. Sie kommt jetzt aus dem laengsten Eintrag. Dabei kippte die Zeichnung von quer auf hochkant, und ein hochkantes Bild richtet sich nach der Hoehe: bei den alten 940 px wurde der Kasten 1093 hoch und lief in die Ueberschrift. Jetzt 680. Gerechnet ist die Breite am sichtbaren Blatt und nicht am Kasten -- der ist um den Stapelrand groesser als das, was man sieht, und mit seiner Oberkante gerechnet stand die Zeichnung noch einmal 60 px zu hoch. OBEN OHNE VERB. Wer das Menue ueber das Pluszeichen geoeffnet hat, weiss, dass er etwas schickt; "Dokument senden", "Fotos und Videos senden", "Audio senden", "Kontakt teilen" schreiben es viermal daneben. Jetzt stehen dort die Dinge: Dokumente, Medien, Audio, Kontakt. Unten bleibt das Verb, weil es etwas hinzufuegt -- "Termin" allein waere ein Anhang, "Termin erstellen" ist eine Handlung. Das ist eine Abweichung vom Composer und steht als solche in POST-6.md 4. DIE EINGABEZEILE IST ZURUECK. Sie war weggenommen worden mit der Begruendung, die Slide zeige ja, was man anhaengen kann. Das stimmte nur, solange man wusste, worauf man schaut: ohne das Feld ist die Karte eine Liste im Nichts. Das Pluszeichen traegt jetzt die gruene Marke wie ein gedruecktes Element, der Zeiger steht darauf, und das Menue klappt nach oben auf -- so wie im Werkzeug. TEILEN STATT TELEFONHOERER. Ein Hoerer sagt "anrufen"; bei "Kontakt" wird eine Karte weitergegeben. ShareNetwork aus demselben Phosphor-bold-Satz, entnommen aus @phosphor-icons/react im Website-Repo statt abgemalt. "phone" stand danach nirgends mehr und ist aus der Tabelle heraus: 19 Zeichen, jedes in Gebrauch. Das Bewegtbild ist nicht betroffen, es nutzt das Nachrichtenmenue. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv --- POST-6.md | 47 +++++++++++++++++++++- post6.html | 113 +++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 138 insertions(+), 22 deletions(-) diff --git a/POST-6.md b/POST-6.md index 492d5f9..682bc35 100644 --- a/POST-6.md +++ b/POST-6.md @@ -29,7 +29,7 @@ einem eigenen Knopf. Wie das funktioniert, steht im | 1 | Team-Chat | Büro und Baustelle, **endlich im selben Chat.** | Kanalliste und Verlauf nebeneinander, mit Filterzeile und Eingabefeld | | 2 | Die Kanäle | Ein Kanal **pro Projekt.** | Links das Durcheinander als Zeichnung, rechts die Kanalliste | | 3 | Die Aufgabe | Foto rein, **Aufgabe raus.** | Baustellenfotos, die Aufgabe daraus, die Bestätigung im Projekt | -| 4 | Das Pluszeichen | Nicht nur **Text.** | Das Menü hinter dem Plus, auf dem Stapel | +| 4 | Das Pluszeichen | Nicht nur **Text.** | Das Menü über der Eingabezeile, aus der es aufklappt | | 5 | Bald verfügbar | Der Chat für unterwegs **wird gerade gebaut.** | Zwei Ausschnitte der Oberfläche, versetzt übereinander, mit dem Absperrband darüber | Dazu, außerhalb des Streifens: @@ -94,7 +94,7 @@ Quelle ist `components/general/GeneralTeamChatPage.tsx` aus dem Pitch-Paket | Sinnbild je Kanalsorte (Koffer, Personen, Kürzel) | `ChatAvatar` | | Kopfzeile „P-2026-0042 · 8 Mitglieder · aktiv" | `ChatHeader` | | Filterzeile Alle / Projekte / Direkt / Ungelesen | der Typ `ChatFilter` | -| Das Menü hinter dem Plus, samt Trenner | `Composer` | +| Das Menü hinter dem Plus, samt Trenner und Reihenfolge | `Composer` (Beschriftungen oben geändert, §4) | | Eingabefeld „Nachricht schreiben …" | derselbe Ort | | Farben, Ränder, Plättchentöne | `ui/theme.css` | | Alle Symbole | `@subframe/core`, Pfade aus dem Paket kopiert | @@ -179,6 +179,49 @@ Abgelegt als **320 × 320 JPEG** bei Qualität 2. Der Avatar misst 42 px auf der Slide, bei Renderqualität 3 also 126 — 320 lässt Luft, und JPEG ist für Fotos das richtige Format; als PNG wäre es das Fünffache. Zusammen 100 KB. +**Im Menü hinter dem Plus fällt oben das Verb weg.** Im Werkzeug heißen die +vier oberen Einträge „Dokument senden", „Fotos und Videos senden", „Audio +senden" und „Kontakt teilen" — viermal ein Wort, das der Ort schon sagt: wer +das Menü über das Pluszeichen geöffnet hat, weiß, dass er etwas schickt. Hier +stehen nur die Dinge: **Dokumente, Medien, Audio, Kontakt.** Unten bleibt das +Verb, weil es dort etwas hinzufügt — „Termin" allein wäre ein Anhang, „Termin +erstellen" ist eine Handlung. + +„Dokument" steht dabei in der Mehrzahl, weil man mehrere anhängen kann; Audio +und Kontakt bleiben einzeln, man schickt eine Aufnahme und einen Kontakt. Aus +„Fotos und Videos" wird **„Medien"** — dasselbe in einem Wort. + +**Bei „Kontakt" steht jetzt das Teilen-Zeichen statt des Telefonhörers.** Ein +Hörer sagt „anrufen"; hier wird eine Karte weitergegeben. `ShareNetwork` aus +demselben Phosphor-bold-Satz wie alle anderen Zeichen, entnommen aus +`@phosphor-icons/react` im Website-Repo statt abgemalt. `phone` stand danach +nirgends mehr und ist aus der Tabelle heraus — sie zählt jetzt 19 Zeichen, und +jedes davon wird benutzt. + +**Und die Eingabezeile ist zurück.** Sie stand einmal unter dem Menü und war +weggenommen worden mit der Begründung, die Slide zeige, was man anhängen kann, +und dafür brauche es das Feld nicht. Das stimmte nur so lange, wie man wusste, +worauf man schaut: ohne das Feld ist die Karte eine Liste im Nichts, und dass +sie aufklappt, wenn man im Chat auf das Pluszeichen tippt, stand nirgends. + +Das Pluszeichen trägt jetzt die grüne Marke wie ein gedrücktes Element, und +der Zeiger steht darauf — derselbe, der im Bewegtbild die Nachricht anklickt. +Beides zusammen sagt den Zusammenhang, ohne dass ein Wort danebenstehen muss. +Das Menü öffnet nach oben, weil es das im Werkzeug auch tut. + +Mit den kürzeren Beschriftungen kommt die Breite der Karte jetzt aus dem +längsten Eintrag statt aus einer festen Zahl. Vorher standen dort 470 Einheiten +— gemessen für Beschriftungen mit „senden" —, und die Karte lief mit einem +Drittel Leerraum quer über die Slide. + +> **Ein hochkantes Bild richtet sich nach der Höhe, nicht nach der Breite.** +> Der Kasten misst 460 × 535. Bei der alten Breite von 940 px wurde er 1093 px +> hoch und lief in die Überschrift. Gerechnet wird die neue Breite außerdem am +> **sichtbaren Blatt** und nicht am Kasten: der ist um den Stapelrand größer +> als das, was man sieht, und mit seiner Oberkante gerechnet stand die +> Zeichnung noch einmal 60 px zu hoch und berührte den Fließtext. Bei 680 px +> bleiben rund 115 px Luft. + **Die Plakette für Ungelesenes trägt eine Zahl und ist grün.** In der Quelle ist `unread` ein Wahrheitswert und der Punkt violett. Beides ist geändert: violett ist im Produkt die Farbe der Projekte, das Kanalsymbol in derselben diff --git a/post6.html b/post6.html index 9f4d527..e1580e0 100644 --- a/post6.html +++ b/post6.html @@ -1450,7 +1450,15 @@ if (location.search.indexOf("nur=anim") >= 0) eyebrow: "Das Pluszeichen", head: 'Nicht nur
Text.', body: "Versende mehr als nur Textnachrichten: Dokumente, Fotos, Sprachnachrichten.", - vis: "menue", visW: 940, visLeft: 70, visBottom: 120, + /* Schmaler und hoeher als vorher: die Zeichnung ist kein breites Menue + mehr, sondern ein Ausschnitt mit Eingabezeile darunter. Der Kasten + misst 460 x 535 -- hochkant, und die Breite richtet sich deshalb nach + der Hoehe. Gerechnet ist sie am sichtbaren Blatt und nicht am Kasten: + der ist um den Stapelrand groesser als das, was man sieht, und mit + seiner Oberkante gerechnet stand die Zeichnung 60 px zu hoch und + beruehrte den Fliesstext. Bei 680 px bleiben rund 115 px Luft. + Mittig gesetzt, (1080 - 680) / 2 = 200. */ + vis: "menue", visW: 680, visLeft: 200, visBottom: 120, }, { /* Ein Ausblick, kein Beleg. Die App gibt es noch nicht -- deshalb steht @@ -2062,7 +2070,11 @@ if (location.search.indexOf("nur=anim") >= 0) "file-text": '', "image": '', "mic": '', - "phone": '', + /* Teilen statt Telefonhoerer. Der Eintrag heisst "Kontakt", und ein + Hoerer sagt "anrufen" -- hier wird eine Karte weitergegeben, nicht + telefoniert. ShareNetwork aus demselben Phosphor-bold-Satz; "phone" + stand danach nirgends mehr und ist mit heraus. */ + "share-network": '', "calendar": '', "square-check": '', "plus": '', @@ -3205,39 +3217,100 @@ if (location.search.indexOf("nur=anim") >= 0) } /* ─── Slide 4 · Was noch in den Chat passt ─────────────────────────────── - Das Menue hinter dem Plus im Eingabefeld, woertlich aus Composer. Der - Trenner sitzt an derselben Stelle: darueber, was man anhaengt, darunter, - was man anlegt. Deshalb steht er hier auch. */ + Das Menue hinter dem Plus im Eingabefeld. Der Trenner sitzt an derselben + Stelle wie im Composer: darueber, was man anhaengt, darunter, was man + anlegt. + + ZWEI ABWEICHUNGEN VON DER QUELLE, beide der Lesbarkeit wegen. + + Oben faellt das Verb weg. Im Werkzeug heissen die vier Eintraege + "Dokument senden", "Fotos und Videos senden", "Audio senden" und + "Kontakt teilen" -- viermal ein Wort, das der Ort schon sagt: wer das + Menue ueber das Pluszeichen im Eingabefeld geoeffnet hat, weiss, dass er + etwas schickt. Hier stehen nur die Dinge. Unten bleibt das Verb, weil es + dort etwas hinzufuegt: "Termin" allein waere ein Anhang, "Termin + erstellen" ist eine Handlung. + + Und "Dokument" steht in der Mehrzahl, weil man mehrere anhaengen kann. + Audio und Kontakt bleiben einzeln -- man schickt eine Aufnahme und einen + Kontakt. Aus "Fotos und Videos" wird "Medien": dasselbe in einem Wort, + und die Karte wird noch einmal schmaler. + + Das Zeichen bei "Kontakt" ist das Teilen-Zeichen und nicht mehr der + Telefonhoerer. Der Hoerer sagt "anrufen"; hier wird eine Karte + weitergegeben. */ const MENUE = [ - ["file-text", "Dokument senden"], - ["image", "Fotos und Videos senden"], - ["mic", "Audio senden"], - ["phone", "Kontakt teilen"], + ["file-text", "Dokumente"], + ["image", "Medien"], + ["mic", "Audio"], + ["share-network", "Kontakt"], null, ["calendar", "Termin erstellen"], ["square-check", "Aufgabe erstellen"], ]; function visMenue() { - const W = 470, ZH = 52, PAD = 14, RAND = 30; + const ZH = 52, PAD = 14, RAND = 30, GR = 19; + const TX = PAD + 50; // wo der Text im Menue anfaengt + const FELD = 76; // Hoehe der Eingabezeile + const LUFT = 20; // Abstand zwischen Menue und Feld + + /* Die Breite kommt aus dem laengsten Eintrag statt aus einer festen Zahl. + Vorher standen hier 470 -- gemessen fuer Beschriftungen mit "senden", + und danach lief die Karte quer ueber die Slide, mit einem Drittel + Leerraum rechts. */ + const breit = Math.max(...MENUE.filter(Boolean).map(e => messen(e[1], GR, 500))); + const W = Math.round(TX + breit + 44); const hoehe = 2 * PAD + MENUE.reduce((a, e) => a + (e ? ZH : 13), 0); - let g = ""; - let y = PAD + RAND; + + /* Das Blatt ist breiter als das Menue: die Eingabezeile laeuft darunter + ueber die ganze Breite, so wie sie es im Fenster tut. */ + const B = RAND + W + 118, H = RAND + hoehe + LUFT + FELD; + + /* Das Menue als eigene Karte mit eigenem Schatten -- es liegt ueber dem + Fenster und nicht darin. */ + let g = ''; + + let y = RAND + PAD; for (const e of MENUE) { if (!e) { - g += ''; y += 13; continue; } - g += ikon(e[0], PAD + RAND + 26, y + ZH / 2, 20, CHAT_TEXT2); - g += uiText(PAD + RAND + 50, y + ZH / 2 + 7, e[1], 19, 500, CHAT_TEXT); + g += ikon(e[0], RAND + PAD + 26, y + ZH / 2, 20, CHAT_TEXT2); + g += uiText(RAND + PAD + 50, y + ZH / 2 + 7, e[1], GR, 500, CHAT_TEXT); y += ZH; } - /* Unter dem Menue stand einmal das Eingabefeld, an dem es haengt. Es ist - weg: die Slide zeigt, was man anhaengen kann, und dafuer braucht es - das Feld nicht. Der Stapel sagt ohnehin, dass hier ein Bildschirm - liegt und nicht ein Kasten im Nichts. */ - return stapelKasten(W + 2 * RAND, hoehe + 2 * RAND, 20, g); + + /* ── Die Eingabezeile, aus der das Menue kommt ────────────────────────── + Sie stand hier einmal und war weggenommen worden: die Slide zeige, was + man anhaengen kann, und dafuer brauche es das Feld nicht. Das stimmte + nur so lange, wie man wusste, worauf man schaut. Ohne das Feld ist die + Karte eine Liste im Nichts -- dass sie aufklappt, wenn man im Chat auf + das Pluszeichen tippt, stand nirgends. + + Das Pluszeichen traegt deshalb die gruene Marke wie ein gedruecktes + Element, und der Zeiger steht darauf. Beides zusammen sagt, was der + Zusammenhang ist, ohne dass ein Wort danebenstehen muss. Das Menue + oeffnet nach oben, weil es das im Werkzeug auch tut -- unten waere + kein Platz. */ + const fy = H - FELD, pcx = RAND + 26, pcy = fy + FELD / 2; + g += ''; + g += ''; + g += ikon("plus", pcx, pcy, 21, MARKE.zeichen); + g += ''; + g += uiText(pcx + 54, pcy + 6, "Nachricht schreiben …", 16, 400, "#C9C9CE"); + g += ikon("mic", B - RAND - 12, pcy, 21, CHAT_TEXT2); + g += zeiger(pcx + 5, pcy + 3, 1.5); + + return stapelKasten(B, H, 20, g); }