5.4 (Teil 4): page-header size=lg-Variante + press-releases/* + companies/index
Component um size-Prop erweitert: md (30px, Standard) | lg (34px, Landing- Header). lg vergroessert zusaetzlich Beschreibung (13.5px) und Button-Abstand (gap-3) — exakt die bisherige Sonderoptik der Listen-Landing-Header. Umgestellt: - press-releases/create (md), press-releases/edit (md, Status-Badge + ID via :meta, 3 Aktionen inkl. Modal-Trigger) - press-releases/index (lg) und companies/index (lg) — Letzterer war zuvor bewusst ausgelassen, ist mit der lg-Variante jetzt originalgetreu abbildbar. Bewusst NICHT umgestellt: press-releases/show (zusaetzlicher Untertitel + mehrteilige Firma/Kategorie/Autor-Beschreibung, bleibt bespoke). md-Ausgabe unveraendert (nur Klassenreihenfolge). 321 Tests gruen. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
2a3b5612cb
commit
1eb2243959
5 changed files with 61 additions and 74 deletions
|
|
@ -10,10 +10,25 @@
|
|||
|
||||
/** Optionaler Beschreibungstext unter dem Titel */
|
||||
'description' => '',
|
||||
|
||||
/**
|
||||
* Titel-Größe: md (Standard, 30px) | lg (Landing/Hero-Listen, 34px).
|
||||
* lg vergrößert zusätzlich die Beschreibung und den Button-Abstand.
|
||||
*/
|
||||
'size' => 'md',
|
||||
])
|
||||
|
||||
@php
|
||||
$size = in_array($size, ['md', 'lg'], true) ? $size : 'md';
|
||||
$titleClass = $size === 'lg'
|
||||
? 'text-[34px] tracking-[-0.7px] leading-[1.1]'
|
||||
: 'text-[30px] tracking-[-0.6px] leading-[1.15]';
|
||||
$descriptionClass = $size === 'lg' ? 'text-[13.5px]' : 'text-[13px]';
|
||||
$actionsGap = $size === 'lg' ? 'gap-3' : 'gap-2';
|
||||
@endphp
|
||||
|
||||
{{--
|
||||
Einheitlicher Seitenkopf des Admin-Backends. Ersetzt den 35-fach kopierten
|
||||
Einheitlicher Seitenkopf des Admin-Backends. Ersetzt den vielfach kopierten
|
||||
page-header-Block. Variable Teile über Slots:
|
||||
<x-slot:meta> – zusätzliche Badges hinter dem Eyebrow (ID, Zähler …)
|
||||
<x-slot:actions> – Buttons rechts (Zurück, Speichern …)
|
||||
|
|
@ -32,19 +47,19 @@
|
|||
{{ $meta ?? '' }}
|
||||
</div>
|
||||
|
||||
<h1 class="text-[30px] font-bold tracking-[-0.6px] leading-[1.15] m-0 text-[color:var(--color-ink)] break-words">
|
||||
<h1 class="{{ $titleClass }} font-bold m-0 text-[color:var(--color-ink)] break-words">
|
||||
{{ $title }}
|
||||
</h1>
|
||||
|
||||
@if (filled($description))
|
||||
<p class="text-[13px] leading-[1.55] mt-2 m-0 max-w-[640px] text-[color:var(--color-ink-2)]">
|
||||
<p class="{{ $descriptionClass }} leading-[1.55] mt-2 m-0 max-w-[640px] text-[color:var(--color-ink-2)]">
|
||||
{{ $description }}
|
||||
</p>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
@isset($actions)
|
||||
<div class="flex items-center gap-2 flex-shrink-0">
|
||||
<div class="flex items-center {{ $actionsGap }} flex-shrink-0">
|
||||
{{ $actions }}
|
||||
</div>
|
||||
@endisset
|
||||
|
|
|
|||
|
|
@ -263,26 +263,19 @@ new #[Layout('components.layouts.app'), Title('Firmen')] class extends Component
|
|||
|
||||
<div class="space-y-8">
|
||||
{{-- ============== PAGE HEADER ============== --}}
|
||||
<header class="page-header">
|
||||
<div class="min-w-0">
|
||||
<div class="flex items-center gap-3 mb-3 flex-nowrap whitespace-nowrap">
|
||||
<span class="badge hub dot">{{ __('Admin Backend') }}</span>
|
||||
<span class="eyebrow muted">{{ __('Stammdaten · Firmen') }}</span>
|
||||
</div>
|
||||
<h1 class="text-[34px] font-bold tracking-[-0.7px] leading-[1.1] m-0 text-[color:var(--color-ink)]">
|
||||
{{ __('Firmen') }}
|
||||
</h1>
|
||||
<p class="text-[13.5px] leading-[1.55] mt-2 m-0 max-w-[640px] text-[color:var(--color-ink-2)]">
|
||||
{{ __('Übersicht aller Firmen beider Portale, mit Filter, Datenqualität und Schnellaktionen.') }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-3 flex-shrink-0">
|
||||
<x-portal.page-header
|
||||
size="lg"
|
||||
:badge="__('Admin Backend')"
|
||||
:eyebrow="__('Stammdaten · Firmen')"
|
||||
:title="__('Firmen')"
|
||||
:description="__('Übersicht aller Firmen beider Portale, mit Filter, Datenqualität und Schnellaktionen.')"
|
||||
>
|
||||
<x-slot:actions>
|
||||
<flux:button icon="plus" variant="primary" href="{{ route('admin.companies.create') }}" wire:navigate>
|
||||
{{ __('Neue Firma') }}
|
||||
</flux:button>
|
||||
</div>
|
||||
</header>
|
||||
</x-slot:actions>
|
||||
</x-portal.page-header>
|
||||
|
||||
{{-- ============== KPI-Reihe ============== --}}
|
||||
<section class="grid grid-cols-1 gap-4 sm:grid-cols-3">
|
||||
|
|
|
|||
|
|
@ -210,27 +210,19 @@ new #[Layout('components.layouts.app'), Title('Neue Pressemitteilung')] class ex
|
|||
|
||||
<div class="space-y-8 pr-editor-shell" x-data="{ tagInput: '' }">
|
||||
{{-- ============== PAGE HEADER ============== --}}
|
||||
<header class="page-header">
|
||||
<div class="min-w-0">
|
||||
<div class="flex items-center gap-3 mb-3 flex-nowrap whitespace-nowrap">
|
||||
<span class="badge hub dot">{{ __('Admin Backend') }}</span>
|
||||
<span class="eyebrow muted">{{ __('Content · Neu anlegen') }}</span>
|
||||
</div>
|
||||
<h1 class="text-[30px] font-bold tracking-[-0.6px] leading-[1.15] m-0 text-[color:var(--color-ink)]">
|
||||
{{ __('Neue Pressemitteilung') }}
|
||||
</h1>
|
||||
<p class="text-[13px] leading-[1.55] mt-2 m-0 max-w-[640px] text-[color:var(--color-ink-2)]">
|
||||
{{ __('Schreibfläche links, Steuerung rechts. Pflichtfelder werden rechts in der Checkliste angezeigt.') }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-2 flex-shrink-0">
|
||||
<x-portal.page-header
|
||||
:badge="__('Admin Backend')"
|
||||
:eyebrow="__('Content · Neu anlegen')"
|
||||
:title="__('Neue Pressemitteilung')"
|
||||
:description="__('Schreibfläche links, Steuerung rechts. Pflichtfelder werden rechts in der Checkliste angezeigt.')"
|
||||
>
|
||||
<x-slot:actions>
|
||||
<flux:button variant="filled" icon="arrow-left" href="{{ route('admin.press-releases.index') }}"
|
||||
wire:navigate>
|
||||
{{ __('Zurück') }}
|
||||
</flux:button>
|
||||
</div>
|
||||
</header>
|
||||
</x-slot:actions>
|
||||
</x-portal.page-header>
|
||||
|
||||
{{-- ============== 2-COLUMN GRID ============== --}}
|
||||
<div class="grid gap-6 pr-editor-layout">
|
||||
|
|
|
|||
|
|
@ -408,23 +408,17 @@ new #[Layout('components.layouts.app'), Title('Pressemitteilung bearbeiten')] cl
|
|||
{{-- Flash-Banner ersetzt durch <flux:toast /> im Layout. --}}
|
||||
|
||||
{{-- ============== PAGE HEADER ============== --}}
|
||||
<header class="page-header">
|
||||
<div class="min-w-0">
|
||||
<div class="flex items-center gap-3 mb-3 flex-wrap">
|
||||
<span class="badge hub dot">{{ __('Admin Backend') }}</span>
|
||||
<span class="eyebrow muted">{{ __('Content · Bearbeiten') }}</span>
|
||||
<span @class(['badge', $statusClass])>{{ $statusEnum?->label() ?? $currentStatus }}</span>
|
||||
<span class="badge hub">ID {{ $id }}</span>
|
||||
</div>
|
||||
<h1 class="text-[30px] font-bold tracking-[-0.6px] leading-[1.15] m-0 text-[color:var(--color-ink)]">
|
||||
{{ __('Pressemitteilung bearbeiten') }}
|
||||
</h1>
|
||||
<p class="text-[13px] leading-[1.55] mt-2 m-0 max-w-[640px] text-[color:var(--color-ink-2)]">
|
||||
{{ __('Schreibfläche links, Steuerung rechts. Status-Aktionen erscheinen oben in der Sidebar.') }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-2 flex-shrink-0">
|
||||
<x-portal.page-header
|
||||
:badge="__('Admin Backend')"
|
||||
:eyebrow="__('Content · Bearbeiten')"
|
||||
:title="__('Pressemitteilung bearbeiten')"
|
||||
:description="__('Schreibfläche links, Steuerung rechts. Status-Aktionen erscheinen oben in der Sidebar.')"
|
||||
>
|
||||
<x-slot:meta>
|
||||
<span @class(['badge', $statusClass])>{{ $statusEnum?->label() ?? $currentStatus }}</span>
|
||||
<span class="badge hub">ID {{ $id }}</span>
|
||||
</x-slot:meta>
|
||||
<x-slot:actions>
|
||||
<flux:modal.trigger name="admin-ki-check">
|
||||
<flux:button variant="filled" icon="sparkles">
|
||||
{{ __('Prüfung') }}
|
||||
|
|
@ -438,8 +432,8 @@ new #[Layout('components.layouts.app'), Title('Pressemitteilung bearbeiten')] cl
|
|||
wire:navigate>
|
||||
{{ __('Zur Liste') }}
|
||||
</flux:button>
|
||||
</div>
|
||||
</header>
|
||||
</x-slot:actions>
|
||||
</x-portal.page-header>
|
||||
|
||||
{{-- ============== KI-PRÜFUNG (On-Demand) ============== --}}
|
||||
<flux:modal name="admin-ki-check" class="w-full max-w-lg">
|
||||
|
|
|
|||
|
|
@ -378,26 +378,19 @@ new #[Layout('components.layouts.app'), Title('Pressemitteilungen')] class exten
|
|||
{{-- Flash-Banner ersetzt durch <flux:toast /> im Layout. --}}
|
||||
|
||||
{{-- ============== PAGE HEADER ============== --}}
|
||||
<header class="page-header">
|
||||
<div class="min-w-0">
|
||||
<div class="flex items-center gap-3 mb-3 flex-nowrap whitespace-nowrap">
|
||||
<span class="badge hub dot">{{ __('Admin Backend') }}</span>
|
||||
<span class="eyebrow muted">{{ __('Content · Pressemitteilungen') }}</span>
|
||||
</div>
|
||||
<h1 class="text-[34px] font-bold tracking-[-0.7px] leading-[1.1] m-0 text-[color:var(--color-ink)]">
|
||||
{{ __('Pressemitteilungen') }}
|
||||
</h1>
|
||||
<p class="text-[13.5px] leading-[1.55] mt-2 m-0 max-w-[640px] text-[color:var(--color-ink-2)]">
|
||||
{{ __('Übersicht aller PMs beider Portale, mit Filter, Status-Workflow und Schnellaktionen.') }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-3 flex-shrink-0">
|
||||
<x-portal.page-header
|
||||
size="lg"
|
||||
:badge="__('Admin Backend')"
|
||||
:eyebrow="__('Content · Pressemitteilungen')"
|
||||
:title="__('Pressemitteilungen')"
|
||||
:description="__('Übersicht aller PMs beider Portale, mit Filter, Status-Workflow und Schnellaktionen.')"
|
||||
>
|
||||
<x-slot:actions>
|
||||
<flux:button icon="plus" variant="primary" href="{{ route('admin.press-releases.create') }}" wire:navigate>
|
||||
{{ __('Neue PM') }}
|
||||
</flux:button>
|
||||
</div>
|
||||
</header>
|
||||
</x-slot:actions>
|
||||
</x-portal.page-header>
|
||||
|
||||
{{-- ============== KPI-Reihe ============== --}}
|
||||
<section class="grid gap-4 grid-cols-2 xl:grid-cols-4">
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue