feat(quick-260907-fgv): Anmeldeseite zeigt Logo links, Text rechts daneben
Auf Wunsch des Users stehen Bildmarke und Text auf dem gelben Anmelde-Panel jetzt nebeneinander statt untereinander — dieselbe Anordnung wie in der gelieferten Datei tessera-logo-schriftzug.svg: links die Marke, rechts der Name und darunter der Untertitel. Dafuer nimmt die horizontale Variante der Marken-Komponente einen optionalen Untertitel entgegen. Die gestapelte Variante entfaellt — sie war nach dieser Umstellung nirgends mehr im Einsatz, alle uebrigen fuenf Stellen standen schon vorher nebeneinander. Der Test auf die entfallene Variante wurde nicht geloescht, sondern durch zwei Tests auf das neue Verhalten ersetzt: einer prueft, dass ohne Angabe kein Untertitel erscheint, der andere die tatsaechliche Reihenfolge im Dokument (Marke vor Name, Name vor Untertitel) statt nur deren Vorhandensein. Die Erwartungstexte sind von Hand geschrieben und nicht aus derselben Quelle gebildet, aus der die Komponente sie zieht. 222/222 Web-Tests gruen, Typpruefung sauber, im Browser gegengeprueft. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K5jtbGzC5Sf9npJ3JCjKhq
This commit is contained in:
@@ -3,13 +3,19 @@
|
||||
import { useTranslations } from 'next-intl';
|
||||
import { BRAND_OLIVE, BRAND_PLATE, BRAND_YELLOW } from './brand';
|
||||
|
||||
export type TesseraLogoVariant = 'mark' | 'horizontal' | 'stacked';
|
||||
export type TesseraLogoVariant = 'mark' | 'horizontal';
|
||||
|
||||
export interface TesseraLogoProps {
|
||||
/** Welche Bausteine gerendert werden. Vorgabe: `'horizontal'`. */
|
||||
variant?: TesseraLogoVariant;
|
||||
/** Kantenlaenge der Bildmarke in Pixeln. Vorgabe: 32. */
|
||||
size?: number;
|
||||
/**
|
||||
* Optionaler Untertitel unter dem Schriftzug, rechts neben der Bildmarke —
|
||||
* die Anordnung der gelieferten Datei `tessera-logo-schriftzug.svg`. Ohne
|
||||
* Angabe steht rechts nur der Name. Nur fuer `variant="horizontal"`.
|
||||
*/
|
||||
tagline?: string;
|
||||
/**
|
||||
* Schaltet die halbtransparente helle Kontur der Grundplatte im dunklen
|
||||
* Erscheinungsbild ein. Auf Flaechen, die unabhaengig vom
|
||||
@@ -19,8 +25,10 @@ export interface TesseraLogoProps {
|
||||
plateOutline?: boolean;
|
||||
/** Zusaetzliche Klassen fuer das aeusserste Element der gewaehlten Variante. */
|
||||
className?: string;
|
||||
/** Zusaetzliche Klassen fuer den Schriftzug (nur `horizontal`/`stacked`). */
|
||||
/** Zusaetzliche Klassen fuer den Schriftzug (nur `horizontal`). */
|
||||
wordmarkClassName?: string;
|
||||
/** Zusaetzliche Klassen fuer den Untertitel (nur zusammen mit `tagline`). */
|
||||
taglineClassName?: string;
|
||||
}
|
||||
|
||||
function LogoMark({
|
||||
@@ -86,9 +94,11 @@ function LogoMark({
|
||||
export function TesseraLogo({
|
||||
variant = 'horizontal',
|
||||
size = 32,
|
||||
tagline,
|
||||
plateOutline = true,
|
||||
className,
|
||||
wordmarkClassName,
|
||||
taglineClassName,
|
||||
}: TesseraLogoProps) {
|
||||
const t = useTranslations('common');
|
||||
const ariaLabel = t('brand.logoAlt');
|
||||
@@ -104,26 +114,21 @@ export function TesseraLogo({
|
||||
);
|
||||
}
|
||||
|
||||
if (variant === 'stacked') {
|
||||
return (
|
||||
<span className={`inline-flex flex-col items-center gap-2 ${className ?? ''}`}>
|
||||
<LogoMark size={size} plateOutline={plateOutline} ariaLabel={ariaLabel} />
|
||||
<span
|
||||
className={`text-2xl font-bold tracking-tight ${wordmarkClassName ?? ''}`}
|
||||
>
|
||||
// Bildmarke links, Schriftzug rechts daneben. Traegt die Komponente einen
|
||||
// Untertitel, steht er unter dem Namen — dieselbe Anordnung wie in der
|
||||
// gelieferten Datei `tessera-logo-schriftzug.svg`.
|
||||
return (
|
||||
<span className={`inline-flex items-center gap-3 ${className ?? ''}`}>
|
||||
<LogoMark size={size} plateOutline={plateOutline} ariaLabel={ariaLabel} />
|
||||
<span className="inline-flex flex-col text-left">
|
||||
<span className={`font-bold tracking-tight leading-none ${wordmarkClassName ?? ''}`}>
|
||||
{t('appName')}
|
||||
</span>
|
||||
</span>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<span className={`inline-flex items-center gap-2 ${className ?? ''}`}>
|
||||
<LogoMark size={size} plateOutline={plateOutline} ariaLabel={ariaLabel} />
|
||||
<span
|
||||
className={`font-bold tracking-tight ${wordmarkClassName ?? ''}`}
|
||||
>
|
||||
{t('appName')}
|
||||
{tagline ? (
|
||||
<span className={`mt-1 leading-snug ${taglineClassName ?? ''}`}>
|
||||
{tagline}
|
||||
</span>
|
||||
) : null}
|
||||
</span>
|
||||
</span>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user