livewire: Volt entfernt — Komponenten als Livewire-4-Single-File-Components, Route::livewire(), Livewire::test(); livewire/volt deinstalliert
Some checks are pending
linter / quality (push) Waiting to run
tests / ci (push) Waiting to run

- 83 Komponenten: Livewire\Volt\Component → Livewire\Component
- 73 Routen (admin, auth, customer): Volt::route() → Route::livewire()
- 88 Testdateien: Volt::test/actingAs → Livewire::test/actingAs
- VoltServiceProvider gelöscht; composer remove livewire/volt
- config/livewire.php auf v4-Schlüssel (component_layout, component_placeholder,
  component_locations, make_command: SFC ohne ⚡). Der alte Schlüssel layout war
  wirkungslos; alle gerouteten Komponenten setzen ihr Layout selbst.
- CLAUDE.md, AGENTS.md, boost.json, .cursorrules, Skill volt-development
- Roadmap: erledigt; Larastan erfasst SFCs weiterhin nicht (Blade-Dateien)

Suite 2.325 grün, einer übersprungen; Larastan und Pint ohne Meldung;
route:cache und view:cache laufen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-10-06 13:59:36 +00:00
parent 79bb6cf1d0
commit 31da9ea8b6
186 changed files with 889 additions and 1075 deletions

View file

@ -1,88 +0,0 @@
---
name: volt-development
description: "Develops single-file Livewire components with Volt. Activates when creating Volt components, converting Livewire to Volt, working with @volt directive, functional or class-based Volt APIs; or when the user mentions Volt, single-file components, functional Livewire, or inline component logic in Blade files."
license: MIT
metadata:
author: laravel
---
# Volt Development
## Documentation
Use `search-docs` for detailed Volt patterns and documentation.
## Basic Usage
Create components with `vendor/bin/sail artisan make:volt [name] [--test] [--pest]`.
Important: Check existing Volt components to determine if they use functional or class-based style before creating new ones.
### Functional Components
<!-- Volt Functional Component -->
```php
@@volt
<?php
use function Livewire\Volt\{state, computed};
state(['count' => 0]);
$increment = fn () => $this->count++;
$double = computed(fn () => $this->count * 2);
?>
<div>
<h1>Count: @{{ $count }} (Double: @{{ $this->double }})</h1>
<button wire:click="increment">+</button>
</div>
@@endvolt
```
### Class-Based Components
<!-- Volt Class-based Component -->
```php
use Livewire\Volt\Component;
new class extends Component {
public int $count = 0;
public function increment(): void
{
$this->count++;
}
} ?>
<div>
<h1>@{{ $count }}</h1>
<button wire:click="increment">+</button>
</div>
```
## Testing
Tests go in existing Volt test directory or `tests/Feature/Volt`:
<!-- Volt Test Example -->
```php
use Livewire\Volt\Volt;
test('counter increments', function () {
Volt::test('counter')
->assertSee('Count: 0')
->call('increment')
->assertSee('Count: 1');
});
```
## Verification
1. Check existing components for functional vs class-based style
2. Test component with `Volt::test()`
## Common Pitfalls
- Not checking existing style (functional vs class-based) before creating
- Forgetting `@volt` directive wrapper
- Missing `--test` or `--pest` flag when tests are needed

View file

@ -2,7 +2,7 @@
## Tech Stack & Paradigmen
- **Framework:** Laravel 12 (PHP 8.4+)
- **Frontend-Architektur:** Livewire Volt (ausschließlich Functional API).
- **Frontend-Architektur:** Livewire 4 Single-File-Components (klassenbasiert, `new class extends Livewire\Component`); Volt ist seit 06.10.2026 entfernt.
- **UI-Komponenten:** FluxUI (nutze `<flux:...>` statt Standard-Blade/HTML).
- **Styling:** Tailwind CSS (für Layout) & FluxUI (für Komponenten).
- **Backend:** Klassisches MVC für das Admin-System, Services für Business-Logik.

View file

@ -17,7 +17,6 @@ This application is a Laravel application and its main Laravel ecosystems packag
- livewire/flux (FLUXUI_FREE) - v2
- livewire/flux-pro (FLUXUI_PRO) - v2
- livewire/livewire (LIVEWIRE) - v4
- livewire/volt (VOLT) - v1
- larastan/larastan (LARASTAN) - v3
- laravel/boost (BOOST) - v2
- laravel/mcp (MCP) - v0
@ -36,7 +35,6 @@ This project has domain-specific skills available. You MUST activate the relevan
- `fortify-development` — ACTIVATE when the user works on authentication in Laravel. This includes login, registration, password reset, email verification, two-factor authentication (2FA/TOTP/QR codes/recovery codes), profile updates, password confirmation, or any auth-related routes and controllers. Activate when the user mentions Fortify, auth, authentication, login, register, signup, forgot password, verify email, 2FA, or references app/Actions/Fortify/, CreateNewUser, UpdateUserProfileInformation, FortifyServiceProvider, config/fortify.php, or auth guards. Fortify is the frontend-agnostic authentication backend for Laravel that registers all auth routes and controllers. Also activate when building SPA or headless authentication, customizing login redirects, overriding response contracts like LoginResponse, or configuring login throttling. Do NOT activate for Laravel Passport (OAuth2 API tokens), Socialite (OAuth social login), or non-auth Laravel features.
- `laravel-best-practices` — Apply this skill whenever writing, reviewing, or refactoring Laravel PHP code. This includes creating or modifying controllers, models, migrations, form requests, policies, jobs, scheduled commands, service classes, and Eloquent queries. Triggers for N+1 and query performance issues, caching strategies, authorization and security patterns, validation, error handling, queue and job configuration, route definitions, and architectural decisions. Also use for Laravel code reviews and refactoring existing Laravel code to follow best practices. Covers any task involving Laravel backend PHP code patterns.
- `fluxui-development` — Use this skill for Flux UI development in Livewire applications only. Trigger when working with <flux:*> components, building or customizing Livewire component UIs, creating forms, modals, tables, or other interactive elements. Covers: flux: components (buttons, inputs, modals, forms, tables, date-pickers, kanban, badges, tooltips, etc.), component composition, Tailwind CSS styling, Heroicons/Lucide icon integration, validation patterns, responsive design, and theming. Do not use for non-Livewire frameworks or non-component styling.
- `volt-development` — Develops single-file Livewire components with Volt. Activates when creating Volt components, converting Livewire to Volt, working with @volt directive, functional or class-based Volt APIs; or when the user mentions Volt, single-file components, functional Livewire, or inline component logic in Blade files.
- `pest-testing` — Use this skill for Pest PHP testing in Laravel projects only. Trigger whenever any test is being written, edited, fixed, or refactored — including fixing tests that broke after a code change, adding assertions, converting PHPUnit to Pest, adding datasets, and TDD workflows. Always activate when the user asks how to write something in Pest, mentions test files or directories (tests/Feature, tests/Unit) or architecture tests. Covers: test()/it()/expect() syntax, datasets, mocking, browser testing, arch(), Livewire component tests, RefreshDatabase, and all Pest 3 features. Do not use for editing factories, seeders, migrations, controllers, models, or non-test PHP code.
- `tailwindcss-development` — Always invoke when the user's message includes 'tailwind' in any form. Also invoke for: building responsive grid layouts (multi-column card grids, product grids), flex/grid page structures (dashboards with sidebars, fixed topbars, mobile-toggle navs), styling UI components (cards, tables, navbars, pricing sections, forms, inputs, badges), adding dark mode variants, fixing spacing or typography, and Tailwind v3/v4 work. The core use case: writing or fixing Tailwind utility classes in HTML templates (Blade, JSX, Vue). Skip for backend PHP logic, database queries, API routes, JavaScript with no HTML/CSS component, CSS file audits, build tool configuration, and vanilla CSS.
@ -199,15 +197,6 @@ This project has domain-specific skills available. You MUST activate the relevan
- Casts can and likely should be set in a `casts()` method on a model rather than the `$casts` property. Follow existing conventions from other models.
=== volt/core rules ===
# Livewire Volt
- Single-file Livewire components: PHP logic and Blade templates in one file.
- Always check existing Volt components to determine functional vs class-based style.
- IMPORTANT: Always use `search-docs` tool for version-specific Volt documentation and updated code examples.
- IMPORTANT: Activate `volt-development` every time you're working with a Volt or single-file component-related task.
=== pint/core rules ===
# Laravel Pint Code Formatter

