feat: make band logo optional on break screen

This commit is contained in:
2026-07-16 18:26:24 +02:00
parent ded84b814d
commit 6475517190
6 changed files with 18 additions and 1 deletions
+12
View File
@@ -164,11 +164,21 @@ export function ChoreoPanel() {
/> />
</label> </label>
</div> </div>
<label className="flex items-center gap-2 text-xs text-gray-600">
<input
type="checkbox"
className="h-4 w-4"
checked={slide.logoVisible ?? true}
onChange={(e) => updateSlide({ logoVisible: e.target.checked })}
/>
{t.choreo.showLogo}
</label>
<div className="grid grid-cols-2 gap-2"> <div className="grid grid-cols-2 gap-2">
<label className="text-xs text-gray-600"> <label className="text-xs text-gray-600">
{t.choreo.logoLabel} {t.choreo.logoLabel}
<select <select
className={inputCls} className={inputCls}
disabled={!(slide.logoVisible ?? true)}
value={slide.logoName ?? ""} value={slide.logoName ?? ""}
onChange={(e) => onChange={(e) =>
updateSlide({ logoName: e.target.value || null }) updateSlide({ logoName: e.target.value || null })
@@ -187,6 +197,7 @@ export function ChoreoPanel() {
<input <input
type="range" type="range"
className="w-full" className="w-full"
disabled={!(slide.logoVisible ?? true)}
min={80} min={80}
max={480} max={480}
step={10} step={10}
@@ -201,6 +212,7 @@ export function ChoreoPanel() {
<input <input
type="checkbox" type="checkbox"
className="h-4 w-4" className="h-4 w-4"
disabled={!(slide.logoVisible ?? true)}
checked={slide.logoInverted ?? false} checked={slide.logoInverted ?? false}
onChange={(e) => updateSlide({ logoInverted: e.target.checked })} onChange={(e) => updateSlide({ logoInverted: e.target.checked })}
/> />
+1
View File
@@ -77,6 +77,7 @@ export function declareReplicants(nodecg: NodeCG.ServerAPI): Replicants {
heading: branding.breakHeading ?? seed.breakHeading, heading: branding.breakHeading ?? seed.breakHeading,
nextActName: "", nextActName: "",
nextActFrom: "", nextActFrom: "",
logoVisible: true,
logoInverted: false, logoInverted: false,
logoName: null, logoName: null,
logoHeightPx: 240, logoHeightPx: 240,
+1 -1
View File
@@ -113,7 +113,7 @@ export function Break() {
<div className="text-6xl font-medium tracking-wide text-white/80"> <div className="text-6xl font-medium tracking-wide text-white/80">
{slide?.heading} {slide?.heading}
</div> </div>
{logoUrl && ( {(slide?.logoVisible ?? true) && logoUrl && (
<img <img
src={logoUrl} src={logoUrl}
alt="" alt=""
+1
View File
@@ -64,6 +64,7 @@ export const en = {
headingLabel: "Heading", headingLabel: "Heading",
nextActNameLabel: "Next act", nextActNameLabel: "Next act",
nextActFromLabel: "Where they're from", nextActFromLabel: "Where they're from",
showLogo: "Show act logo",
logoLabel: "Act logo", logoLabel: "Act logo",
logoAuto: "Automatic (first image)", logoAuto: "Automatic (first image)",
logoSizeLabel: (px: number) => `Logo size (${px}px)`, logoSizeLabel: (px: number) => `Logo size (${px}px)`,
+1
View File
@@ -59,6 +59,7 @@ export const sr: Strings = {
headingLabel: "Naslov", headingLabel: "Naslov",
nextActNameLabel: "Sledeći nastup", nextActNameLabel: "Sledeći nastup",
nextActFromLabel: "Odakle su", nextActFromLabel: "Odakle su",
showLogo: "Prikaži logo benda",
logoLabel: "Logo benda", logoLabel: "Logo benda",
logoAuto: "Automatski (prva slika)", logoAuto: "Automatski (prva slika)",
logoSizeLabel: (px: number) => `Veličina logoa (${px}px)`, logoSizeLabel: (px: number) => `Veličina logoa (${px}px)`,
+2
View File
@@ -23,6 +23,8 @@ export interface BreakSlide {
heading: string; heading: string;
nextActName: string; nextActName: string;
nextActFrom: string; nextActFrom: string;
/** show the band logo at all (hide when no act logo makes sense) */
logoVisible: boolean;
/** invert the band logo's colors (dark logo on the dark background) */ /** invert the band logo's colors (dark logo on the dark background) */
logoInverted: boolean; logoInverted: boolean;
/** `base` of the assets:break-logo file to show; null = first uploaded */ /** `base` of the assets:break-logo file to show; null = first uploaded */