PM-Editor UX: Kategorie in die Schreibfläche, Bild-Upload als Modal-Flow

Kategorie-Pflichtfeld direkt unter die Firma statt in die Sidebar.
Titelbild-Upload öffnet ein Modal: erst Bild wählen, dann erscheinen
die gestrafften Schritte (Herkunft & Bildnachweis mit Vorschlag aus
dem Urheber, Personen & Rechte, Bestätigung), Optionales eingeklappt.
Bildrechte-Checkbox im Einreichen-Modal nur noch mit eigenem Titelbild.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Kevin Adametz 2026-07-09 13:55:21 +00:00
parent 807fbc1b80
commit f11e8aab7c
10 changed files with 705 additions and 391 deletions

View file

@ -5,6 +5,7 @@
'confirmLabel' => null,
'quotaTotal' => null,
'quotaRemaining' => null,
'hasTitleImage' => true,
])
{{--
@ -24,6 +25,10 @@
speichert und dann zur Buchungsseite leitet. ZWINGEND in Erstellen/Bearbeiten
setzen — sonst ginge der erfasste Inhalt beim Sprung verloren. Fehlt sie
(z. B. Detailansicht, dort ist bereits gespeichert), wird direkt verlinkt.
`has-title-image`: Ohne eigenes Titelbild (nur Platzhalter) entfällt die
Bildrechte-Bestätigung — es gibt nichts zu bestätigen. Default true, damit
die Checkbox im Zweifel lieber einmal zu viel erscheint.
--}}
@php($bookingRequired = ! (auth()->user()?->hasActiveBooking() ?? true))
@ -62,7 +67,9 @@
</div>
</div>
@else
<div class="space-y-5" x-data="{ agb: false, images: false, contact: false, waiver: false, ai: false }">
{{-- Ohne eigenes Titelbild startet `images` auf true: die Checkbox ist
ausgeblendet und darf den Bestätigen-Button nicht blockieren. --}}
<div class="space-y-5" x-data="{ agb: false, images: {{ $hasTitleImage ? 'false' : 'true' }}, contact: false, waiver: false, ai: false }">
<div>
<flux:text class="eyebrow muted">{{ __('Veröffentlichung') }}</flux:text>
<flux:heading size="lg">{{ __('Pressemitteilung zur Prüfung einreichen') }}</flux:heading>
@ -137,7 +144,7 @@
<div class="panel-head" style="padding:10px 16px;">
<span class="section-eyebrow">{{ __('Ihre Bestätigungen') }}</span>
<span class="shrink-0 whitespace-nowrap text-[11.5px] tabular-nums text-[color:var(--color-ink-3)]"
x-text="[agb, images, contact, waiver, ai].filter(Boolean).length + ' / 5'"></span>
x-text="[agb, {{ $hasTitleImage ? 'images, ' : '' }}contact, waiver, ai].filter(Boolean).length + ' / {{ $hasTitleImage ? 5 : 4 }}'"></span>
</div>
<div class="divide-y divide-[color:var(--color-bg-rule)]">
<div class="px-4 py-3">
@ -147,13 +154,15 @@
:label="__('Der Inhalt entspricht den AGB und gesetzlichen Vorgaben.')"
/>
</div>
<div class="px-4 py-3">
<flux:switch
align="left"
x-on:change="images = $event.target.checked"
:label="__('Alle Bildrechte sind geklärt.')"
/>
</div>
@if ($hasTitleImage)
<div class="px-4 py-3">
<flux:switch
align="left"
x-on:change="images = $event.target.checked"
:label="__('Alle Bildrechte sind geklärt.')"
/>
</div>
@endif
<div class="px-4 py-3">
<flux:switch
align="left"