View file

@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
## Project Overview
This is a multi-domain Laravel application ("Pressekonto") that supports different domains with distinct themes and styling. The application uses Laravel with Livewire, Volt, and Fortify for authentication, along with Flux UI components.
This is a multi-domain Laravel application ("Pressekonto") that supports different domains with distinct themes and styling. The application uses Laravel with Livewire 4 (single-file components) and Fortify for authentication, along with Flux UI components.
### Supported Domains
@ -85,7 +85,7 @@ The application uses a sophisticated domain-based theme system that determines s
- Settings components in `resources/views/livewire/settings/` (profile, password, appearance)
- Admin components in `resources/views/livewire/admin/` (users management)
- Web components in `resources/views/livewire/web/` (frontend features)
- **Volt Components**: Single-file Livewire components using functional API for rapid development
- **Single-file components (Livewire 4)**: PHP class (`new class extends Livewire\Component`) and Blade template in one file under `resources/views/livewire/`; the name follows the path (`admin/users/index.blade.php` → `admin.users.index`). Full-page routes use `Route::livewire()`, tests `Livewire::test()`. Volt was removed on 06.10.2026 — do not reintroduce it.
- **Flux UI**: Premium UI component library for consistent design (Portal only)
- **Multi-Build System**: Separate Vite configurations for different asset bundles
@ -232,7 +232,6 @@ This application is a Laravel application and its main Laravel ecosystems packag
- livewire/flux (FLUXUI_FREE) - v2
- livewire/flux-pro (FLUXUI_PRO) - v2
- livewire/livewire (LIVEWIRE) - v4
- livewire/volt (VOLT) - v1
- larastan/larastan (LARASTAN) - v3
- laravel/boost (BOOST) - v2
- laravel/mcp (MCP) - v0
@ -251,7 +250,6 @@ This project has domain-specific skills available. You MUST activate the relevan
- `fortify-development` — ACTIVATE when the user works on authentication in Laravel. This includes login, registration, password reset, email verification, two-factor authentication (2FA/TOTP/QR codes/recovery codes), profile updates, password confirmation, or any auth-related routes and controllers. Activate when the user mentions Fortify, auth, authentication, login, register, signup, forgot password, verify email, 2FA, or references app/Actions/Fortify/, CreateNewUser, UpdateUserProfileInformation, FortifyServiceProvider, config/fortify.php, or auth guards. Fortify is the frontend-agnostic authentication backend for Laravel that registers all auth routes and controllers. Also activate when building SPA or headless authentication, customizing login redirects, overriding response contracts like LoginResponse, or configuring login throttling. Do NOT activate for Laravel Passport (OAuth2 API tokens), Socialite (OAuth social login), or non-auth Laravel features.
- `laravel-best-practices` — Apply this skill whenever writing, reviewing, or refactoring Laravel PHP code. This includes creating or modifying controllers, models, migrations, form requests, policies, jobs, scheduled commands, service classes, and Eloquent queries. Triggers for N+1 and query performance issues, caching strategies, authorization and security patterns, validation, error handling, queue and job configuration, route definitions, and architectural decisions. Also use for Laravel code reviews and refactoring existing Laravel code to follow best practices. Covers any task involving Laravel backend PHP code patterns.
- `fluxui-development` — Use this skill for Flux UI development in Livewire applications only. Trigger when working with <flux:*> components, building or customizing Livewire component UIs, creating forms, modals, tables, or other interactive elements. Covers: flux: components (buttons, inputs, modals, forms, tables, date-pickers, kanban, badges, tooltips, etc.), component composition, Tailwind CSS styling, Heroicons/Lucide icon integration, validation patterns, responsive design, and theming. Do not use for non-Livewire frameworks or non-component styling.
- `volt-development` — Develops single-file Livewire components with Volt. Activates when creating Volt components, converting Livewire to Volt, working with @volt directive, functional or class-based Volt APIs; or when the user mentions Volt, single-file components, functional Livewire, or inline component logic in Blade files.
- `pest-testing` — Use this skill for Pest PHP testing in Laravel projects only. Trigger whenever any test is being written, edited, fixed, or refactored — including fixing tests that broke after a code change, adding assertions, converting PHPUnit to Pest, adding datasets, and TDD workflows. Always activate when the user asks how to write something in Pest, mentions test files or directories (tests/Feature, tests/Unit) or architecture tests. Covers: test()/it()/expect() syntax, datasets, mocking, browser testing, arch(), Livewire component tests, RefreshDatabase, and all Pest 3 features. Do not use for editing factories, seeders, migrations, controllers, models, or non-test PHP code.
- `tailwindcss-development` — Always invoke when the user's message includes 'tailwind' in any form. Also invoke for: building responsive grid layouts (multi-column card grids, product grids), flex/grid page structures (dashboards with sidebars, fixed topbars, mobile-toggle navs), styling UI components (cards, tables, navbars, pricing sections, forms, inputs, badges), adding dark mode variants, fixing spacing or typography, and Tailwind v3/v4 work. The core use case: writing or fixing Tailwind utility classes in HTML templates (Blade, JSX, Vue). Skip for backend PHP logic, database queries, API routes, JavaScript with no HTML/CSS component, CSS file audits, build tool configuration, and vanilla CSS.
@ -414,15 +412,6 @@ This project has domain-specific skills available. You MUST activate the relevan
- Casts can and likely should be set in a `casts()` method on a model rather than the `$casts` property. Follow existing conventions from other models.
=== volt/core rules ===
# Livewire Volt
- Single-file Livewire components: PHP logic and Blade templates in one file.
- Always check existing Volt components to determine functional vs class-based style.
- IMPORTANT: Always use `search-docs` tool for version-specific Volt documentation and updated code examples.
- IMPORTANT: Activate `volt-development` every time you're working with a Volt or single-file component-related task.
=== pint/core rules ===
# Laravel Pint Code Formatter

View file

