mirror of
https://github.com/HolgerHatGarKeineNode/einundzwanzig-app.git
synced 2026-01-24 12:03:17 +00:00
⚡ Add Livewire config, update composer dependencies, and enhance Blade layouts
- Introduced `livewire/livewire` v4 dependency. - Added `config/livewire.php` for Livewire customization. - Adjusted `login.blade.php` language fallback logic for session handling. - Created new Blade layouts (`error.blade.php`, `auth.blade.php`, `app.blade.php`) for unified component architecture.
This commit is contained in:
@@ -21,6 +21,7 @@
|
|||||||
"league/glide": "^3.0",
|
"league/glide": "^3.0",
|
||||||
"livewire/flux": "^2.2",
|
"livewire/flux": "^2.2",
|
||||||
"livewire/flux-pro": "^2.2",
|
"livewire/flux-pro": "^2.2",
|
||||||
|
"livewire/livewire": "^4.0",
|
||||||
"livewire/volt": "^1.7.0",
|
"livewire/volt": "^1.7.0",
|
||||||
"lwwcas/laravel-countries": "^4.12",
|
"lwwcas/laravel-countries": "^4.12",
|
||||||
"outhebox/blade-flags": "^1.5",
|
"outhebox/blade-flags": "^1.5",
|
||||||
|
|||||||
2
composer.lock
generated
2
composer.lock
generated
@@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "31dc2526be183359ebca39059ecc1b86",
|
"content-hash": "b99119dd2441516637942c6958636482",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "akuechler/laravel-geoly",
|
"name": "akuechler/laravel-geoly",
|
||||||
|
|||||||
277
config/livewire.php
Normal file
277
config/livewire.php
Normal file
@@ -0,0 +1,277 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Component Locations
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This value sets the root directories that'll be used to resolve view-based
|
||||||
|
| components like single and multi-file components. The make command will
|
||||||
|
| use the first directory in this array to add new component files to.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'component_locations' => [
|
||||||
|
resource_path('views/components'),
|
||||||
|
resource_path('views/livewire'),
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Component Namespaces
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This value sets default namespaces that will be used to resolve view-based
|
||||||
|
| components like single-file and multi-file components. These folders'll
|
||||||
|
| also be referenced when creating new components via the make command.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'component_namespaces' => [
|
||||||
|
'layouts' => resource_path('views/layouts'),
|
||||||
|
'pages' => resource_path('views/pages'),
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Page Layout
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| The view that will be used as the layout when rendering a single component as
|
||||||
|
| an entire page via `Route::livewire('/post/create', 'pages::create-post')`.
|
||||||
|
| In this case, the content of pages::create-post will render into $slot.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'component_layout' => 'layouts::app',
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Lazy Loading Placeholder
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Livewire allows you to lazy load components that would otherwise slow down
|
||||||
|
| the initial page load. Every component can have a custom placeholder or
|
||||||
|
| you can define the default placeholder view for all components below.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'component_placeholder' => null, // Example: 'placeholders::skeleton'
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Make Command
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| This value determines the default configuration for the artisan make command
|
||||||
|
| You can configure the component type (sfc, mfc, class) and whether to use
|
||||||
|
| the high-voltage (⚡) emoji as a prefix in the sfc|mfc component names.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'make_command' => [
|
||||||
|
'type' => 'sfc', // Options: 'sfc', 'mfc', 'class'
|
||||||
|
'emoji' => true, // Options: true, false
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Class Namespace
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This value sets the root class namespace for Livewire component classes in
|
||||||
|
| your application. This value will change where component auto-discovery
|
||||||
|
| finds components. It's also referenced by the file creation commands.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'class_namespace' => 'App\\Livewire',
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Class Path
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This value is used to specify the path where Livewire component class files
|
||||||
|
| are created when running creation commands like `artisan make:livewire`.
|
||||||
|
| This path is customizable to match your projects directory structure.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'class_path' => app_path('Livewire'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| View Path
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This value is used to specify where Livewire component Blade templates are
|
||||||
|
| stored when running file creation commands like `artisan make:livewire`.
|
||||||
|
| It is also used if you choose to omit a component's render() method.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'view_path' => resource_path('views/livewire'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Temporary File Uploads
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Livewire handles file uploads by storing uploads in a temporary directory
|
||||||
|
| before the file is stored permanently. All file uploads are directed to
|
||||||
|
| a global endpoint for temporary storage. You may configure this below:
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'temporary_file_upload' => [
|
||||||
|
'disk' => env('LIVEWIRE_TEMPORARY_FILE_UPLOAD_DISK'), // Example: 'local', 's3' | Default: 'default'
|
||||||
|
'rules' => null, // Example: ['file', 'mimes:png,jpg'] | Default: ['required', 'file', 'max:12288'] (12MB)
|
||||||
|
'directory' => null, // Example: 'tmp' | Default: 'livewire-tmp'
|
||||||
|
'middleware' => null, // Example: 'throttle:5,1' | Default: 'throttle:60,1'
|
||||||
|
'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs...
|
||||||
|
'png', 'gif', 'bmp', 'svg', 'wav', 'mp4',
|
||||||
|
'mov', 'avi', 'wmv', 'mp3', 'm4a',
|
||||||
|
'jpg', 'jpeg', 'mpga', 'webp', 'wma',
|
||||||
|
],
|
||||||
|
'max_upload_time' => 5, // Max duration (in minutes) before an upload is invalidated...
|
||||||
|
'cleanup' => true, // Should cleanup temporary uploads older than 24 hrs...
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Render On Redirect
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This value determines if Livewire will run a component's `render()` method
|
||||||
|
| after a redirect has been triggered using something like `redirect(...)`
|
||||||
|
| Setting this to true will render the view once more before redirecting
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'render_on_redirect' => false,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Eloquent Model Binding
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Previous versions of Livewire supported binding directly to eloquent model
|
||||||
|
| properties using wire:model by default. However, this behavior has been
|
||||||
|
| deemed too "magical" and has therefore been put under a feature flag.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'legacy_model_binding' => false,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Auto-inject Frontend Assets
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| By default, Livewire automatically injects its JavaScript and CSS into the
|
||||||
|
| <head> and <body> of pages containing Livewire components. By disabling
|
||||||
|
| this behavior, you need to use @livewireStyles and @livewireScripts.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'inject_assets' => true,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Navigate (SPA mode)
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| By adding `wire:navigate` to links in your Livewire application, Livewire
|
||||||
|
| will prevent the default link handling and instead request those pages
|
||||||
|
| via AJAX, creating an SPA-like effect. Configure this behavior here.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'navigate' => [
|
||||||
|
'show_progress_bar' => true,
|
||||||
|
'progress_bar_color' => '#2299dd',
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| HTML Morph Markers
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Livewire intelligently "morphs" existing HTML into the newly rendered HTML
|
||||||
|
| after each update. To make this process more reliable, Livewire injects
|
||||||
|
| "markers" into the rendered Blade surrounding @if, @class & @foreach.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'inject_morph_markers' => true,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Smart Wire Keys
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Livewire uses loops and keys used within loops to generate smart keys that
|
||||||
|
| are applied to nested components that don't have them. This makes using
|
||||||
|
| nested components more reliable by ensuring that they all have keys.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'smart_wire_keys' => true,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Pagination Theme
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When enabling Livewire's pagination feature by using the `WithPagination`
|
||||||
|
| trait, Livewire will use Tailwind templates to render pagination views
|
||||||
|
| on the page. If you want Bootstrap CSS, you can specify: "bootstrap"
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'pagination_theme' => 'tailwind',
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Release Token
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This token is stored client-side and sent along with each request to check
|
||||||
|
| a users session to see if a new release has invalidated it. If there is
|
||||||
|
| a mismatch it will throw an error and prompt for a browser refresh.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'release_token' => 'a',
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| CSP Safe
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This config is used to determine if Livewire will use the CSP-safe version
|
||||||
|
| of Alpine in its bundle. This is useful for applications that are using
|
||||||
|
| strict Content Security Policy (CSP) to protect against XSS attacks.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'csp_safe' => false,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Payload Guards
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| These settings protect against malicious or oversized payloads that could
|
||||||
|
| cause denial of service. The default values should feel reasonable for
|
||||||
|
| most web applications. Each can be set to null to disable the limit.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'payload' => [
|
||||||
|
'max_size' => 1024 * 1024, // 1MB - maximum request payload size in bytes
|
||||||
|
'max_nesting_depth' => 10, // Maximum depth of dot-notation property paths
|
||||||
|
'max_calls' => 50, // Maximum method calls per request
|
||||||
|
'max_components' => 20, // Maximum components per batch request
|
||||||
|
],
|
||||||
|
];
|
||||||
5
resources/views/layouts/app.blade.php
Normal file
5
resources/views/layouts/app.blade.php
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<x-layouts.app.sidebar :title="$title ?? null">
|
||||||
|
<flux:main>
|
||||||
|
{{ $slot }}
|
||||||
|
</flux:main>
|
||||||
|
</x-layouts.app.sidebar>
|
||||||
3
resources/views/layouts/auth.blade.php
Normal file
3
resources/views/layouts/auth.blade.php
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<x-layouts.auth.simple :title="$title ?? null">
|
||||||
|
{{ $slot }}
|
||||||
|
</x-layouts.auth.simple>
|
||||||
51
resources/views/layouts/error.blade.php
Normal file
51
resources/views/layouts/error.blade.php
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>@yield('title')</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background-image: url('/img/social.jpg');
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
color: white;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error-container {
|
||||||
|
background: rgba(0, 0, 0, 0.7);
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gif-container {
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="error-container">
|
||||||
|
<h1>@yield('title')</h1>
|
||||||
|
@if(isset($exception) && in_array($exception->getCode(), [403, 404, 419, 422, 429, 500, 503]))
|
||||||
|
<div class="message">@yield('message')</div>
|
||||||
|
@endif
|
||||||
|
<div class="gif-container">
|
||||||
|
<img src="{{ asset('img/vin_diesel/vin_diesel' . rand(1, 9) . '.webp') }}" alt="Vin Diesel">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -37,11 +37,11 @@ class extends Component {
|
|||||||
public ?string $url = null;
|
public ?string $url = null;
|
||||||
public ?string $lnurl = null;
|
public ?string $lnurl = null;
|
||||||
public ?string $qrCode = null;
|
public ?string $qrCode = null;
|
||||||
public string $currentLangCountry = 'de-DE';
|
public ?string $currentLangCountry = 'de-DE';
|
||||||
|
|
||||||
public function mount(): void
|
public function mount(): void
|
||||||
{
|
{
|
||||||
$this->currentLangCountry = session('lang_country');
|
$this->currentLangCountry = session('lang_country') ?? 'de-DE';
|
||||||
|
|
||||||
// Nur beim ersten Mount initialisieren
|
// Nur beim ersten Mount initialisieren
|
||||||
if ($this->k1 === null) {
|
if ($this->k1 === null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user