5.4: empty-state auf customer/press-releases + customer/press-kits ausgerollt
Component um optionalen Default-Slot erweitert (rendert unter den Aktionen) fuer Zusatzinhalt wie die Onboarding-Schritte der Leerzustaende. Umgestellt: - customer/press-releases/index: 3 States (Suche ohne Treffer, Filter ohne Treffer=warm, gar keine PMs inkl. Onboarding-Grid im Default-Slot) - customer/press-kits/index: 2 States (Filter=warm, keine Firma inkl. Onboarding-Grid), Panel-Wrapper bleibt erhalten Der Such-Titel behaelt das originale ASCII-Anfuehrungszeichen (via einfach- gequotetem Attribut mit escaptem PHP-String). Alle Views kompilieren, 162 Customer-/PM-Tests gruen. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
077d313baa
commit
1c75e61179
3 changed files with 50 additions and 50 deletions
|
|
@ -577,37 +577,36 @@ new #[Layout('components.layouts.app'), Title('Meine Firmen')] class extends Com
|
|||
@if ($hasActiveFilters)
|
||||
{{-- Empty: Filter ohne Treffer --}}
|
||||
<div class="panel" data-state="empty-filter">
|
||||
<div class="empty-stage">
|
||||
<div class="empty-ico warm">
|
||||
<x-portal.empty-state
|
||||
variant="warm"
|
||||
:title="__('Keine Firmen mit diesen Filtern')"
|
||||
:subtitle="__('Aktive Filter passen auf keine Einträge. Filter zurücksetzen oder weiter fassen.')"
|
||||
>
|
||||
<x-slot:icon>
|
||||
<flux:icon.funnel class="size-6" />
|
||||
</div>
|
||||
<h3 class="empty-title">{{ __('Keine Firmen mit diesen Filtern') }}</h3>
|
||||
<p class="empty-sub">
|
||||
{{ __('Aktive Filter passen auf keine Einträge. Filter zurücksetzen oder weiter fassen.') }}
|
||||
</p>
|
||||
<div class="flex items-center gap-2.5 mt-6">
|
||||
</x-slot:icon>
|
||||
<x-slot:actions>
|
||||
<flux:button variant="primary" wire:click="resetFilters">
|
||||
{{ __('Alle Filter zurücksetzen') }}
|
||||
</flux:button>
|
||||
</div>
|
||||
</div>
|
||||
</x-slot:actions>
|
||||
</x-portal.empty-state>
|
||||
</div>
|
||||
@else
|
||||
{{-- Empty: noch keine Firma --}}
|
||||
<div class="panel" data-state="empty-none">
|
||||
<div class="empty-stage">
|
||||
<div class="empty-ico">
|
||||
<x-portal.empty-state
|
||||
:title="__('Noch keine Firma angelegt')"
|
||||
:subtitle="__('Lege deine erste Firma an. Du kannst direkt im Anschluss eine Pressemitteilung darauf veröffentlichen — eine separate Freigabe der Firma ist nicht erforderlich.')"
|
||||
>
|
||||
<x-slot:icon>
|
||||
<flux:icon.building-office class="size-6" />
|
||||
</div>
|
||||
<h3 class="empty-title">{{ __('Noch keine Firma angelegt') }}</h3>
|
||||
<p class="empty-sub">
|
||||
{{ __('Lege deine erste Firma an. Du kannst direkt im Anschluss eine Pressemitteilung darauf veröffentlichen — eine separate Freigabe der Firma ist nicht erforderlich.') }}
|
||||
</p>
|
||||
<div class="flex items-center gap-2.5 mt-6">
|
||||
</x-slot:icon>
|
||||
<x-slot:actions>
|
||||
<flux:button variant="primary" icon="plus" href="{{ route('me.press-kits.create') }}" wire:navigate>
|
||||
{{ __('Erste Firma anlegen') }}
|
||||
</flux:button>
|
||||
</div>
|
||||
</x-slot:actions>
|
||||
<div class="mt-9 grid gap-3 w-full max-w-[560px]" style="grid-template-columns:repeat(3,1fr);">
|
||||
<div class="text-left px-3 py-2.5 rounded-[3px] border border-[color:var(--color-bg-rule)] bg-[color:var(--color-bg-elev)]">
|
||||
<div class="font-mono text-[9.5px] tracking-[0.16em] font-bold mb-1 text-[color:var(--color-accent-deep)]">01</div>
|
||||
|
|
@ -628,7 +627,7 @@ new #[Layout('components.layouts.app'), Title('Meine Firmen')] class extends Com
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</x-portal.empty-state>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
|
|
|
|||
|
|
@ -543,62 +543,60 @@ new #[Layout('components.layouts.app'), Title('Meine Pressemitteilungen')] class
|
|||
</div>
|
||||
@elseif ($hasAnyPR && $search !== '')
|
||||
{{-- Empty: Suche ohne Treffer --}}
|
||||
<div class="empty-stage">
|
||||
<div class="empty-ico">
|
||||
<x-portal.empty-state
|
||||
:title='__("Keine Treffer für „:term\"", ["term" => $search])'
|
||||
:subtitle="__('Wir konnten zu Ihrer Suche nichts finden. Prüfen Sie die Schreibweise oder schränken Sie den Suchbegriff ein.')"
|
||||
>
|
||||
<x-slot:icon>
|
||||
<svg width="28" height="28" viewBox="0 0 24 24" fill="none">
|
||||
<circle cx="10.5" cy="10.5" r="6" stroke="currentColor" stroke-width="1.6" />
|
||||
<path d="M15.5 15.5L20 20" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" />
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="empty-title">{{ __('Keine Treffer für „:term"', ['term' => $search]) }}</h3>
|
||||
<p class="empty-sub">
|
||||
{{ __('Wir konnten zu Ihrer Suche nichts finden. Prüfen Sie die Schreibweise oder schränken Sie den Suchbegriff ein.') }}
|
||||
</p>
|
||||
<div class="flex items-center gap-2.5 mt-6">
|
||||
</x-slot:icon>
|
||||
<x-slot:actions>
|
||||
<flux:button variant="primary" wire:click="$set('search', '')">
|
||||
{{ __('Suche zurücksetzen') }}
|
||||
</flux:button>
|
||||
</div>
|
||||
</div>
|
||||
</x-slot:actions>
|
||||
</x-portal.empty-state>
|
||||
@elseif ($hasAnyPR && $hasAnyFilter)
|
||||
{{-- Empty: Filter ohne Treffer --}}
|
||||
<div class="empty-stage">
|
||||
<div class="empty-ico warm">
|
||||
<x-portal.empty-state
|
||||
variant="warm"
|
||||
:title="__('Keine Mitteilungen mit diesen Filtern')"
|
||||
:subtitle="__('Aktive Filter passen auf keine Einträge. Setzen Sie einen Filter zurück oder probieren Sie eine breitere Auswahl.')"
|
||||
>
|
||||
<x-slot:icon>
|
||||
<svg width="28" height="28" viewBox="0 0 24 24" fill="none">
|
||||
<path d="M4 6h16M7 12h10M10 18h4" stroke="currentColor" stroke-width="1.8"
|
||||
stroke-linecap="round" />
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="empty-title">{{ __('Keine Mitteilungen mit diesen Filtern') }}</h3>
|
||||
<p class="empty-sub">
|
||||
{{ __('Aktive Filter passen auf keine Einträge. Setzen Sie einen Filter zurück oder probieren Sie eine breitere Auswahl.') }}
|
||||
</p>
|
||||
<div class="flex items-center gap-2.5 mt-6">
|
||||
</x-slot:icon>
|
||||
<x-slot:actions>
|
||||
<flux:button variant="primary" wire:click="resetFilters">{{ __('Alle Filter zurücksetzen') }}
|
||||
</flux:button>
|
||||
</div>
|
||||
</div>
|
||||
</x-slot:actions>
|
||||
</x-portal.empty-state>
|
||||
@else
|
||||
{{-- Empty: gar keine PMs überhaupt --}}
|
||||
<div class="empty-stage">
|
||||
<div class="empty-ico">
|
||||
<x-portal.empty-state
|
||||
:title="__('Noch keine Pressemitteilungen')"
|
||||
:subtitle="__('Starten Sie mit Ihrer ersten Mitteilung. Nach redaktioneller Prüfung erscheint sie i. d. R. binnen 4 Stunden werktags auf beiden Portalen.')"
|
||||
>
|
||||
<x-slot:icon>
|
||||
<svg width="28" height="28" viewBox="0 0 24 24" fill="none">
|
||||
<rect x="3" y="4" width="14" height="16" stroke="currentColor" stroke-width="1.5" />
|
||||
<path d="M17 7h4v13H6" stroke="currentColor" stroke-width="1.5" />
|
||||
<path d="M6 8h8M6 11h8M6 14h5" stroke="currentColor" stroke-width="1.3"
|
||||
stroke-linecap="round" />
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="empty-title">{{ __('Noch keine Pressemitteilungen') }}</h3>
|
||||
<p class="empty-sub">
|
||||
{{ __('Starten Sie mit Ihrer ersten Mitteilung. Nach redaktioneller Prüfung erscheint sie i. d. R. binnen 4 Stunden werktags auf beiden Portalen.') }}
|
||||
</p>
|
||||
<div class="flex items-center gap-2.5 mt-6">
|
||||
</x-slot:icon>
|
||||
<x-slot:actions>
|
||||
<flux:button variant="primary" icon="plus" href="{{ route('me.press-releases.create') }}"
|
||||
wire:navigate>
|
||||
{{ __('Erste Pressemitteilung erstellen') }}
|
||||
</flux:button>
|
||||
</div>
|
||||
</x-slot:actions>
|
||||
<div class="mt-9 grid gap-3 w-full max-w-[560px]" style="grid-template-columns:repeat(3,1fr);">
|
||||
<div
|
||||
class="text-left px-3 py-2.5 bg-[color:var(--color-bg-elev)] border border-[color:var(--color-bg-rule)] rounded-[3px]">
|
||||
|
|
@ -625,7 +623,7 @@ new #[Layout('components.layouts.app'), Title('Meine Pressemitteilungen')] class
|
|||
{{ __('Zur Prüfung senden') }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</x-portal.empty-state>
|
||||
|
||||
@endif
|
||||
</article>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue