feat(admin): Logo und Favicon per Bild-Upload austauschbar
Neue Gruppe "Logo und Favicon" unter Admin > Inhalte mit drei Bildfeldern: Logo (Kopfzeile), optionales Logo fuer dunkle Flaechen (Mobilmenue, Fusszeile, Admin-Leiste; faellt sonst auf das normale Logo zurueck) und Favicon. Leer bleibt alles wie bisher (gezeichnetes Waben-Zeichen bzw. Standard-Icon). - lib/brand.ts liest die Pfade und prueft sie erneut gegen das Upload-Muster, bevor sie in ein src-Attribut gelangen. - Statische app/icon.svg und app/favicon.ico ersetzt durch dynamische app/icon.tsx (512 px PNG) und app/apple-icon.tsx (180 px auf Creme); lib/brand-icon.ts rendert Upload oder Standard-Icon per sharp und liest Dateien nur ueber resolveUploadPath. Cache-Control no-cache, damit ein neues Favicon ohne Tage Verzoegerung erscheint. - /favicon.ico per Rewrite auf /icon, Manifest nutzt /icon. - Hochgeladenes Logo mit fester Hoehe und begrenzter Breite (Kopfzeile mobil 56 px, ab sm 112 px), damit breite Wortmarken nichts sprengen. Uploads bleiben auf Rasterbilder beschraenkt (kein SVG, XSS-Schutz). Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
1 parent
ae2726b0ee
commit
4f442ec06d
19 files changed
+217
-77
No files matched your search
@@ -7,10 +7,30 @@
|
||||
export function Logomark({
|
||||
className = "h-8 w-8",
|
||||
variant = "default",
|
||||
src,
|
||||
}: {
|
||||
className?: string;
|
||||
variant?: "default" | "inverted";
|
||||
/** Im Admin hochgeladenes Logo (lib/brand.ts); ersetzt das gezeichnete Zeichen. */
|
||||
src?: string | null;
|
||||
}) {
|
||||
if (src) {
|
||||
// Rohes <img> statt next/image: das Seitenverhaeltnis eines hochgeladenen
|
||||
// Logos ist unbekannt (quadratisch bis breite Wortmarke). Die Hoehe kommt
|
||||
// aus className, die Breite folgt dem Bild — begrenzt, damit eine sehr
|
||||
// breite Datei den Kopf nicht sprengt. alt="" weil der Firmenname direkt
|
||||
// daneben als Text steht.
|
||||
return (
|
||||
// eslint-disable-next-line @next/next/no-img-element
|
||||
<img
|
||||
src={src}
|
||||
alt=""
|
||||
className={`${className} ${className.includes("max-w-") ? "" : "max-w-40"} object-contain`}
|
||||
style={{ width: "auto" }}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
const hexColor = variant === "inverted" ? "#F4EFE5" : "#B88A44";
|
||||
const treeColor = variant === "inverted" ? "#F4EFE5" : "#24352B";
|
||||
|
||||
|
||||
Reference in new issue
Block a user