Display CMS: Footer-Verlauf, Format-Hinweise und Switch-Fixes.

Blendet den B2IN-Text-Verlauf ohne Footer aus, zeigt 9:16-Format-Badges in der Mediathek, normalisiert Modul-Booleans und korrigiert Flux-Switches im Dark Mode.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Kevin Adametz 2026-06-18 08:27:44 +00:00
parent 6c2da9bdac
commit 7491d20d39
14 changed files with 366 additions and 10 deletions

View file

@ -118,5 +118,19 @@ textarea[data-flux-control]::placeholder {
scroll-behavior: smooth;
}
/*
* Flux switch thumb in dark mode: track uses data-checked on ui-switch.group, thumb uses
* group-data-checked:translate-x-[15px]. If dark:translate-x-[2px] wins (stale views/CSS),
* the knob stays left while the track looks "on". Attribute-based rules avoid that.
*/
ui-switch.group[data-checked] > span {
--tw-translate-x: 15px;
translate: var(--tw-translate-x) var(--tw-translate-y);
}
ui-switch.group[data-checked] > span:where(:dir(rtl), [dir='rtl'], [dir='rtl'] *) {
--tw-translate-x: -15px;
}
/* Theme-specific button styles for Backend Portal */

View file

@ -126,6 +126,16 @@
<flux:input wire:model.live.debounce.500ms="videoFilename" label="Video-Pfad / URL" placeholder="Wird automatisch gesetzt oder manuell eingeben..."
description="Über die Mediathek auswählen oder direkt Pfad/URL eingeben." class="flex-1" />
</div>
@if($formatStatus = $this->displayMediaFormatStatus($videoFilename))
<div class="flex flex-wrap items-center gap-2">
<flux:badge size="sm" :color="$formatStatus['color']">
{{ __($formatStatus['label']) }}
</flux:badge>
<flux:text class="text-xs text-zinc-500 dark:text-zinc-400">
{{ $formatStatus['description'] }}
</flux:text>
</div>
@endif
<flux:input wire:model="videoTitle" label="Name" placeholder="z.B. Herbst Kollektion 2025"
description="Interner Name des Videos – wird nicht im Video eingeblendet." />
<flux:input wire:model="videoPosition" type="number" min="0" max="100" label="Position (%)"
@ -160,8 +170,18 @@
<flux:badge size="sm" :color="$mediaType === 'video' ? 'purple' : 'sky'">
{{ $mediaType === 'video' ? __('Video') : __('Bild') }}
</flux:badge>
@if($formatStatus = $this->displayMediaFormatStatus($mediaUrl))
<flux:badge size="sm" :color="$formatStatus['color']">
{{ __($formatStatus['label']) }}
</flux:badge>
@endif
<flux:text class="text-xs text-zinc-400">{{ __('wird automatisch aus dem gewählten Medium erkannt') }}</flux:text>
</div>
@if($formatStatus = $this->displayMediaFormatStatus($mediaUrl))
<flux:text class="text-xs text-zinc-500 dark:text-zinc-400">
{{ $formatStatus['description'] }}
</flux:text>
@endif
<flux:select wire:model="mediaCategory" label="Kategorie">
<option value="immobilien">Immobilien</option>
<option value="moebel">Möbel</option>

View file

@ -52,6 +52,11 @@
<flux:badge color="{{ ($item->content['media_type'] ?? 'image') === 'video' ? 'purple' : 'sky' }}" size="sm">
{{ ($item->content['media_type'] ?? 'image') === 'video' ? 'Video' : 'Bild' }}
</flux:badge>
@if($formatStatus = $this->displayMediaFormatStatus($item->content['media_url'] ?? ''))
<flux:badge size="sm" :color="$formatStatus['color']">
{{ __($formatStatus['label']) }}
</flux:badge>
@endif
<flux:badge color="zinc" size="sm">
{{ ucfirst($item->content['category'] ?? '–') }}
</flux:badge>
@ -62,6 +67,9 @@
@if(($item->content['media_type'] ?? 'image') === 'image')
<span>{{ $item->content['duration_seconds'] ?? 10 }}s</span>
@endif
@if($formatStatus = $this->displayMediaFormatStatus($item->content['media_url'] ?? ''))
<span>{{ $formatStatus['description'] }}</span>
@endif
</div>
</div>

View file

@ -32,8 +32,8 @@
<flux:input wire:model="settings.header_claim" label="Claim" placeholder="Connecting Design & Property" />
<div class="flex flex-wrap gap-6">
<flux:switch wire:model.live="settings.show_logo" label="Logo anzeigen" />
<flux:switch wire:model.live="settings.show_claim" label="Claim anzeigen" />
<flux:switch wire:model.live.boolean="settings.show_logo" label="Logo anzeigen" />
<flux:switch wire:model.live.boolean="settings.show_claim" label="Claim anzeigen" />
</div>
@if($showLogo)
@ -63,7 +63,7 @@
</div>
<div class="space-y-4 rounded-xl border border-zinc-200 p-4 dark:border-zinc-700">
<flux:heading size="sm">{{ __('Footer & QR') }}</flux:heading>
<flux:switch wire:model.live="settings.show_footer" label="Footer anzeigen"
<flux:switch wire:model.live.boolean="settings.show_footer" label="Footer anzeigen"
description="Blendet die Fußzeile mit Domain, Name und QR-Code ein oder aus." />
<flux:input wire:model="settings.footer_prefix" label="Footer-Präfix" placeholder="by" />
<flux:input wire:model="settings.footer_name" label="Footer Name" placeholder="z.B. Marcel Scheibe" />
@ -78,7 +78,7 @@
</flux:select>
<flux:input wire:model="settings.transition.duration_ms" type="number" label="Transition-Dauer (ms)" />
<flux:input wire:model="settings.default_image_duration" type="number" label="Standard-Bilddauer (Sek.)" />
<flux:checkbox wire:model="settings.display_active" label="Display aktiv" />
<flux:checkbox wire:model.boolean="settings.display_active" label="Display aktiv" />
@elseif($version->type->value === 'offers')
<flux:checkbox wire:model="settings.loop" label="Endlosschleife" />
<flux:select wire:model="settings.transition.type" label="Transition">

View file

@ -58,6 +58,12 @@
<flux:badge size="sm" :color="$isMediaLibrarySource ? 'sky' : 'zinc'">
{{ $isMediaLibrarySource ? __('Mediathek') : __('Legacy-Datei') }}
</flux:badge>
@if ($formatStatus = $this->displayMediaFormatStatus($videoSource))
<flux:badge size="sm" :color="$formatStatus['color']">
{{ __($formatStatus['label']) }}
</flux:badge>
<span>{{ $formatStatus['description'] }}</span>
@endif
<span class="truncate">{{ $videoSource ?: '–' }}</span>
<span>Position: {{ $item->content['position'] ?? 25 }}%</span>
</div>