@ -17,7 +17,6 @@ use Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse;
use Laravel\Fortify\Contracts\LoginResponse;
use Laravel\Fortify\Contracts\TwoFactorLoginResponse;
use Laravel\Fortify\Fortify;
use Livewire\Volt\Volt;
class FortifyServiceProvider extends ServiceProvider
{
@ -29,7 +28,7 @@ class FortifyServiceProvider extends ServiceProvider
$this->app->singleton(LoginResponse::class, RoleAwareLoginResponse::class);
$this->app->singleton(TwoFactorLoginResponse::class, RoleAwareLoginResponse::class);
// Fortifys Default leitet auf die nicht registrierte Route
// `two-factor.login` (views => false) – zurück zur Volt-Challenge.
// `two-factor.login` (views => false) – zurück zur Livewire-Challenge.
$this->app->singleton(FailedTwoFactorLoginResponse::class, FailedTwoFactorChallengeResponse::class);
}
@ -44,7 +43,7 @@ class FortifyServiceProvider extends ServiceProvider
Fortify::resetUserPasswordsUsing(ResetUserPassword::class);
Fortify::redirectUserForTwoFactorAuthenticationUsing(RedirectIfTwoFactorAuthenticatable::class);
// Keine View-Definitionen, da wir Volt verwenden
// Keine View-Definitionen, die Auth-Seiten sind Livewire-Komponenten
RateLimiter::for('login', function (Request $request) {
$throttleKey = Str::transliterate(Str::lower($request->input(Fortify::username())).'|'.$request->ip());

View file

@ -1,28 +0,0 @@
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Livewire\Volt\Volt;
class VoltServiceProvider extends ServiceProvider
{
/**
* Register services.
*/
public function register(): void
{
//
}
/**
* Bootstrap services.
*/
public function boot(): void
{
Volt::mount([
config('livewire.view_path', resource_path('views/livewire')),
resource_path('views/pages'),
]);
}
}

View file

@ -12,7 +12,6 @@
"fortify-development",
"laravel-best-practices",
"fluxui-development",
"volt-development",
"pest-testing",
"tailwindcss-development"
]

View file

@ -3,7 +3,6 @@
use App\Providers\AppServiceProvider;
use App\Providers\FortifyServiceProvider;
use App\Providers\ThemeServiceProvider;
use App\Providers\VoltServiceProvider;
use Barryvdh\Debugbar\ServiceProvider;
use FluxPro\FluxProServiceProvider;
@ -11,7 +10,6 @@ return [
AppServiceProvider::class,
ThemeServiceProvider::class,
FortifyServiceProvider::class,
VoltServiceProvider::class,
FluxProServiceProvider::class,
ServiceProvider::class,
];

View file

@ -19,7 +19,6 @@
"laravel/tinker": "^2.10.1",
"livewire/flux": "^2.1.1",
"livewire/flux-pro": "^2.1",
"livewire/volt": "^1.7.0",
"mews/purifier": "^3.4",
"sentry/sentry-laravel": "^4.28",
"spatie/laravel-permission": "^6.17",

73
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "ea2446398f933fba3c1e67a0ea180364",
"content-hash": "62e8b30de10f89b16d0d1b2c6ba68d9b",
"packages": [
{
"name": "bacon/bacon-qr-code",
@ -3173,77 +3173,6 @@
],
"time": "2026-09-28T18:12:51+00:00"
},
{
"name": "livewire/volt",
"version": "v1.11.2",
"source": {
"type": "git",
"url": "https://github.com/livewire/volt.git",
"reference": "1e46197d615bcd395ae87784fd8d25077782043d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/livewire/volt/zipball/1e46197d615bcd395ae87784fd8d25077782043d",
"reference": "1e46197d615bcd395ae87784fd8d25077782043d",
"shasum": ""
},
"require": {
"laravel/framework": "^10.38.2|^11.0|^12.0|^13.0",
"livewire/livewire": "^3.6.1|^4.0",
"php": "^8.1"
},
"require-dev": {
"laravel/folio": "^1.1",
"orchestra/testbench": "^8.36|^9.15|^10.8|^11.0",
"pestphp/pest": "^2.9.5|^3.0|^4.0",
"phpstan/phpstan": "^1.10|^2.1"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Livewire\\Volt\\VoltServiceProvider"
]
},
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"files": [
"functions.php"
],
"psr-4": {
"Livewire\\Volt\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Taylor Otwell",
"email": "taylor@laravel.com"
},
{
"name": "Nuno Maduro",
"email": "nuno@laravel.com"
}
],
"description": "An elegantly crafted functional API for Laravel Livewire.",
"homepage": "https://github.com/livewire/volt",
"keywords": [
"laravel",
"livewire",
"volt"
],
"support": {
"issues": "https://github.com/livewire/volt/issues",
"source": "https://github.com/livewire/volt"
},
"time": "2026-07-31T16:13:54+00:00"
},
{
"name": "mews/purifier",
"version": "3.4.4",

View file

@ -38,7 +38,38 @@ return [
|
*/
'layout' => 'components.layouts.app',
'component_layout' => 'components.layouts.app',
/*
|---------------------------------------------------------------------------
| Component Locations
|---------------------------------------------------------------------------
|
| Verzeichnisse für Single-File-Komponenten (seit Livewire 4; vorher hat
| Volt resources/views/livewire eingebunden). Komponentennamen ergeben sich
| aus dem Pfad: admin/users/index.blade.php → 'admin.users.index'.
|
*/
'component_locations' => [
resource_path('views/components'),
resource_path('views/livewire'),
],
/*
|---------------------------------------------------------------------------
| Make Command
|---------------------------------------------------------------------------
|
| php artisan make:livewire legt Single-File-Komponenten an, ohne
| ⚡-Präfix im Dateinamen — wie die bestehenden Komponenten.
|
*/
'make_command' => [
'type' => 'sfc',
'emoji' => false,
],
/*
|---------------------------------------------------------------------------
@ -50,7 +81,7 @@ return [
|
*/
'lazy_placeholder' => null,
'component_placeholder' => null,
/*
|---------------------------------------------------------------------------

View file

@ -47,26 +47,26 @@ Phasen im Archiv (`dev/archive/`).
## Nächste Entwicklungen / Optimierungen (Ideen-Backlog)
- [ ] **Volt entfernen, auf Livewire-4-Single-File-Components umstellen**
(Betreiber, 05.10.2026). Seit Livewire 4 sind Single-File-Components
eingebaut, mit derselben Syntax wie Volts Klassenkomponenten — Volt
ist damit überflüssig. Umfang (Stand v1.1.0): 83 Komponenten unter
`resources/views/livewire` (nur klassenbasiert, keine funktionale
Volt-API, kein `@volt`), 73 `Volt::route()`, 549 `Volt::test()` in 80
Testdateien. Schritte nach dem offiziellen Upgrade-Leitfaden
(livewire.laravel.com/docs/4.x/upgrading, „Upgrading Volt“):
`Livewire\Volt\Component` → `Livewire\Component`; `Volt::route()` →
`Route::livewire()`; `Volt::test()`/`LivewireVolt::test()` →
`Livewire::test()`; `VoltServiceProvider` löschen und aus
`bootstrap/providers.php` nehmen; `composer remove livewire/volt`.
Livewire 4 findet `resources/views/livewire` standardmäßig
(`component_locations`); `config/livewire.php` stammt noch aus v3 und
sollte bei der Gelegenheit abgeglichen werden. Danach CLAUDE.md und
die Boost-Richtlinien (Volt-Abschnitt, Skill `volt-development`)
anpassen und prüfen, ob Larastan die Komponenten jetzt erfasst
(offener Punkt aus dem Umsetzungsaudit 02.10., 5.6). Mechanische
Umstellung, aber großflächig — als eigener Branch mit voller Suite,
nicht nebenbei in einem Fach-Block.
- [x] **Volt entfernen, auf Livewire-4-Single-File-Components umstellen**
— **erledigt 06.10.2026** (Branch `technik/volt-entfernen`). 83
Komponenten auf `Livewire\Component`, 73 Routen auf
`Route::livewire()`, 88 Testdateien auf `Livewire::test()`/
`Livewire::actingAs()`; `VoltServiceProvider` gelöscht,
`livewire/volt` entfernt (sonst keine Paketänderung).
`config/livewire.php` auf v4-Schlüssel: `component_layout`,
`component_placeholder`, `component_locations`, `make_command` (SFC
ohne ⚡). Befund dabei: Der alte Schlüssel `layout` war wirkungslos,
Livewire 4 legte seinen Standard `layouts::app` darüber; alle 73
gerouteten Komponenten setzen ihr Layout aber selbst. CLAUDE.md,
AGENTS.md, `boost.json`, `.cursorrules` und der Skill
`volt-development` angepasst bzw. entfernt (von Hand —
`boost:update` hätte nebenbei alle Skills auf eine neue
Boost-Fassung gehoben, das ist ein eigener Schritt). Suite 2.325
grün, einer übersprungen; Larastan und Pint ohne Meldung.
**Larastan erfasst die Komponenten weiterhin nicht**: Es analysiert
nur `.php`-Dateien, Single-File-Komponenten sind Blade-Dateien.
Abhilfe wäre die Umwandlung einzelner großer Komponenten in
Klassen-Komponenten (`php artisan livewire:convert`), kein Muss.
- [ ] Frontend-Audit-Reste aus `dev/archive/frontend-audits/
frontend-optimize-protokoll.md` sichten — P2/P3-Punkte, die bewusst

View file

@ -7,7 +7,7 @@ use Flux\Flux;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Url;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
/**

View file

@ -8,7 +8,7 @@ use Illuminate\Support\Facades\DB;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Validate;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Kategorie anlegen')] class extends Component
{

View file

@ -10,7 +10,7 @@ use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Title;
use Livewire\Attributes\Validate;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Kategorie bearbeiten')] class extends Component
{

View file

@ -7,7 +7,7 @@ use App\Services\Admin\AdminPerformanceCache;
use App\Services\CurrentPortalContext;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
new #[Layout('components.layouts.app'), Title('Kategorien')] class extends Component

View file

@ -8,7 +8,7 @@ use Illuminate\Support\Str;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Validate;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithFileUploads;
new #[Layout('components.layouts.app'), Title('Neue Firma')] class extends Component

View file

@ -10,7 +10,7 @@ use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Title;
use Livewire\Attributes\Validate;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithFileUploads;
new #[Layout('components.layouts.app'), Title('Firma bearbeiten')] class extends Component

View file

@ -10,7 +10,7 @@ use App\Services\CurrentPortalContext;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Url;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
new #[Layout('components.layouts.app'), Title('Firmen')] class extends Component

View file

@ -4,7 +4,7 @@ use App\Models\Company;
use App\Models\Contact;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Firma anzeigen')] class extends Component
{

View file

@ -6,7 +6,7 @@ use App\Models\ContactMessage;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Url;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
new #[Layout('components.layouts.app'), Title('Kontakt')] class extends Component

View file

@ -5,7 +5,7 @@ use App\Models\ContactMessage;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Anliegen · Kontakt')] class extends Component
{

View file

@ -6,7 +6,7 @@ use App\Models\Contact;
use Illuminate\Validation\Rule;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Kontakt anlegen')] class extends Component
{

View file

@ -7,7 +7,7 @@ use Illuminate\Validation\Rule;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Kontakt bearbeiten')] class extends Component
{

View file

@ -11,7 +11,7 @@ use Illuminate\Validation\Rule;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Url;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
new #[Layout('components.layouts.app'), Title('Kontakte')] class extends Component

View file

@ -2,7 +2,7 @@
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Gutscheine')] class extends Component
{

View file

@ -7,7 +7,7 @@ use Illuminate\Support\Facades\DB;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Validate;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Footer-Code anlegen')] class extends Component
{

View file

@ -7,7 +7,7 @@ use Illuminate\Support\Facades\DB;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Validate;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Footer-Code bearbeiten')] class extends Component
{

View file

@ -4,7 +4,7 @@ use App\Enums\Portal;
use App\Models\FooterCode;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
new #[Layout('components.layouts.app'), Title('Footer-Codes')] class extends Component

View file

@ -7,7 +7,7 @@ use App\Scopes\PortalScope;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Url;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
/**

View file

@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\Schema;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
new #[Layout('components.layouts.app'), Title('Legacy Rechnungen')] class extends Component

View file

@ -8,7 +8,7 @@ use App\Models\WithdrawalRequest;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Url;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
new #[Layout('components.layouts.app'), Title('Recht & Compliance')] class extends Component

View file

@ -11,7 +11,7 @@ use Illuminate\Support\Facades\Mail;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Anfrage · Recht & Compliance')] class extends Component
{

View file

@ -11,7 +11,7 @@ use Illuminate\Validation\Rule;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Url;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
/**

View file

@ -11,7 +11,7 @@ use Illuminate\Support\Facades\Mail;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Mews\Purifier\Facades\Purifier;
/*

View file

@ -3,7 +3,7 @@
use App\Models\NewsletterCampaign;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
new #[Layout('components.layouts.app'), Title('Newsletter')] class extends Component

View file

@ -6,7 +6,7 @@ use App\Services\Newsletter\CampaignRecipients;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
/*

View file

@ -5,7 +5,7 @@ use App\Services\Admin\AdminPerformanceCache;
use App\Services\Newsletter\NewsletterSyncService;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Newsletter Sync')] class extends Component
{

View file

@ -4,7 +4,7 @@ use App\Enums\EmailNotificationType;
use App\Models\EmailNotificationOptOut;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
/*

View file

@ -17,7 +17,7 @@ use Illuminate\Support\Carbon;
use Laravel\Cashier\Subscription;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
new #[Layout('components.layouts.app'), Title('Zahlungen')] class extends Component

View file

@ -5,7 +5,7 @@ use App\Services\Billing\StripePlanSyncService;
use Flux\Flux;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Tarife & Pakete')] class extends Component
{

View file

@ -1,7 +1,7 @@
<?php
use App\Enums\Portal;
use Livewire\Volt\Component;
use Livewire\Component;
new class extends Component
{

View file

@ -4,7 +4,7 @@ use App\Models\AdminPreset;
use Illuminate\Validation\Rule;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Neue Voreinstellung')] class extends Component
{

View file

@ -5,7 +5,7 @@ use Illuminate\Validation\Rule;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Voreinstellung bearbeiten')] class extends Component
{

View file

@ -4,7 +4,7 @@ use App\Models\AdminPreset;
use App\Services\Admin\AdminPerformanceCache;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
new #[Layout('components.layouts.app'), Title('Voreinstellungen')] class extends Component

View file

@ -15,7 +15,7 @@ use Illuminate\Validation\Rule;
use Livewire\Attributes\Computed;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Neue Pressemitteilung')] class extends Component {
use \App\Livewire\Concerns\InteractsWithPressReleaseContacts;

View file

@ -21,7 +21,7 @@ use Livewire\Attributes\Computed;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Pressemitteilung bearbeiten')] class extends Component {
use \App\Livewire\Concerns\HandlesAdminPressReleaseActions;

View file

@ -22,7 +22,7 @@ use Flux\Flux;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Url;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
new #[Layout('components.layouts.app'), Title('Pressemitteilungen')] class extends Component

View file

@ -14,7 +14,7 @@ use Flux\Flux;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Pressemitteilung')] class extends Component
{

View file

@ -4,7 +4,7 @@ use App\Enums\ActivityType;
use App\Models\ActivityEvent;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
new #[Layout('components.layouts.app'), Title('Verlauf')] class extends Component

View file

@ -10,7 +10,7 @@ use App\Services\SearchConsole\SearchConsoleClient;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Url;
use Livewire\Volt\Component;
use Livewire\Component;
use Symfony\Component\HttpFoundation\StreamedResponse;
/**

View file

@ -3,7 +3,7 @@
use App\Services\Admin\AdminSlowRequestReporter;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Performance Reports')] class extends Component
{

View file

@ -6,7 +6,7 @@ use Livewire\Attributes\Computed;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Url;
use Livewire\Volt\Component;
use Livewire\Component;
use Symfony\Component\HttpFoundation\StreamedResponse;
/**

View file

@ -3,7 +3,7 @@
use App\Services\Admin\AdminSystemHealth;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Betriebsüberwachung')] class extends Component
{

View file

@ -7,7 +7,7 @@ use Illuminate\Support\Str;
use Illuminate\Validation\Rule;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;

View file

@ -8,7 +8,7 @@ use Illuminate\Validation\Rule;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;

View file

@ -2,7 +2,7 @@
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Spatie\Permission\Models\Role;
new #[Layout('components.layouts.app'), Title('Rollen & Rechte')] class extends Component

View file

@ -10,7 +10,7 @@ use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\Auth;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
use Spatie\Permission\Models\Role;

View file

@ -8,7 +8,7 @@ use App\Services\Admin\AdminPerformanceCache;
use Illuminate\Database\Eloquent\Collection;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Spatie\Permission\Models\Role;
new #[Layout('components.layouts.app'), Title('Benutzer anlegen')] class extends Component

View file

@ -11,7 +11,7 @@ use Illuminate\Validation\Rule;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Spatie\Permission\Models\Role;
new #[Layout('components.layouts.app'), Title('Benutzer bearbeiten')] class extends Component

View file

@ -7,7 +7,7 @@ use Flux\Flux;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Benutzer anzeigen')] class extends Component
{

View file

@ -3,7 +3,7 @@
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\ValidationException;
use Livewire\Attributes\Layout;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Passwort bestätigen', 'eyebrow' => 'Sicherheitsbereich', 'showFromBanner' => false])] class extends Component {
public string $password = '';

View file

@ -5,7 +5,7 @@ use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException;
use Livewire\Attributes\Layout;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Passwort vergessen', 'eyebrow' => 'Passwort zurücksetzen', 'topRightLabel' => 'Doch erinnert?', 'topRightLinkText' => 'Zur Anmeldung', 'topRightLinkHref' => '/login'])] class extends Component {
public string $email = '';

View file

@ -13,7 +13,7 @@ use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Validate;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Willkommen zurück', 'eyebrow' => 'Anmeldung im Publisher-Hub', 'topRightLabel' => 'Noch kein Konto?', 'topRightLinkText' => 'Konto erstellen', 'topRightLinkHref' => '/register'])] class extends Component {
#[Validate('required|string|email')]

View file

@ -6,7 +6,7 @@ use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Validate;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Anmeldung per E-Mail-Link', 'eyebrow' => 'Ohne Passwort anmelden', 'topRightLabel' => 'Lieber mit Passwort?', 'topRightLinkText' => 'Anmelden', 'topRightLinkHref' => '/login'])] class extends Component {
#[Validate('required|string|email')]

View file

@ -9,7 +9,7 @@ use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Validation\Rules;
use Illuminate\Validation\ValidationException;
use Livewire\Attributes\Layout;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Konto erstellen', 'eyebrow' => 'Registrierung im Publisher-Hub', 'topRightLabel' => 'Bereits Konto?', 'topRightLinkText' => 'Anmelden', 'topRightLinkHref' => '/login'])] class extends Component {
public string $name = '';

View file

@ -8,7 +8,7 @@ use Illuminate\Support\Str;
use Illuminate\Validation\Rules;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Neues Passwort vergeben', 'eyebrow' => 'Passwort zurücksetzen'])] class extends Component {
#[Locked]

View file

@ -1,7 +1,7 @@
<?php
use Livewire\Attributes\Layout;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Zwei-Faktor-Bestätigung', 'eyebrow' => 'Sicherheitsprüfung', 'showFromBanner' => false])] class extends Component {
public function mount(): void

View file

@ -3,7 +3,7 @@
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
use Livewire\Attributes\Layout;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Danke für Ihre Registrierung', 'eyebrow' => 'Nur noch ein Schritt', 'showFromBanner' => false])] class extends Component {
/**

View file

@ -7,7 +7,7 @@ use App\Services\PressRelease\PressReleaseAttachmentStorage;
use App\Scopes\PortalScope;
use Flux\Flux;
use Livewire\Attributes\Locked;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithFileUploads;
/**

View file

@ -19,7 +19,7 @@ use App\Services\PressRelease\Images\PressReleaseImageUploader;
use Flux\Flux;
use Illuminate\Validation\Rule;
use Livewire\Attributes\Locked;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithFileUploads;
/**

View file

@ -10,7 +10,7 @@ use App\Scopes\PortalScope;
use Flux\Flux;
use Illuminate\Validation\Rule;
use Livewire\Attributes\Locked;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithFileUploads;
/**

View file

@ -2,7 +2,7 @@
use App\Enums\PressReleasePlaceholder;
use Flux\Flux;
use Livewire\Volt\Component;
use Livewire\Component;
/**
* Auswahl-Modal für die SVG-Titelbild-Platzhalter.

View file

@ -20,7 +20,7 @@ use App\Services\Billing\VatResolver;
use Flux\Flux;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
/**
* Buchungen & Add-ons (Phase 9F): Tarif-Raster mit Stripe-Checkout,

View file

@ -1,7 +1,7 @@
<?php
use App\Services\Customer\CustomerCompanyContext;
use Livewire\Volt\Component;
use Livewire\Component;
new class extends Component
{

View file

@ -13,7 +13,7 @@ use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Mein Dashboard')] class extends Component {
public function with(): array

View file

@ -5,7 +5,7 @@ use App\Models\Invoice;
use App\Models\LegacyInvoice;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
new #[Layout('components.layouts.app'), Title('Rechnungen')] class extends Component

View file

@ -9,7 +9,7 @@ use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Neue Firma anlegen')] class extends Component
{

View file

@ -10,7 +10,7 @@ use Illuminate\Support\Facades\DB;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Url;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
new #[Layout('components.layouts.app'), Title('Meine Firmen')] class extends Component

View file

@ -16,7 +16,7 @@ use Illuminate\Validation\ValidationException;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithFileUploads;
new #[Layout('components.layouts.app'), Title('Firma')] class extends Component {

View file

@ -20,7 +20,7 @@ use Livewire\Attributes\Computed;
use Livewire\Attributes\Layout;
use Livewire\Attributes\On;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Neue Pressemitteilung')] class extends Component
{

View file

@ -22,7 +22,7 @@ use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Attributes\On;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Pressemitteilung bearbeiten')] class extends Component
{

View file

@ -16,7 +16,7 @@ use Illuminate\Support\Facades\DB;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Url;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
new #[Layout('components.layouts.app'), Title('Meine Pressemitteilungen')] class extends Component {

View file

@ -32,7 +32,7 @@ use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Title;
use Livewire\Attributes\Url;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Pressemitteilung')] class extends Component
{

View file

@ -7,7 +7,7 @@ use App\Services\Billing\VatIdValidationService;
use Illuminate\Validation\Rule;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Mein Profil')] class extends Component
{

View file

@ -21,7 +21,7 @@ use Laravel\Fortify\TwoFactorAuthenticationProvider;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('Konto-Sicherheit')] class extends Component
{

View file

@ -5,7 +5,7 @@ use App\Services\Api\ApiAccessEligibilityService;
use Illuminate\Validation\Rule;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app'), Title('API-Tokens')] class extends Component
{

View file

@ -1,6 +1,6 @@
<?php
use Livewire\Volt\Component;
use Livewire\Component;
new class extends Component {
public bool $notifications = false;

View file

@ -1,7 +1,7 @@
<?php
use Livewire\Attributes\Layout;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app')] class extends Component
{

View file

@ -2,7 +2,7 @@
use App\Livewire\Actions\Logout;
use Illuminate\Support\Facades\Auth;
use Livewire\Volt\Component;
use Livewire\Component;
new class extends Component
{

View file

@ -5,7 +5,7 @@ use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules\Password;
use Illuminate\Validation\ValidationException;
use Livewire\Attributes\Layout;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app')] class extends Component
{

View file

@ -5,7 +5,7 @@ use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
use Illuminate\Validation\Rule;
use Livewire\Attributes\Layout;
use Livewire\Volt\Component;
use Livewire\Component;
new #[Layout('components.layouts.app')] class extends Component
{

View file

@ -1,6 +1,6 @@
<?php
use Livewire\Volt\Component;
use Livewire\Component;
new class extends Component {
public $timeframe = '7';

View file

@ -10,7 +10,7 @@ use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Carbon;
use Livewire\Attributes\Locked;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
new class extends Component

View file

@ -9,7 +9,7 @@ use Illuminate\Database\Eloquent\Builder;
use Illuminate\Pagination\LengthAwarePaginator;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Url;
use Livewire\Volt\Component;
use Livewire\Component;
use Livewire\WithPagination;
new class extends Component

View file

@ -10,7 +10,6 @@ use App\Http\Middleware\BlockAdminDuringImpersonation;
use App\Http\Middleware\EnsureUserIsAdmin;
use App\Http\Middleware\LogSlowAdminRequests;
use Illuminate\Support\Facades\Route;
use Livewire\Volt\Volt;
// Hinweis: Die Root-Route (`/`) auf der Portal-Domain rendert seit dem
// Hub-Launch die öffentliche Publisher-Landing (web/pressekonto.blade.php).
@ -26,8 +25,8 @@ Route::get('dashboard', DashboardController::class)
Route::middleware(['auth', 'verified'])->group(function () {
Route::redirect('settings', '/admin/me/profile');
Route::redirect('settings/profile', '/admin/me/profile')->name('settings.profile');
Volt::route('settings/password', 'settings.password')->name('settings.password');
Volt::route('settings/appearance', 'settings.appearance')->name('settings.appearance');
Route::livewire('settings/password', 'settings.password')->name('settings.password');
Route::livewire('settings/appearance', 'settings.appearance')->name('settings.appearance');
});
Route::post('admin/impersonate/leave', LeaveImpersonationController::class)
@ -40,10 +39,10 @@ Route::post('admin/impersonate/leave', LeaveImpersonationController::class)
Route::middleware(['auth', 'verified', BlockAdminDuringImpersonation::class, EnsureUserIsAdmin::class, LogSlowAdminRequests::class])->group(function () {
// Content Management
Volt::route('admin/press-releases', 'admin.press-releases.index')->name('admin.press-releases.index');
Volt::route('admin/press-releases/create', 'admin.press-releases.create')->name('admin.press-releases.create');
Volt::route('admin/press-releases/{id}', 'admin.press-releases.show')->name('admin.press-releases.show');
Volt::route('admin/press-releases/{id}/edit', 'admin.press-releases.edit')->name('admin.press-releases.edit');
Route::livewire('admin/press-releases', 'admin.press-releases.index')->name('admin.press-releases.index');
Route::livewire('admin/press-releases/create', 'admin.press-releases.create')->name('admin.press-releases.create');
Route::livewire('admin/press-releases/{id}', 'admin.press-releases.show')->name('admin.press-releases.show');
Route::livewire('admin/press-releases/{id}/edit', 'admin.press-releases.edit')->name('admin.press-releases.edit');
// Beweisoriginal und veröffentlichte Fassung (Bildkennzeichnung E.4):
// nur hier, nur mit Zweck (per POST, Audit A-08), jeder Abruf
// protokolliert; Restnachweise entfernter Bilder nur mit
@ -55,106 +54,106 @@ Route::middleware(['auth', 'verified', BlockAdminDuringImpersonation::class, Ens
// Rubriken-Taxonomie: portalweite Struktur — nur admin (Befund H2).
Route::middleware('can:categories:manage')->group(function (): void {
Volt::route('admin/categories', 'admin.categories.index')->name('admin.categories.index');
Volt::route('admin/categories/create', 'admin.categories.create')->name('admin.categories.create');
Volt::route('admin/categories/{id}/edit', 'admin.categories.edit')->name('admin.categories.edit');
Route::livewire('admin/categories', 'admin.categories.index')->name('admin.categories.index');
Route::livewire('admin/categories/create', 'admin.categories.create')->name('admin.categories.create');
Route::livewire('admin/categories/{id}/edit', 'admin.categories.edit')->name('admin.categories.edit');
});
Route::middleware('can:footer-codes:manage')->group(function (): void {
Volt::route('admin/footer-codes', 'admin.footer-codes.index')->name('admin.footer-codes.index');
Volt::route('admin/footer-codes/create', 'admin.footer-codes.create')->name('admin.footer-codes.create');
Volt::route('admin/footer-codes/{id}/edit', 'admin.footer-codes.edit')->name('admin.footer-codes.edit');
Route::livewire('admin/footer-codes', 'admin.footer-codes.index')->name('admin.footer-codes.index');
Route::livewire('admin/footer-codes/create', 'admin.footer-codes.create')->name('admin.footer-codes.create');
Route::livewire('admin/footer-codes/{id}/edit', 'admin.footer-codes.edit')->name('admin.footer-codes.edit');
});
// CRM
// Lesen (companies:read) auch für Editoren; Schreiben nur admin (companies:write, Befund H2).
Volt::route('admin/companies', 'admin.companies.index')->name('admin.companies.index');
Volt::route('admin/companies/{id}', 'admin.companies.show')->where('id', '[0-9]+')->name('admin.companies.show');
Volt::route('admin/contacts', 'admin.contacts.index')->name('admin.contacts.index');
Route::livewire('admin/companies', 'admin.companies.index')->name('admin.companies.index');
Route::livewire('admin/companies/{id}', 'admin.companies.show')->where('id', '[0-9]+')->name('admin.companies.show');
Route::livewire('admin/contacts', 'admin.contacts.index')->name('admin.contacts.index');
Route::middleware('can:companies:write')->group(function (): void {
Volt::route('admin/companies/create', 'admin.companies.create')->name('admin.companies.create');
Volt::route('admin/companies/{id}/edit', 'admin.companies.edit')->name('admin.companies.edit');
Volt::route('admin/companies/{companyId}/contacts/create', 'admin.contacts.create')->name('admin.companies.contacts.create');
Volt::route('admin/contacts/create', 'admin.contacts.create')->name('admin.contacts.create');
Volt::route('admin/contacts/{id}/edit', 'admin.contacts.edit')->name('admin.contacts.edit');
Route::livewire('admin/companies/create', 'admin.companies.create')->name('admin.companies.create');
Route::livewire('admin/companies/{id}/edit', 'admin.companies.edit')->name('admin.companies.edit');
Route::livewire('admin/companies/{companyId}/contacts/create', 'admin.contacts.create')->name('admin.companies.contacts.create');
Route::livewire('admin/contacts/create', 'admin.contacts.create')->name('admin.contacts.create');
Route::livewire('admin/contacts/{id}/edit', 'admin.contacts.edit')->name('admin.contacts.edit');
});
// Recht & Compliance (WS-3): Queue für DSGVO-/Persönlichkeitsrechts-/Meldungen
// — sensible Vorgänge, nur admin (Befund H2).
Route::middleware('can:compliance:manage')->group(function (): void {
Volt::route('admin/legal-requests', 'admin.legal-requests.index')->name('admin.legal-requests.index');
Volt::route('admin/legal-requests/{id}', 'admin.legal-requests.show')->name('admin.legal-requests.show');
Route::livewire('admin/legal-requests', 'admin.legal-requests.index')->name('admin.legal-requests.index');
Route::livewire('admin/legal-requests/{id}', 'admin.legal-requests.show')->name('admin.legal-requests.show');
// Kontakt: Queue für Anliegen aus dem Kontakt-Widget (Kontaktaufnahme,
// Fehlermeldung, PM-Meldung, Feedback)
Volt::route('admin/contact-messages', 'admin.contact-messages.index')->name('admin.contact-messages.index');
Volt::route('admin/contact-messages/{id}', 'admin.contact-messages.show')->name('admin.contact-messages.show');
Route::livewire('admin/contact-messages', 'admin.contact-messages.index')->name('admin.contact-messages.index');
Route::livewire('admin/contact-messages/{id}', 'admin.contact-messages.show')->name('admin.contact-messages.show');
});
// Billing: Rechnungen, Zahlungen, Tarife, Gutscheine — nur admin (Befund H2).
Route::middleware('can:billing:manage')->group(function (): void {
Volt::route('admin/invoices', 'admin.invoices.index')->name('admin.invoices.index');
Route::livewire('admin/invoices', 'admin.invoices.index')->name('admin.invoices.index');
Route::get('admin/legacy-invoices/{legacyInvoice}/pdf', LegacyInvoicePdfController::class)->name('admin.legacy-invoices.pdf');
Route::get('admin/invoices/{invoice}/pdf', InvoicePdfController::class)->name('admin.invoices.pdf');
Volt::route('admin/payments', 'admin.payments.index')->name('admin.payments.index');
Volt::route('admin/payments/plans', 'admin.payments.plans')->name('admin.payments.plans');
Volt::route('admin/coupons', 'admin.coupons.index')->name('admin.coupons.index');
Volt::route('admin/newsletter-sync', 'admin.newsletter.sync')->name('admin.newsletter.sync');
Route::livewire('admin/payments', 'admin.payments.index')->name('admin.payments.index');
Route::livewire('admin/payments/plans', 'admin.payments.plans')->name('admin.payments.plans');
Route::livewire('admin/coupons', 'admin.coupons.index')->name('admin.coupons.index');
Route::livewire('admin/newsletter-sync', 'admin.newsletter.sync')->name('admin.newsletter.sync');
});
// Administration
Volt::route('admin/presets', 'admin.presets.index')->name('admin.presets.index');
Volt::route('admin/presets/create', 'admin.presets.create')->name('admin.presets.create');
Volt::route('admin/presets/{id}/edit', 'admin.presets.edit')->name('admin.presets.edit');
Route::livewire('admin/presets', 'admin.presets.index')->name('admin.presets.index');
Route::livewire('admin/presets/create', 'admin.presets.create')->name('admin.presets.create');
Route::livewire('admin/presets/{id}/edit', 'admin.presets.edit')->name('admin.presets.edit');
Volt::route('admin/users', 'admin.users')->name('admin.users.index');
Volt::route('admin/users/create', 'admin.users.create')->name('admin.users.create');
Route::livewire('admin/users', 'admin.users')->name('admin.users.index');
Route::livewire('admin/users/create', 'admin.users.create')->name('admin.users.create');
// Gutschriften auf der Detailseite sind finanzwirksam: die Berechtigung
// hängt an der Route (persistente Authorize-Middleware, greift auch für
// Livewire-Folge-Requests) und nicht nur an mount() (Audit F08).
Volt::route('admin/users/{id}', 'admin.users.show')->middleware('can:users:manage')->name('admin.users.show');
Volt::route('admin/users/{id}/edit', 'admin.users.edit')->name('admin.users.edit');
Route::livewire('admin/users/{id}', 'admin.users.show')->middleware('can:users:manage')->name('admin.users.show');
Route::livewire('admin/users/{id}/edit', 'admin.users.edit')->name('admin.users.edit');
// Interner Newsletter: Kampagnen an Bestands-User (Filter + Protokoll).
// Massenversand an die User-Datenbank → nur mit users:manage (admin).
Route::middleware('can:users:manage')->group(function (): void {
// Mail-Sperrliste (Bounce-Suppression, Roadmap 1b.6)
Volt::route('admin/mail/sperrliste', 'admin.mail.suppressions')->name('admin.mail.suppressions');
Volt::route('admin/newsletter', 'admin.newsletter.campaigns.index')->name('admin.newsletter.campaigns.index');
Volt::route('admin/newsletter/abmeldungen', 'admin.newsletter.unsubscribes')->name('admin.newsletter.unsubscribes');
Volt::route('admin/newsletter/create', 'admin.newsletter.campaigns.edit')->name('admin.newsletter.campaigns.create');
Volt::route('admin/newsletter/{id}', 'admin.newsletter.campaigns.show')->where('id', '[0-9]+')->name('admin.newsletter.campaigns.show');
Volt::route('admin/newsletter/{id}/edit', 'admin.newsletter.campaigns.edit')->where('id', '[0-9]+')->name('admin.newsletter.campaigns.edit');
Route::livewire('admin/mail/sperrliste', 'admin.mail.suppressions')->name('admin.mail.suppressions');
Route::livewire('admin/newsletter', 'admin.newsletter.campaigns.index')->name('admin.newsletter.campaigns.index');
Route::livewire('admin/newsletter/abmeldungen', 'admin.newsletter.unsubscribes')->name('admin.newsletter.unsubscribes');
Route::livewire('admin/newsletter/create', 'admin.newsletter.campaigns.edit')->name('admin.newsletter.campaigns.create');
Route::livewire('admin/newsletter/{id}', 'admin.newsletter.campaigns.show')->where('id', '[0-9]+')->name('admin.newsletter.campaigns.show');
Route::livewire('admin/newsletter/{id}/edit', 'admin.newsletter.campaigns.edit')->where('id', '[0-9]+')->name('admin.newsletter.campaigns.edit');
});
Volt::route('admin/roles', 'admin.roles.index')->name('admin.roles.index');
Volt::route('admin/roles/create', 'admin.roles.create')->name('admin.roles.create');
Volt::route('admin/roles/{id}/edit', 'admin.roles.edit')->name('admin.roles.edit');
Route::livewire('admin/roles', 'admin.roles.index')->name('admin.roles.index');
Route::livewire('admin/roles/create', 'admin.roles.create')->name('admin.roles.create');
Route::livewire('admin/roles/{id}/edit', 'admin.roles.edit')->name('admin.roles.edit');
// Bilder (Bildkennzeichnung): alle Titelbilder mit Nachweis, Bestätigung und KI-Vorab-Check.
Volt::route('admin/images', 'admin.images.index')->name('admin.images.index');
Route::livewire('admin/images', 'admin.images.index')->name('admin.images.index');
// Beweisarchiv (Bildkennzeichnung Block F): Liste, Legal Hold, Öffnen/Export mit Zweck.
Route::middleware('can:compliance:manage')->group(function (): void {
Volt::route('admin/archive', 'admin.archive.index')->name('admin.archive.index');
Route::livewire('admin/archive', 'admin.archive.index')->name('admin.archive.index');
Route::match(['get', 'post'], 'admin/archive/{entry}/download', [ArchiveEntryController::class, 'download'])->whereNumber('entry')->name('admin.archive.download');
Route::match(['get', 'post'], 'admin/archive/{entry}/export', [ArchiveEntryController::class, 'export'])->whereNumber('entry')->name('admin.archive.export');
});
// Reports
Volt::route('admin/reports/activity', 'admin.reports.activity')->name('admin.reports.activity');
Volt::route('admin/reports/slow-requests', 'admin.reports.slow-requests')->name('admin.reports.slow-requests');
Route::livewire('admin/reports/activity', 'admin.reports.activity')->name('admin.reports.activity');
Route::livewire('admin/reports/slow-requests', 'admin.reports.slow-requests')->name('admin.reports.slow-requests');
// Einlieferer-Bericht: unzustellbare Kontaktdaten und abgelehnte
// Meldungen je API-Einlieferer (Kontakterreichbarkeit).
Volt::route('admin/reports/einlieferer', 'admin.reports.submitter-contacts')->name('admin.reports.submitter-contacts');
Route::livewire('admin/reports/einlieferer', 'admin.reports.submitter-contacts')->name('admin.reports.submitter-contacts');
// Indexierungsstatus aus der Search Console (Roadmap 1c.4): Verteilung
// nach Direkteinreichung/Syndikation — Grundlage für die Kundenansicht.
Volt::route('admin/reports/indexierung', 'admin.reports.index-status')->name('admin.reports.index-status');
Route::livewire('admin/reports/indexierung', 'admin.reports.index-status')->name('admin.reports.index-status');
Route::middleware('can:settings:manage')->group(function (): void {
Volt::route('admin/reports/system-health', 'admin.reports.system-health')->name('admin.reports.system-health');
Route::livewire('admin/reports/system-health', 'admin.reports.system-health')->name('admin.reports.system-health');
});
});

View file

@ -6,12 +6,11 @@ use App\Http\Controllers\Auth\MagicLinkConsumeController;
use App\Http\Controllers\Auth\VerifyEmailController;
use Illuminate\Support\Facades\Route;
use Laravel\Fortify\Http\Controllers\AuthenticatedSessionController;
use Livewire\Volt\Volt;
// Fortify-Routen für Authentifizierung mit Livewire
Route::group(['middleware' => config('fortify.middleware', ['web'])], function () {
// Login mit Livewire
Volt::route('/login', 'auth.login')
Route::livewire('/login', 'auth.login')
->middleware(['guest:'.config('fortify.guard')])
->name('login');
@ -24,7 +23,7 @@ Route::group(['middleware' => config('fortify.middleware', ['web'])], function (
// Anmeldung per E-Mail-Link (Magic-Link): zusammengeführte Seite für
// Bestandskonten UND hinterlegte Pressekontakte ohne Account (WS-2).
Volt::route('/anmeldelink', 'auth.magic-link')
Route::livewire('/anmeldelink', 'auth.magic-link')
->middleware(['guest:'.config('fortify.guard')])
->name('magic-link.request');
@ -41,22 +40,22 @@ Route::group(['middleware' => config('fortify.middleware', ['web'])], function (
->name('oauth.google.callback');
// Registrierung mit Livewire
Volt::route('/register', 'auth.register')
Route::livewire('/register', 'auth.register')
->middleware(['guest:'.config('fortify.guard')])
->name('register');
// Passwort vergessen mit Livewire
Volt::route('/forgot-password', 'auth.forgot-password')
Route::livewire('/forgot-password', 'auth.forgot-password')
->middleware(['guest:'.config('fortify.guard')])
->name('password.request');
// Passwort zurücksetzen mit Livewire
Volt::route('/reset-password/{token}', 'auth.reset-password')
Route::livewire('/reset-password/{token}', 'auth.reset-password')
->middleware(['guest:'.config('fortify.guard')])
->name('password.reset');
// E-Mail-Verifizierung: Notice-/Danke-Seite (Volt)
Volt::route('/verify-email', 'auth.verify-email')
Route::livewire('/verify-email', 'auth.verify-email')
->middleware(['auth:'.config('fortify.guard')])
->name('verification.notice');
@ -81,12 +80,12 @@ Route::group(['middleware' => config('fortify.middleware', ['web'])], function (
// 2FA-Challenge-Seite (Volt-Frontend für Fortifys two-factor-challenge);
// der eigentliche POST geht an Fortifys Controller.
Volt::route('/two-factor-challenge', 'auth.two-factor-challenge')
Route::livewire('/two-factor-challenge', 'auth.two-factor-challenge')
->middleware(['guest:'.config('fortify.guard')])
->name('two-factor.challenge');
// Passwort bestätigen mit Livewire
Volt::route('/confirm-password', 'auth.confirm-password')
Route::livewire('/confirm-password', 'auth.confirm-password')
->middleware(['auth:'.config('fortify.guard')])
->name('password.confirm');

View file

@ -10,7 +10,6 @@ use App\Http\Controllers\Web\PressReleaseReportController;
use App\Http\Middleware\EnsureUserIsCustomer;
use App\Http\Middleware\LogSlowAdminRequests;
use Illuminate\Support\Facades\Route;
use Livewire\Volt\Volt;
// ============================================================
// "Mein Bereich" – Eigentümer-Sicht im gemeinsamen Admin-Panel
@ -23,12 +22,12 @@ Route::middleware(['auth', 'verified', EnsureUserIsCustomer::class, LogSlowAdmin
->name('me.')
->group(function () {
Volt::route('/', 'customer.dashboard')->name('dashboard');
Route::livewire('/', 'customer.dashboard')->name('dashboard');
Volt::route('press-releases', 'customer.press-releases.index')->name('press-releases.index');
Volt::route('press-releases/create', 'customer.press-releases.create')->name('press-releases.create');
Volt::route('press-releases/{id}', 'customer.press-releases.show')->name('press-releases.show');
Volt::route('press-releases/{id}/edit', 'customer.press-releases.edit')->name('press-releases.edit');
Route::livewire('press-releases', 'customer.press-releases.index')->name('press-releases.index');
Route::livewire('press-releases/create', 'customer.press-releases.create')->name('press-releases.create');
Route::livewire('press-releases/{id}', 'customer.press-releases.show')->name('press-releases.show');
Route::livewire('press-releases/{id}/edit', 'customer.press-releases.edit')->name('press-releases.edit');
Route::get('press-releases/{id}/nachweis', ProofPdfController::class)
->where('id', '[0-9]+')
->name('press-releases.proof');
@ -39,14 +38,14 @@ Route::middleware(['auth', 'verified', EnsureUserIsCustomer::class, LogSlowAdmin
->where('pressReleaseId', '[0-9]+')
->name('press-releases.report');
Volt::route('firmen', 'customer.press-kits.index')->name('press-kits.index');
Volt::route('firmen/anlegen', 'customer.press-kits.create')->name('press-kits.create');
Volt::route('firmen/{id}', 'customer.press-kits.show')->name('press-kits.show');
Route::livewire('firmen', 'customer.press-kits.index')->name('press-kits.index');
Route::livewire('firmen/anlegen', 'customer.press-kits.create')->name('press-kits.create');
Route::livewire('firmen/{id}', 'customer.press-kits.show')->name('press-kits.show');
Route::redirect('pressemappen', '/admin/me/firmen', 301);
Route::get('pressemappen/{id}', fn (string $id) => redirect("/admin/me/firmen/{$id}", 301))
->where('id', '[0-9]+');
Volt::route('buchungen-add-ons', 'customer.bookings')->name('bookings.index');
Route::livewire('buchungen-add-ons', 'customer.bookings')->name('bookings.index');
Route::get('checkout/abo/{planSlug}/{interval}', [CheckoutController::class, 'subscription'])
->whereIn('interval', ['monthly', 'yearly'])
->name('checkout.subscription');
@ -65,14 +64,14 @@ Route::middleware(['auth', 'verified', EnsureUserIsCustomer::class, LogSlowAdmin
->name('checkout.change');
Route::get('checkout/abo-verwalten', [CheckoutController::class, 'billingPortal'])
->name('checkout.billing-portal');
Volt::route('invoices', 'customer.invoices')->name('invoices.index');
Route::livewire('invoices', 'customer.invoices')->name('invoices.index');
Route::get('legacy-invoices/{legacyInvoice}/pdf', LegacyInvoicePdfController::class)->name('invoices.pdf');
Route::get('invoices/{invoice}/stripe', StripeInvoiceRedirectController::class)->name('invoices.stripe');
Route::get('invoices/{invoice}/pdf', InvoicePdfController::class)->name('invoices.manual-pdf');
Volt::route('tokens', 'customer.tokens')->name('tokens.index');
Route::livewire('tokens', 'customer.tokens')->name('tokens.index');
Volt::route('profile', 'customer.profile')->name('profile');
Volt::route('security', 'customer.security')->name('security');
Route::livewire('profile', 'customer.profile')->name('profile');
Route::livewire('security', 'customer.security')->name('security');
});
// ============================================================

View file

@ -15,14 +15,14 @@ use Illuminate\Auth\Events\Login;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Notification;
use Illuminate\Support\Facades\Queue;
use Livewire\Volt\Volt;
use Livewire\Livewire;
use Tests\TestCase;
test('a self registration is recorded in the activity log', function () {
/** @var TestCase $this */
Notification::fake();
Volt::test('auth.register')
Livewire::test('auth.register')
->set('name', 'Verlauf Tester')
->set('email', 'verlauf@example.com')
->set('password', 'password')
@ -106,7 +106,7 @@ test('the activity report page lists events and filters by type', function () {
$this->get(route('admin.reports.activity'))->assertOk();
Volt::test('admin.reports.activity')
Livewire::test('admin.reports.activity')
->assertSee('Kontaktanfrage „Testthema“')
->assertSee('hat sich angemeldet')
->set('typeFilter', ActivityType::ContactRequest->value)

View file

@ -7,7 +7,7 @@ use App\Models\User;
use App\Support\WebPageCache;
use Database\Seeders\RolesAndPermissionsSeeder;
use Illuminate\Support\Facades\Cache;
use Livewire\Volt\Volt as LivewireVolt;
use Livewire\Livewire;
use Tests\TestCase;
beforeEach(function (): void {
@ -27,7 +27,7 @@ test('admin can render category create page', function () {
});
test('admin can create a new category with both translations', function () {
LivewireVolt::test('admin.categories.create')
Livewire::test('admin.categories.create')
->set('portal', Portal::Both->value)
->set('nameDe', 'Künstliche Intelligenz')
->set('nameEn', 'Artificial Intelligence')
@ -52,7 +52,7 @@ test('admin can create a new category with both translations', function () {
});
test('category create requires both names', function () {
LivewireVolt::test('admin.categories.create')
Livewire::test('admin.categories.create')
->set('nameDe', '')
->set('nameEn', '')
->call('save')
@ -66,7 +66,7 @@ test('category create generates unique slug per locale on collision', function (
['locale' => 'en', 'name' => 'Business', 'slug' => 'business'],
]);
LivewireVolt::test('admin.categories.create')
Livewire::test('admin.categories.create')
->set('nameDe', 'Wirtschaft')
->set('nameEn', 'Business')
->call('save')
@ -87,7 +87,7 @@ test('admin can edit an existing category and rename slugs in place', function (
['locale' => 'en', 'name' => 'Old Name', 'slug' => 'old-name'],
]);
LivewireVolt::test('admin.categories.edit', ['id' => $category->id])
Livewire::test('admin.categories.edit', ['id' => $category->id])
->set('nameDe', 'Neuer Name')
->set('slugDe', 'neuer-name')
->set('nameEn', 'New Name')
@ -116,7 +116,7 @@ test('category edit refuses parent assignment that would create a hierarchy loop
['locale' => 'en', 'name' => 'Child', 'slug' => 'child-en'],
]);
LivewireVolt::test('admin.categories.edit', ['id' => $parent->id])
Livewire::test('admin.categories.edit', ['id' => $parent->id])
->set('nameDe', 'Parent')
->set('slugDe', 'parent')
->set('nameEn', 'Parent')
@ -137,7 +137,7 @@ test('category cannot be deleted while it has press releases', function () {
'category_id' => $category->id,
]);
LivewireVolt::test('admin.categories.edit', ['id' => $category->id])
Livewire::test('admin.categories.edit', ['id' => $category->id])
->call('deleteCategory');
expect(Category::query()->find($category->id))->not->toBeNull();
@ -150,7 +150,7 @@ test('category can be deleted when empty', function () {
['locale' => 'en', 'name' => 'Empty', 'slug' => 'empty-en'],
]);
LivewireVolt::test('admin.categories.edit', ['id' => $category->id])
Livewire::test('admin.categories.edit', ['id' => $category->id])
->call('deleteCategory')
->assertRedirect(route('admin.categories.index'));
@ -170,7 +170,7 @@ test('deactivating a category clears the cached public pages and its feed at onc
// Feed warm im Seiten-Cache.
$this->get('https://presseecho.test/de/category/handel/feed')->assertSuccessful();
LivewireVolt::test('admin.categories.edit', ['id' => $category->id])
Livewire::test('admin.categories.edit', ['id' => $category->id])
->set('isActive', false)
->call('save')
->assertHasNoErrors();
@ -184,7 +184,7 @@ test('creating an active category clears the cached public pages at once', funct
$generation = WebPageCache::generation();
Cache::put('web.llms.presseecho.test', 'alt', 3600);
LivewireVolt::test('admin.categories.create')
Livewire::test('admin.categories.create')
->set('portal', Portal::Presseecho->value)
->set('nameDe', 'Energie')
->set('nameEn', 'Energy')

Some files were not shown because too many files have changed in this diff Show more